好程式碼的科學定義
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
你如何定義好的程式碼?本文通過諮詢65個開發人員同一個問題從而得出了一個偽科學的答案。
首先我們相信寫好程式碼是非常重要的。為什麼呢?首先,好程式碼比差程式碼更有趣,成本更低。其次,程式碼好,就意味著你正在構建的產品有可能會更好。第三,也是非常關鍵的一點,寫出好的程式碼是我們的職責:畢竟,我們的工作就是寫程式碼。
方法
由於此65名開發人員都是我們某個職位的應聘者,所以這意味著這些樣品開發人員大多偏向於使用Java或Scala技能,並且通常有著5年及以上的工作經驗。
問題統一:“怎樣寫好程式碼?你如何定義好程式碼?”並且在面試時由同一人(面對面或通過電話),歷時約1年,從2014年1月至2015年1月,來執行此地調查。
梳理這些問題的答案之後,可以分為31個不同的類,每組至少有2個相似的答案。例如,下面這些答案通通歸納為可讀一類:
可讀。
- 人腦可閱讀。
- 能自我解釋。
- 人們能讀懂。
- 很容易理解。
- 不用5分鐘就能瞭解。
- 沒有文件,你也可以閱讀並理解。
- 可讀,新來的開發人員也能夠理解。
- 就如同文字一樣可讀。
- 易於閱讀,直線化的思維。
結果
這65位開發人員的答案總共統計出288條不同的內容,平均一個人4.43條。
當然,目前最常見的答案是,程式碼必須可讀(78.46%),幾乎10分之8的開發人員認為,好的程式碼應該易於閱讀和理解。
然後是可測試的/測試過的(29.23%),這說明好的程式碼應當是經過自動化測試的(或至少是有可能執行測試的)。25%的受訪者認為,良好的程式碼還應該是簡單的——不過於複雜,當然還應該是可以工作的,意味其能夠按照我們的意願正常執行功能。前五條是,程式碼應該是可維護的(21.54%)。
奇怪的是,我們發現有兩項內容是關於同一主題的:文件和程式碼註釋。有的開發人員認為程式碼應該自文件化(不需要用文件解釋),而有些開發人員則表示應該在程式碼中著重於註解,說明程式碼目的。
其他的,如,可擴充套件的/可重複使用的,恰當的命名規律,程式碼解耦或者稱為小方法的重要性——當然這個“小”在不同開發人員的眼中概念還不一樣:“10-15行”到“<50行”莫衷一是。
探討
面試中的回答給了我們很多有趣的可用於分析的定量資料,而有些資料非常值得一提。下面這些是我們點贊量最多的答案,有的讓我們會心一笑,有的有理有據值得深思:
- 再怎麼測試也不會發生崩潰。
- 不要建立那些並不需要的玩意兒。
- 任何人都需要寫點註釋。好不好以後自然會知道。
- 你看到它,它才有意義。
- 你需要了解業務目的。
- 你需要做的不僅僅是寫程式碼。
- 不需要太過於特立獨行。
- 差的程式碼也能做很多事情,但就是通通做不好。
開發人員重視程式碼的可讀性和可理解性並不奇怪。但是令人有一點點驚訝的是,其餘的回答卻差不多至少有50%的差異!
以下這四條就屬於讓人驚訝的後者:
- 可維護:因為我們大多數人都有過維護別人程式碼的經歷(或者一段時間以後維護自己的程式碼),並且很有可能度過了一段非常悲慘的日子。所以,我們期待更多的開發人員能夠編寫出可維護的程式碼。可能有的人假設程式碼可讀,那麼一定易於維護,所以就忽略了這一條。
- 可工作:編寫程式碼的目的,就是能夠為他人提供價值。編寫可工作的程式碼,是我們的首要任務之一。所以我們很驚訝為什麼並不是每一個開發人員的答案中都囊括這一條。
- 可測試/已測試過的:測試的重要性在這裡我就不多說了,相信大家已經聽到過不知道幾百遍了。
- 高效:話說,答案中包含“高效”的開發人員比強調“不可過早優化”的開發人員,要多兩倍,而眾所周知,“過早的優化是萬惡之源”,所以,這太讓人納悶了。
最後,我們總結出好程式碼的定義:
“好的程式碼是可讀的,可理解的,覆蓋了自動化測試的,不過於複雜,並且能辦好我們需要它做的事情。”
聽起來就相當美,right?
譯文連結:http://www.codeceo.com/article/what-is-good-code.html
英文原文:What is good code? A scientific definition.
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 好程式碼的定義
- 程式的定義
- 定義採購價值程式碼
- 谷歌工具檢視CSS程式碼定義的位置谷歌CSS
- 好程式設計師Java教程系列之異常定義程式設計師Java
- 關於資料科學的十本好書資料科學
- rubymine設定自定義快捷程式碼片段
- 為什麼糟糕的科學程式碼戰勝了遵循“最佳實踐”的程式碼
- 電腦科學家釋出不會被黑的加密程式碼加密
- Jbpm3.2 釋出定義好的流程檔案
- 好程式設計師Python培訓分享函式的定義與使用示例程式設計師Python函式
- 資料科學即將迎來“無程式碼”時代資料科學
- SAP FICO全解析之-定義國家程式碼
- 如何提高程式碼複用性,定義骨架?
- Avro RPC 之 Protocol 定義和程式碼生成VRRPCProtocol
- 重學java之類的定義Java
- 開放原始碼的定義 (轉)原始碼
- 如何科學設定生產節拍?
- 什麼樣的程式碼才算是好程式碼
- 好程式碼、壞程式碼之二
- 好的程式碼習慣 todo
- 何謂“好的程式碼”? (轉)
- 碼農深耕 - 什麼樣的程式碼才是好程式碼?
- [譯] 如何在資料科學中寫出生產級別的程式碼?資料科學
- 資料科學領域的幾個無程式碼分析工具介紹資料科學
- 科學計數法字串轉為對應的十進位制程式-C程式碼字串C程式
- jQuery原始碼分析之jQuery的定義jQuery原始碼
- jQuery原始碼分析之=>jQuery的定義jQuery原始碼
- 什麼樣的程式碼稱得上是好程式碼?
- 程式碼的印象派:寫點好程式碼吧
- 中國的中文程式設計是偽科學?程式設計
- 人人都能學會的python程式設計教程11:定義函式Python程式設計函式
- 如何寫好程式碼?
- 如何寫好程式碼
- 好程式碼不值錢
- mybatis實現變數定義,實現sql業務程式碼MyBatis變數SQL
- (資料科學學習手札92)利用query()與eval()優化pandas程式碼資料科學優化
- 碼農 駭客 程式設計師 開發者和電腦科學家的區別程式設計師