我是個讀書少且慢的人。別說序和跋不可略過,就連封面和扉頁都不愿錯過。體會封面設(shè)計的美感和扉頁的插畫或是與書有關(guān)的小故事,也算是我讀書的一部分。內(nèi)心總覺得怕遺失什么美好的東西。
我做程序員已經(jīng)8年了。從寫一些小模塊就高興無比的小書童,到現(xiàn)在總覺得代碼不夠好,內(nèi)心對寫好代碼這件事總算有一些感受了。但對什么是好代碼,怎么寫出好代碼卻沒有什么堅實的理論說辭。隱隱記得有一本《代碼之美》,當(dāng)在z.cn搜索時,并沒有這本書。是我記錯了,只有一本《數(shù)學(xué)之美》。在比較了幾本講代碼優(yōu)化的書之后,我選擇了這本《Clean Code》,中文叫做《代碼整潔之道》。
晚上花了點時間讀了序和前言。還是有些收獲的!
序中,Martin爺用印在樂嚼糖果上的諺語“小處誠實非小事”和建筑師之語“神在細(xì)節(jié)之中”,講出了自己對整潔代碼的價值觀和 整潔代碼與架構(gòu)在軟件開發(fā)中地位的不休爭論。Martin爺把整潔代碼和架構(gòu)的價值比喻為矛與盾?!凹軜?gòu)”一詞來自建筑業(yè)。等同于建筑師交付毛坯房,軟件則是交付初始軟件產(chǎn)品。而在現(xiàn)在的市場環(huán)境中,我們關(guān)注如何快速將產(chǎn)品推向市場。為此我們要求工廠全速運轉(zhuǎn)、生產(chǎn)軟件。沒錯,就是人類工廠、程序猿工廠。軟件行業(yè)興起于最近40年,相比于其他工業(yè),是新興事物。無可避免地收到當(dāng)時頂尖行業(yè)工程化思想的影響——汽車工業(yè)。在汽車工業(yè)的經(jīng)驗表明,大量工作并不在于生產(chǎn)而在于維護——或避免維護。仔細(xì)想想我們更多的工作也集中在名為“維護”的事情上!1951年,在日本出現(xiàn)了名為“全員生產(chǎn)維護”(TPM)的質(zhì)量保證方法。它關(guān)注維護甚于關(guān)注生產(chǎn)。主要支柱之一就是5S原則:
- 整理(sort) 搞清楚事物之所在——通過恰當(dāng)?shù)拿惖姆椒ā陵P(guān)重要。
- 整頓(systematize) 每段代碼都該在你希望它所在的地方——如果不在那里,就需要重構(gòu)了。
- 清楚(shine) 清理工作地的拉線、油污和邊角廢料。對于那種四處遺失的帶注釋的代碼和放映過往或期望的無注釋的代碼——除之而后快!
- 清潔(標(biāo)準(zhǔn)化) 有關(guān)如何保持工作地清潔的共識。在代碼層面就是代碼規(guī)范??!
- 身美(自律) 在實踐中貫徹一切規(guī)范,并時時體現(xiàn)于個人工作之中,而且樂于改進(jìn)。
以上5S原則的精髓可以概括為臻于至善,Martin爺稱作精益。理解起來并不難,難在做!竊以為,難點在于后三條。關(guān)于清楚,簡單操作時,可以觀察程序猿的桌面(工作臺面和電腦桌面),進(jìn)一步觀察他的文件夾??和事務(wù)安排習(xí)慣。關(guān)于清潔,就是關(guān)注他對規(guī)范的態(tài)度和執(zhí)行情況;必要時可以動用領(lǐng)導(dǎo)權(quán)力要求執(zhí)行(最次方法)。關(guān)于身美,身美是日本人的說法,我們叫自律。這個也可以從對他們的觀察中發(fā)現(xiàn)一些。難處在哪兒呢?想想看,我們也是軟件工程中的一員,這三點你如何做到呢?所以Martin爺鄙視我們了:“如果你接受挑戰(zhàn)——沒錯,就是挑戰(zhàn),閱讀并應(yīng)用本書,你就會理解和贊賞上述最后一條?!?:)
前言中也有兩條實用信息。
首先,我們總是寫下“感覺良好”的代碼。就像我們懂得了重力、摩擦力、角動量和質(zhì)心等物理學(xué)知識但不代表學(xué)會了自行車。這個比喻如此簡單明了,讓我關(guān)于自己那點代碼小心得不敢向外人提起。學(xué)寫整潔代碼很難,它可不止于要求你掌握原則和模式,你得在這上面花功夫。你需自行實踐,且體驗自己的失敗。你需觀察他人的實踐與失敗。
其次,關(guān)于閱讀本書的方法。本書分成三大部分。前幾章介紹編寫整潔代碼的原則、模式和實踐。這部分有相當(dāng)多的示例代碼,讀起來頗具挑戰(zhàn)。不可跳過這部分直接閱讀第2部分。第2部分最需要花功夫,這部分是幾個復(fù)雜性不斷增加的案例研究。需要我們慢慢閱讀,不斷站在作者的角度思考為什么這么寫。簡言之,需要琢磨!前兩部分的付出在第3部分得到回報——列出從前面案例中得到的啟示和靈感。
總之,這并不是一本飛機書或者高鐵書。需要我慢慢實踐與感悟。