自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么要讓你的代碼盡可能簡(jiǎn)單

開發(fā) 前端
編程很像寫作 —— 你應(yīng)該從一個(gè)能用的“不完美的初稿”開始,再通過兩三次修改,逐個(gè)解決初稿中存在的問題。

 [[374545]]

編程很像寫作 —— 你應(yīng)該從一個(gè)能用的“不完美的初稿”開始,再通過兩三次修改,逐個(gè)解決初稿中存在的問題。

工程師們肯定會(huì)嘲笑自己居然被輕率地比作了”作家“—— 但是今天早上的文檔又是誰寫的呢?你不是在“寫代碼”嗎?

軟件開發(fā)人員從事著最具創(chuàng)意的工程類型的工作。畢竟,與構(gòu)建橋梁的土木工程師相比,軟件工程師在構(gòu)建應(yīng)用程序時(shí)可以發(fā)揮更多自己的創(chuàng)意。

在具有創(chuàng)意性的行業(yè)中工作意味著你可以向那些寫文章的作者身上學(xué)習(xí)到很多的東西。那些常常被推薦用于解決寫作困難的方法也是最好的寫作建議之一。

下面讓我來向你推薦“不完美初稿”的技巧 —— 因?yàn)樗屇愠蔀樾矢叩?“coder”。

”不完美初稿”的訣竅

“不完美初稿”的訣竅非常普遍,即使沒讀過網(wǎng)上那些各式各樣的關(guān)于寫作的博客,那你也可能早在英語課堂上就聽說過。

“不完美的初稿”的關(guān)鍵就是,即使你的初稿寫的非常的糟糕,但是你也只需完成初稿就夠了 —— 因?yàn)槿魏纬醺宥急仁裁炊紱]有的空白頁(yè)強(qiáng)。

編輯修整自己的作品要比從頭開始編寫要容易的多,所以,你應(yīng)該立即嘗試地編寫一些內(nèi)容(不管是什么內(nèi)容都可以)只要能讓自己的代碼可以正常的工作。

換句話說,你今天要在午飯前寫完 100 行(有效)的不完美的代碼還是 0 行的完美代碼呢?

當(dāng)然,最后的結(jié)果都是,你會(huì)用以上任何一種方式完成 50 行完美的代碼。但是編寫“不完美的初稿”能帶來心理上的優(yōu)勢(shì):你將在承受較少壓力的情況下獲得更大的成就感。

**你將會(huì)享受編碼的快樂!**難道還有什么比這個(gè)更重要?

我該如何開始創(chuàng)作一份初稿

我更傾向于以“簡(jiǎn)單的初稿”為編碼的起點(diǎn),因?yàn)?ldquo;不完美的初稿”似乎是對(duì)我的編碼能力的一種否認(rèn)。

你是否想成為一位寫“不良代碼”的“不良程序員”,因?yàn)槟阕x過有關(guān)編寫“不完美的初稿”的建議?

不,你想成為一名“成功的程序員”,編寫“出色的代碼”,因?yàn)槟阏谧裱瓘?ldquo;簡(jiǎn)單的初稿”開始編碼的技巧。

如果你曾經(jīng)復(fù)制過一個(gè)代碼示例,然后對(duì)其進(jìn)行了調(diào)整以供自己使用,那么實(shí)際上你已經(jīng)學(xué)會(huì)了“簡(jiǎn)單的初稿”的訣竅。

使用代碼示例時(shí),你不可避免地要進(jìn)行很多更改,但關(guān)鍵是首先要使代碼能夠工作,然后馬上對(duì)其進(jìn)行改進(jìn)。

無論你是編碼的新手還是專家,你都可以使用“簡(jiǎn)單的初稿”的方法來完成任何的編程任務(wù)。

為什么“簡(jiǎn)單的初稿”非常有用

當(dāng)你編寫了有效的代碼時(shí),你就會(huì)感到很有成就感,這使你擁有了更好的心態(tài)。簡(jiǎn)單的代碼更有可能第一次編寫就能成功。

另外,簡(jiǎn)單的代碼易于編寫,從而節(jié)省了時(shí)間。的確,它可能看起來重復(fù)又啰嗦,你機(jī)智的大腦也會(huì)懇求你去找出一個(gè)更簡(jiǎn)潔、高效的“更好”的解決方案。

忽略它

