[翻譯] 為何資深開發者寫的程式看起來不怎樣,又如何從千里之外認出菜鳥

CQD
4 min readMay 31, 2018

--

任何白痴都能寫出電腦看得懂的程式。好的程式設計師則會寫出人類看得懂的程式。

(本文譯自 Why Senior Devs Write Dumb Code and How to Spot a Junior From A Mile Away

Brian Goetz 是個聰明厲害的 Java 人,做過不少厲害的事情,也是 Java Concurrency in Practice 的作者之一。Oracle 發佈過一篇關於他的訪談,標題是「Write Dumb Code」。Goetz 被問到怎麼寫出高效率的程式碼,他的回答我非常喜歡:

一般來說,希望想寫出來的 Java 應用速度快,你得寫一些看起來不怎麼樣的程式碼 —看起來直覺、乾淨、遵守最基本的物件導向原則。

剩下的一千字都是在解釋,為何最佳化程式碼或是讓程式碼看起來很聰明,是程式設計師很常犯的錯誤 — 或者你也可以說是菜鳥常犯的錯誤。

資深寫出的程式碼

如果你跟我一樣,曾經是個資淺的開發者,你可能還記得當年第一次看到資深的人寫出的程式的時候,很可能在想「這種東西我也寫得出來,為什麼我不是資深?」

可是我努力了很長一段時間,我做不到。

「資深開發者」的程式讓我覺得十分神秘。問題不在於我看不懂,而是我完全看得懂,看起來就很普通一般般,資深的程式明明應該要更厲害的才對。我還記得自己當時這麼想「就這樣?沒了?為什麼就這樣而已?」

後來,我學到了各種程式開發的原則,都是用來讓程式碼看起來一般般不怎樣:YAGNI、單一職責原則、DRY、單層抽象原則、低耦合…等等。而我自己現在也變成一個「資深開發者」(我其實很討厭「資深開發者」這個說法,我都只自稱為「軟體工程師」,不過這是另一件事情了)

我學到最重要的一課,是寫出看起來不怎樣的程式碼其實很難,而且這麼做的投資報酬率是指數成長的。

怎樣從千里之外認出菜鳥

重構:改善既有程式的設計 一書中,Kent Beck 是這麼說的:

任何白痴都能寫出電腦看得懂的程式。好的程式設計師則會寫出人類看得懂的程式。

如果你看到一段程式,裡面充滿著看起來很帥的短碼小聰明、神秘的抽象層、或是一狗票的語言特性,那你就知道寫這段程式是個菜鳥。我敢說最後一個最常出現,感覺就像是程式碼在喊著「看看我,寫我的人會用這個程式語言喔!我會用介面 synchronized thread-local JavaBean copy constructors,加上自訂的泛用 unchecked exception,還有跨功能安全強化過的 JAXB Lombok 程式碼產生器」

是,我是在講幹話。因為當某個人只考慮電腦方面的事情,而不考慮人的方面的事情的時候,他手上的程式碼本身就會變成一種幹話。

程式碼是用來跟其他人類溝通以及對電腦下指令,但在現在,跟人溝通的成分遠大於對電腦下指令的成分。編譯器會負責把程式設計師寫的東西翻譯成機器語言。很多時候個翻譯過程會分成好幾層,例如 Java 會先編譯成 ByteCode,然後 Java 虛擬機在執行的時候讀入這些 ByteCode,最後才被翻譯成 0 與 1。

然而程式碼本身是人類語言,除了用來對電腦下指令以外,它更應該要傳遞工作項目的 who、what、when、where、how、以及 why。如果五年後公司被其他團隊接收,原本沒看過這段程式的人要來撬開它修 bug 或是加新功能,程式碼應該要能被看得懂。

是的,寫出看起來不怎樣的程式碼很難。我覺得隨著時間流逝,我有越來越上手。當 code review 得到的回應是「好乾淨的 Code」,我感覺開心滿足。我知道我為我的團隊、或是這段程式未來的維護者、能做的最好的努力,就是寫出看起來不怎樣的程式

我想,把 Dave Carhart 的這段話拿來當作結尾應該滿有趣的:

--

--

CQD

熱愛巨大宇宙戰艦跟打扮成小貓咪的小女孩。一般認為 CQD 是一種自我矛盾的變態生物。