無瑕的程式碼:敏捷軟體開發技巧守則 無瑕的程式碼:敏捷軟體開發技巧守則 (中譯本)
Clean Code: A Handbook of Agile Software Craftsmanship
-----------------------------------
作者:Robert C.Martin
譯者:戴于晉、博碩文化
出版社:博碩
ISBN:9789862017050
Amazon 評鑑:四顆半星

內容簡介
本書的原文書名為《Clean Code: A Handbook of Agile Software Craftsmanship》,根據作者的說法,《無瑕的程式碼》為Jolt得獎著作《敏捷軟體開發:原則、樣式及實務》的前傳。

在台灣另一本銷售極佳的書籍《重構─改善既有程式的設計》,根據亞馬遜Amazon網站的統計,購買該書原文版《Refactoring: Improving the Design of Existing Code》,又同時購買的其他書籍第一名,正是《Clean Code: A Handbook of Agile Software Craftsmanship》這一本書。

.第一章
作者開宗明義說明什麼是 Clean Code,他詢問了包含C++發明人 Bjarne Stroustrup、Eclipse 策略教父 Dave Thomas、極限程式設計大師 Ron Jeffries、維基與極限程式設計發明人,Ward Cunningham 等等的大師,從他們的眼光來描述什麼是 Clean Code,最後才說到作者本人認為的 Clean Code 應該長成什麼樣子,有什麼好處,以及學習撰寫Clean Code的基本原則。

最早知道這本書大約是前年 Ringle 已購買的原版書籍,並發現他常在課堂教授的空檔就津津有味地細讀該書,我想會吸引他如此認真閱讀絕對非同小可。不過當時我拿來略翻一下,有太多生活化的白話字彙 (如同極致軟體系列,但卻又更厚上太多),要翻查這些生字太吃力了些,故而放棄閱讀原文。沒想到國內出版社今年有相中該書,將之翻成中譯本,而且許多專業字彙還保留了原文的對應 (我很習慣軟體的原文字彙),讓我得以在兩個星期內就看完本書,而且到第10章以前 (約一半),可是逐字細讀。第10章以後,總感覺有些雜燴,有些是其他作者的論文,有些是原作者早期的文章,有許多主題已經是偏向程式開發領域的技術性議題,用來解釋「Clean Code」,我是覺得反而沒必要細讀,大略知道本意即可。

當時 Ringle 告訴我 Clean Code 的原則就是:每一個函式 (function, or method),不超過10行,最好是5行以內。天啊,這讓我很難以想像,我知道函式不能肥大,也不要有一堆的 if-then-else or switch 之類的判斷式,但如何縮短為只有10行以內的寫作,我也很難理解。不過細讀本書內容之後,總算能瞭解要如何作,當然,你更應該體會為何要這麼作。

簡而言之,程式寫作是一門「craftsmanship」,我還蠻喜歡中譯本將之翻為「工藝典範」。它既要精確,卻也期望將程式寫作昇華為具有美感的作品。我覺得,稍具有良心與審美觀的程式設計師,絕對不是只有滿足於「可以執行程式」。寫出來程式往往只是起點而已,持續不斷地精煉 (也就是重構),讓程式整潔,軟體才有可能具彈性與維護性。往往程式設計師只滿足於讓程式「順利運作」的狀態,有經驗豐富 (還有良心)的程式設計師,知道那其實是一種專業上的自殺行為。

所以,事實上,寫程式就如同寫散文一般,程式寫得艱澀冗長讓人無法理解,就代表散文寫作能力不佳。程式設計大師不認為他們在寫程式,而是在說故事。大師利用所選定的程式語言機制,來幫助建造更豐富更具表達力的語言,讓這個語言可以用來說故事。而簡短的函式,有意義的命名,以及漂亮的結構,則都有助於描述故事。


當然,要能寫好整潔的程式不是一蹴可幾的,那可是長期性的一種目標與方向。最重要的應該是意願與職志,然後再來才是學習與鍛鍊應有的觀念與技巧。所以這也是為什麼與其說程式設計是門科學,不如說程式設計是一門技藝更為貼切。為了要寫整潔的程式碼,你必須先寫下糟糕的程式,然後去整理它! 對於程式碼,就是要義無反顧的重構它,讓品質可以改善再提昇至另一個層次。程式如果看待只是一種製造,那麼當重做時就代表著額外的花費;但當看待為設計,則重做代表的就是創造出價值

喔,從本書我還學到了唯一最有效度量「程式品質」的單位-WTF (請自行查 Google)。當 WTF 值越高,程式品質越差,沒有任何例外!

專案管理人員應該要重視這個指標的,絕對沒有其它指標比它更實用有效的。>_< 所以,到底甚麼是 Clean Code? 為了這個詞彙,作者 Martin 還特別訪問了諸多軟體大師,請他們寫下對 Clean Code 的定義。我比較喜歡 Grady Booch (UML 三巨頭之一) 的解釋: 「Clean Code 是簡單又直接明瞭的,讀來就像一篇優美的散文。Clean Code 絕不會掩蓋設計者的意圖,反而充滿著俐落的抽象概念,以及直接了當的程式控制敘述。」 其實每一個人應該也會有對 Clean Code 自己的一番解釋。對我而言,Clean Code 就是: 「簡潔有序,層次分明的程式碼。」