訣竅是在有這些感覺時(shí)先喝點(diǎn)飲料,然后在追求簡(jiǎn)單的道路中勇往直前。等到代碼生效后,你將立即對(duì)其進(jìn)行重構(gòu) —— 在擁有能夠正常工作的版本之后,你就可以讓自己想法變得更加復(fù)雜。但是在這之前,請(qǐng)讓事情盡可能的簡(jiǎn)單。

寫作教練August Birch把這個(gè)稱作“分步式寫作”:寫下整個(gè)內(nèi)容,接著立即將它修改潤(rùn)色,完善和修改不斷交替。

但是在這一點(diǎn)上,編程和寫作有所不同:因?yàn)榇a必須可以成功執(zhí)行,所以開發(fā)人員都知道什么時(shí)候第一稿算是“足夠好”。當(dāng)你的代碼正常工作時(shí),這就是立即修改“簡(jiǎn)單的初稿”的信號(hào),并在進(jìn)行下一步之前對(duì)其進(jìn)行多次的完善。

對(duì)于任何只是學(xué)習(xí)編碼的人,這個(gè)方法都會(huì)提高兩項(xiàng)關(guān)鍵技能:編寫有效的代碼,并在不破壞正常運(yùn)行的前提下改進(jìn)代碼。

簡(jiǎn)單的代碼示例

我最近通過領(lǐng)英平臺(tái)指導(dǎo)了一名初級(jí)工程師,他正為一個(gè)過于復(fù)雜的編碼挑戰(zhàn)而苦苦掙扎。盡管一旦你需要在真實(shí)的項(xiàng)目中實(shí)踐時(shí),這樣的編碼挑戰(zhàn)就變得沒那么有用,但它是如何編寫“簡(jiǎn)單的初稿”的一個(gè)很好的例子。

由于問題很復(fù)雜,所以他打算嘗試編寫一個(gè)復(fù)雜的解決方案。讓我們來看看這個(gè)挑戰(zhàn):

“編寫一個(gè)函數(shù) addWeirdStuff,該函數(shù)將 arrayTwo 中所有奇數(shù)的和與 arrayOne 中每個(gè) 10 以下的元素相加。

類似地,addWeirdStuff 還需要將 arrayTwo 中所有偶數(shù)之和與 arrayOne 中等于或大于 10 的那些元素相加。

另外:如果 arrayOne 中的元素與 arrayTwo 中大于 20 的元素相加時(shí),還需要額外加上 1。

值得注意的是,就像在現(xiàn)實(shí)生活中一樣,他得到了不完整的需求說明:函數(shù) addWeirdStuff 應(yīng)該返回一個(gè)新數(shù)組,新數(shù)組包含來自 arrayOne 以及 arrayTwo 的項(xiàng)。

他最開始嘗試用一個(gè) for 循環(huán)來解決這個(gè)問題,但是最終沒有成功。這是一項(xiàng)復(fù)雜的認(rèn)知任務(wù),對(duì)人的工作記憶(工作記憶是短期記憶的另一個(gè)稱呼)一定是個(gè)挑戰(zhàn),而他對(duì)此一籌莫展。

這個(gè)人曾經(jīng)為了解決另一個(gè)代碼難題聯(lián)系過我,因?yàn)樗恍⌒膶?return 語句放入復(fù)雜的 for 循環(huán)中。他還沒有準(zhǔn)備好編寫簡(jiǎn)潔的代碼。

我告訴他,他需要使用兩個(gè)單獨(dú)的 for 循環(huán),為了簡(jiǎn)單他應(yīng)該使用 for…of 進(jìn)行循環(huán)。以下是 JavaScript 代碼,以及為檢查他的代碼是否有效的測(cè)試:

View the raw code as a GitHub gist

這個(gè)代碼寫得很丑陋,效果很差,但是它可以用!并且它具有超強(qiáng)的可讀性,特別是對(duì)于那些剛剛開始努力學(xué)習(xí)基本概念的初學(xué)者來說。

下一步就是完善這個(gè)“簡(jiǎn)單的初稿”。

重構(gòu)時(shí)間

重構(gòu),不管你對(duì)它是愛是恨,單對(duì)于寫文章的作者們來說,就相當(dāng)于一個(gè)編輯和修改的過程。在編程和其他類型的寫作中,如果是你自己編寫的文本(尤其是立即完成),修改會(huì)變得更加容易。

首先使用簡(jiǎn)單的語言來降低文本的復(fù)雜性,然后立即進(jìn)行編輯修改。這個(gè)方法適用于所有類型的寫作,包括編碼。

