更多優(yōu)質(zhì)內(nèi)容請關(guān)注微信公眾號“AI 前線”(ID:ai-front) Brian Goetz 是 Java 領(lǐng)域的技術(shù)大牛,同時也是《Java 并發(fā)實踐》一書的作者之一。我最喜歡的一句名言就是他講的。這句話出現(xiàn)在甲骨文公司以《編寫傻瓜式代碼》為題發(fā)表的訪談當中,當時記者問到 Goetz 如何才能編寫出性能良好的代碼。以下是他給出的睿智回應:
在接下來的發(fā)言中,他一直在具體解釋:為什么嘗試優(yōu)化代碼并試圖讓代碼看起來不那么傻瓜,正是程序員群體中的一種常見錯誤。而在我看來,這更多是一種新手程序員常犯的錯誤。 如果大家像我一樣,也經(jīng)歷過初窺門徑的過程,那么各位應該還記得自己第一次看到高級開發(fā)者寫出的代碼時,心里想的是:
此后,我花了不少時間想寫出相類似的代碼,最后發(fā)現(xiàn)我根本就做不到。 關(guān)于“高級開發(fā)者”的疑問,并不在于我無法理解代碼當中的特征。相反,我一眼就能明白他們寫的代碼在說些什么,因為這些代碼從根本層面上就是在走傻瓜式路線,誰還看不懂啊。但除此之外,似乎還有更多不同。我記得當時我在想,“這「更多的」究竟是什么?又是怎么做到的?” 從那時起,我逐漸學會了編寫傻瓜式代碼的所有原則與質(zhì)量保證方法,包括:YAGNI 原則 (You Ain’t Gonna Need It);單一責任原則;DRY 原則(Don't Repeat Yourself);單一級別抽象原則;低耦合等等。我自己,也慢慢成了“高級開發(fā)者”。(我其實很討厭「高級開發(fā)者」這種說法,因此我始終堅持稱自己為「軟件工程師」,但這又是另一個故事了。) 我學到的最重要的經(jīng)驗就是:
在《重構(gòu):改進現(xiàn)有代碼設計》當中,Kent Beck 指出:
如果大家遇到精妙無比的單一代碼行,以及模糊的抽象及 / 或語言特征時,其背后幾乎總會有一位初級開發(fā)者。說實話,后一種情況尤其常見??吹竭@些代碼,我仿佛就看到這位程序員在強調(diào):
以上場景純屬胡說八道,但相信大家能夠明白我的意思。這類代碼往往來自那些只關(guān)注計算機理解,而不重視人類理解的程序員。 代碼的本質(zhì),在于向其他人交流并向計算機發(fā)出指令;但相較于后者,目前代碼的前一項作用顯得尤其重要,因為有編譯器負責將程序員編寫的內(nèi)容翻譯成機器語言。一般來講,這種轉(zhuǎn)換會分多層實現(xiàn),例如在將 Java 編譯為 ByteCode 時,Java 代碼首先由 Java 虛擬機在運行中讀取,并最終將內(nèi)容翻譯為 0 和 1 的形式。 不過代碼代表的仍然是人類的語言,除了指導計算機之外,必須也能夠表達任務當中的誰、什么、何時、哪里、如何以及為什么等問題。再舉個例子,即使你的公司被收購了五年多,這些代碼也仍然得具有實際意義,并確保之前從未見過這些代碼的新團隊能夠快速打開并進行功能增強 / 錯誤修復。 是的,編寫傻瓜式代碼非常困難。隨著時間的推移,我覺得我越來越喜歡這種編程風格了。當我在代碼評論中收到“這代碼真干凈!”之類的評語時,我真的感到非常欣慰。我知道我能為整個團隊、乃至未來的代碼維護者們做的最好的事情,就是編寫傻瓜式代碼。 需知:
作為結(jié)尾,我再列出 Dave Carhart 的一些觀點,只為博君一笑: 你也「在看」嗎??? |
|