[爆卦]clean code心得是什麼?優點缺點精華區懶人包

為什麼這篇clean code心得鄉民發文收入到精華區:因為在clean code心得這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者gnimnek168 (Gnimnek168)看板Soft_Job標題Re: [請益] 關於cl...


參考個人在約五年前所寫過對「無瑕的程式碼:敏捷軟體開發技巧守則 (中譯本)」一書的書評。
http://www.kenming.idv.tw/bk_clean-code_handbook_software_craftsmanship/

簡而言之,Clean Code 主要必須把持實踐的原則:

1. 對類別、方法、參數、變數賦予有意義的命名。
2. 對程式碼結構持續抱著重構的態度 (重構前一定要撰寫單元測試程式把關):
a). 每一個方法內的陳述控制在 30 行以內 (已是最大極致)。
b). 每一個方法傳遞的參數不得超過5個以內 (參數的資料結構設計議題)。

另,由於原 po 從事 ASP.NET 的開發,這是落在 展示層 (Presentation tier)內的 Web UI 端開發。要切記不要在如 Web Page (View)與 UI Controller 撰寫應用程式邏輯。
關於此點,可以參考個人最近所撰寫的一篇:實作 Enterprise MVC 巨觀結構的 POC-觀念篇
http://www.kenming.idv.tw/implement_enterprise-mvc_macro-view_poc_concept/

要能達成所謂 Clean Code 簡潔的效果,所需要軟體相關的技能,諸如所謂的物件導向觀念、GoF 設計模式的理解與活用、巨觀與微觀結構的設計等,這些是需要在軟體結構面設計的議題持續不斷地學習與體會箇中奧妙了。

======= 書評內容 =======

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 就是:
「簡潔有序,層次分明的程式碼。」


※ 引述《geroge0820 (可.....可惡)》之銘言:
: 小弟工作資歷尚淺 前一陣子才轉職
: 目前是用ASP.NET MVC進行網頁開發
: 因為自己還蠻菜的 想加強能力
: 不知道大家都怎麼選clean code的書
: 目前在網路上看到 clean code又是C#實作的是這一本
: 無瑕的程式碼 敏捷完整篇:物件導向原則、設計模式與C#實踐
: 想請問版上的各位 有沒有甚麼建議

--
FB社團:軟體設計鮮思維
https://www.facebook.com/groups/softthinking/

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.122.227
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1529470903.A.F8F.html
final01: 之前看覺得這本中譯的真爛 06/20 13:37
djdjdjek: 心目中翻譯最爛的是C++的多執行緒.... 06/20 14:09
dsilver: 這篇心得寫的真好! 06/20 14:56
johnny94: 心目中翻譯最爛的是作業系統恐龍本 06/20 15:19
cphe: 恐龍本英文寫得非常簡單,建議看英文版就好~淺顯易懂 06/20 15:31
cphe: 中譯本大多品質都不好,偏偏原文書都很貴 06/20 15:32
testPtt: 我的constructor就常超過30行了耶 Q.Q 06/20 18:58
testPtt: 而且我又常常要用不定長參數方法 06/20 19:00
csieflyman: 行數我都憑感覺沒在算幾行的 寫完覺得太長不好懂 或是 06/20 19:09
csieflyman: 覺得某區塊可以重用 自然就會再拆出來 public 方法通 06/20 19:09
csieflyman: 常會寫很短 private 實作細節會比較長 反正寫完之後也 06/20 19:09
csieflyman: 很少會再去看它 06/20 19:09
geroge0820: 糟了 我的wtf一定很高 06/20 23:44
vn509942: 沒在限制行數0.0 06/21 08:10
pennymarkfox: 還好我是買kindle版本... 06/21 14:27
senjor: 話說kindle原文好貴,翻譯好便宜 Q_Q 06/21 16:10
sharku: 推 06/21 22:51
sunsamy: 是不是clean code跟行數、參數個數一點關係也沒有 06/22 23:01
sunsamy: 程式這領域越來越多過猶不及的方法了 06/22 23:02

你可能也想看看

搜尋相關網站