我從上面的“簡(jiǎn)單的初稿”進(jìn)行了重構(gòu):

View the raw code as a GitHub gist

這仍然是一個(gè)具有挑戰(zhàn)性的問題,還有很多其他方法可以解決此問題,但是這個(gè)版本朝著正確方向邁出了重要的一步。

在此版本的初稿中,我加了 reduce 函數(shù)因?yàn)槲腋矚g在代碼中使用函數(shù)式編程

記?。?ldquo;完美是好的敵人。”這只是你的初稿,你可以再次編輯!那是分步式的過程。

我還將可讀性的優(yōu)先級(jí)提高了,可讀性高于性能, 因?yàn)槲以诿總€(gè)內(nèi)部循環(huán)中使用了 .some()。這是 O(n2) 的雙層循環(huán)。對(duì)于小型的數(shù)組矩陣,這對(duì)性能沒什么影響,但是這樣的操作可能會(huì)讓你找不著工作。在我的下次一次重構(gòu)的版本中,這也是不是重要的優(yōu)化項(xiàng)。

我決定在完成“簡(jiǎn)單的初稿”前,我又使用 .map() 進(jìn)行了一輪變更:

View the raw code as a GitHub gist

這是一個(gè) “被改善的初稿”。我將兩個(gè) for…of 循環(huán)改成使用一次 .reduce()、一次 .some()、以及一次 .map()。我更喜歡這種編碼風(fēng)格。但是老實(shí)說,我的初稿沒有什么“錯(cuò)”,因?yàn)樗悄苡玫模皇菃?

現(xiàn)在,是切換編碼任務(wù)并決定明天再次審閱此段代碼的好時(shí)機(jī)。

應(yīng)用于的真實(shí)編碼場(chǎng)景

在實(shí)際工作中,我們經(jīng)常會(huì)收到混亂的需求說明以及最晚交付日期的壓力,特別是在使用新的 API 時(shí)。每個(gè)編碼人員有時(shí)都會(huì)想:“為什么這段代碼不能正常的工作?”

對(duì)于我指導(dǎo)的這個(gè)學(xué)生來說,他從無法將問題概念化到輕松解決問題,因?yàn)樗菑暮?jiǎn)單的for…of 循環(huán)開始的。得益于“簡(jiǎn)單的初稿”,他沒有感到困難和挫敗,反而感到成功和成就。

如果你更有經(jīng)驗(yàn),很自然的就能使用 .reduce()來解決問題,那就大膽試試吧!但是如果你需要查找語法,看看是否在不查找語法的情況,對(duì)代碼進(jìn)行重構(gòu)。因?yàn)樵诰幋a階段你是可以一直對(duì)代碼進(jìn)行修改的。

同樣地,如果你用的是 JavaScript,你可能希望能在在返回中增加類型檢查。這作為一個(gè)編碼挑戰(zhàn),這不是必需的,可以第二天再考慮加上。

在現(xiàn)實(shí)世界的其他場(chǎng)景中,“簡(jiǎn)單初稿”編碼方法的缺點(diǎn)在于你將頻繁進(jìn)行 git commit:至少,在進(jìn)行分步式開發(fā)時(shí),需要頻繁提交初稿的每個(gè)版本。在完成初稿前,你可能已經(jīng)提交了三四個(gè)工作版本。

如果在后續(xù)的工作中發(fā)現(xiàn)了問題,你會(huì)對(duì)之前的多次提交感到慶幸,因?yàn)槟憧梢愿鶕?jù)提交發(fā)現(xiàn)問題所在并找到解決方案。

另外,代碼的提交次數(shù)能給我超級(jí)大的驅(qū)動(dòng)力,特別是當(dāng)我遠(yuǎn)程辦公時(shí)。

測(cè)試

根據(jù)你對(duì)測(cè)試的個(gè)人偏好,完全可以在寫代碼之前寫測(cè)試。只需遵循相同的方法即可:寫盡可能簡(jiǎn)單的測(cè)試,然后在測(cè)試代碼可以正常工作后立即對(duì)其進(jìn)行重構(gòu)。

或者,像大多數(shù)程序員一樣,你可能更喜歡在有一段可以工作的代碼之后進(jìn)行測(cè)試 —— 這也完全可以,在編寫代碼并將其重構(gòu)一次或兩次之后,編寫一些簡(jiǎn)單的測(cè)試,然后再對(duì)測(cè)試代碼進(jìn)行重構(gòu)。

