當前位置:
首頁 > 科技 > 為什麼高級程序員總寫傻瓜代碼以及怎麼在一里外識別一個菜雞程序員

為什麼高級程序員總寫傻瓜代碼以及怎麼在一里外識別一個菜雞程序員

作者 | Scott Shipp

譯者 | 核子可樂

當我還是菜雞程序員時,我看到資深程序員們寫的代碼會覺得:「這也太傻了吧,毫無特點。」當我工作經驗漸長後,才發現自己還是太年輕,naive。

Brian Goetz 是 Java 領域的技術大牛,同時也是《Java 並發實踐》一書的作者之一。我最喜歡的一句名言就是他講的。這句話出現在甲骨文公司以《編寫傻瓜式代碼》為題發表的訪談當中,當時記者問到 Goetz 如何才能編寫出性能良好的代碼。以下是他給出的睿智回應:

一般來說,在 Java 應用程序當中快速編寫代碼的方法,就是先寫點傻瓜式代碼——這類代碼簡單、乾淨,而且遵循最明確的面向對象原則。

在接下來的發言中,他一直在具體解釋:為什麼嘗試優化代碼並試圖讓代碼看起來不那麼傻瓜,正是程序員群體中的一種常見錯誤。而在我看來,這更多是一種新手程序員常犯的錯誤。

高級開發者的代碼

如果大家像我一樣,也經歷過初窺門徑的過程,那麼各位應該還記得自己第一次看到高級開發者寫出的代碼時,心裡想的是:

「這玩意兒我也寫得出來,為什麼我就不是高級開發者呢?」

此後,我花了不少時間想寫出相類似的代碼,最後發現我根本就做不到。

關於「高級開發者」的疑問,並不在於我無法理解代碼當中的特徵。相反,我一眼就能明白他們寫的代碼在說些什麼,因為這些代碼從根本層面上就是在走傻瓜式路線,誰還看不懂啊。但除此之外,似乎還有更多不同。我記得當時我在想,「這「更多的」究竟是什麼?又是怎麼做到的?」

從那時起,我逐漸學會了編寫傻瓜式代碼的所有原則與質量保證方法,包括:YAGNI 原則 (You Ain』t Gonna Need It);單一責任原則;DRY 原則(Don"t Repeat Yourself);單一級別抽象原則;低耦合等等。我自己,也慢慢成了「高級開發者」。(我其實很討厭「高級開發者」這種說法,因此我始終堅持稱自己為「軟體工程師」,但這又是另一個故事了。)

我學到的最重要的經驗就是:

編寫傻瓜式代碼實際上非常困難,但一旦實現則會帶來遠超預期的回報。

如何從一里外認出菜雞程序員

在《重構:改進現有代碼設計》當中,Kent Beck 指出:

任何傻瓜都能夠編寫出計算機可以理解的代碼,但只有優秀的程序員能夠編寫出人類可以理解的代碼。

如果大家遇到精妙無比的單一代碼行,以及模糊的抽象及 / 或語言特徵時,其背後幾乎總會有一位初級開發者。說實話,後一種情況尤其常見。看到這些代碼,我彷彿就看到這位程序員在強調:

「快來看我!我真的很懂這門編程語言!我在使用默認介面同步本地線程 JavaBean 複製構造函數,並配合自定義通用未檢查異常以及跨函數安全強化 JAXB Lombok 代碼生成!看我厲不厲害!」

以上場景純屬胡說八道,但相信大家能夠明白我的意思。這類代碼往往來自那些只關注計算機理解,而不重視人類理解的程序員。

代碼的本質,在於向其他人交流並向計算機發出指令;但相較於後者,目前代碼的前一項作用顯得尤其重要,因為有編譯器負責將程序員編寫的內容翻譯成機器語言。一般來講,這種轉換會分多層實現,例如在將 Java 編譯為 ByteCode 時,Java 代碼首先由 Java 虛擬機在運行中讀取,並最終將內容翻譯為 0 和 1 的形式。

不過代碼代表的仍然是人類的語言,除了指導計算機之外,必須也能夠表達任務當中的誰、什麼、何時、哪裡、如何以及為什麼等問題。再舉個例子,即使你的公司被收購了五年多,這些代碼也仍然得具有實際意義,並確保之前從未見過這些代碼的新團隊能夠快速打開並進行功能增強 / 錯誤修復。

是的,編寫傻瓜式代碼非常困難。隨著時間的推移,我覺得我越來越喜歡這種編程風格了。當我在代碼評論中收到「這代碼真乾淨!」之類的評語時,我真的感到非常欣慰。我知道我能為整個團隊、乃至未來的代碼維護者們做的最好的事情,就是編寫傻瓜式代碼。

需知:

道路千萬條,維護第一條。代碼不規範,運維兩行淚。

作為結尾,我再列出 Dave Carhart 的一些觀點,只為博君一笑:

你寫的代碼是傻瓜式的嗎?

直播預告

5 月 13 日(周一)晚 20:00,阿里最接地氣的前端技術大神,與你相約極客 Live,我們不見不散!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

Jakarta EE 8,我們還要等多久?
2019最受歡迎的資料庫是?

TAG:InfoQ |