我知道寫代碼的最快方法是完全執(zhí)行以下操作:

  1. 寫簡(jiǎn)單的代碼
  2. 寫簡(jiǎn)單的測(cè)試
  3. 用簡(jiǎn)單的測(cè)試重構(gòu)簡(jiǎn)單的代碼
  4. 重構(gòu)簡(jiǎn)單的測(cè)試

就個(gè)人而言,我發(fā)現(xiàn)專注于“不完美的初稿”(或我喜歡說的“簡(jiǎn)單初稿”)使我更有可能先寫測(cè)試,因?yàn)槲也⒉辉诤鯇懙臏y(cè)試是否是完美的。

你甚至可以考慮將測(cè)試視為工作的“第二稿”,把測(cè)試任務(wù)推遲到明天。千萬別忘了測(cè)試,就當(dāng)是一切都為了你自己,你的項(xiàng)目和你的公司。

結(jié)論

無論你是代碼新手,初級(jí)工程師還是專家,只要你不專注于完美,都將可以更快地寫更多代碼。從“簡(jiǎn)單的初稿”開始,然后在代碼生效后立即對(duì)其進(jìn)行修整。

從一位技術(shù)作家那里獲取經(jīng)驗(yàn),該作家去年使用 10 種編程語言撰寫了 100,000 個(gè)有關(guān) JavaScript 的文字 —— 這個(gè)寫作技巧對(duì)開發(fā)人員和作家均適用。

我對(duì)所有級(jí)別的程序員的真正建議是,你的初稿應(yīng)該重復(fù),甚至感覺像是“黑客”。首先忘記基本的編碼原則這篇文中所倡導(dǎo)的(不要自我重復(fù)),然后再堅(jiān)持最基本的編碼規(guī)則:

“KISS” (Keep It Simple, Stupid!)

一旦你做到了這一點(diǎn),你就可以使你的代碼變得漂亮,但是如果你必須花費(fèi)數(shù)小時(shí)的調(diào)試時(shí)間,那么一整天的工作就會(huì)花光了 —— 甚至無法讓那段代碼正常工作。相信我,我就經(jīng)歷過!

而且,如果你只是在學(xué)習(xí)新的編程語言,開發(fā)工具或代碼庫(kù),則此建議是強(qiáng)制性的、必選的。

編碼快樂!

原文地址:Why You Should Make Your Code as Simple as Possible

原文作者:Dr. Derek Austin ??

譯文出自:掘金翻譯計(jì)劃

本文永久鏈接:https://github.com/xitu/gold-miner/blob/master/article/2020/why-you-should-make-your-code-as-simple-as-possible.md

譯者:NieZhuZhu(彈鐵蛋同學(xué))

校對(duì)者:Yuxiao Alisa Shi、flashhu、lsvih

本文轉(zhuǎn)載自微信公眾號(hào)「前端鐵蛋」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系前端鐵蛋公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 前端鐵蛋
相關(guān)推薦

2022-04-02 08:06:30

無服務(wù)器Arm云供應(yīng)

2021-08-09 06:57:44

最短路傳入函數(shù)

2024-01-10 11:39:32

數(shù)據(jù)中心碳排放服務(wù)器

2010-02-23 15:25:10

CentOS Apac

2014-12-29 13:02:55

Docker容器創(chuàng)建go語言

2017-10-25 09:24:25

蘋果

2021-06-17 09:20:51

華為工作三十而立

2017-03-24 14:48:20

Ubuntu新版本Linux

2023-04-05 23:04:30

Bing Chat微軟

2014-12-19 09:59:50

代碼

2020-06-09 15:18:48

數(shù)據(jù)庫(kù)Python技術(shù)

2025-02-25 08:36:56

2020-03-30 16:45:06

代碼看不懂

2011-08-16 13:31:07

微軟收購(gòu)諾基亞

2019-09-16 20:00:52

C語言編程語言

2016-08-19 01:59:22

APPAPM用戶

2017-11-29 18:16:15

高并發(fā)ERP態(tài)牛

2020-10-15 17:28:45

思科網(wǎng)絡(luò)創(chuàng)新

2023-02-03 17:25:31

自動(dòng)化代碼審查開發(fā)

2021-11-04 23:16:41

區(qū)塊鏈互聯(lián)網(wǎng)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)