“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
—M. Fowler (1999)
這是一本和《設(shè)計模式》比肩的書,跟《設(shè)計模式》一樣憎夷,這本書總結(jié)了編程的最佳實踐走贪,盡管沒有《設(shè)計模式》那么有技術(shù)含量诵盼,可是對程序員的影響卻是實實在在镇草,尤其是對初級程序員砌创,它提供了好代碼和壞代碼的鑒別方法摆尝,而能鑒別好壞是提升編碼能力的基本要求亭病。在提升框架設(shè)計前笆环,先把代碼寫好了。
這本書初版于1999年厚者,歷經(jīng)二十年躁劣,重構(gòu)的思想歷久彌新,尤其是重構(gòu)與測試的正反饋库菲,就算是重構(gòu)手法和細節(jié)大多也沒過時账忘,這個在恨不得每年出一個版的IT圖書中是很少見的。最近作者Martin Fowler用2年的時間修訂了第二版熙宇,在11月30號剛剛出版鳖擒,這個版本的一個大變化是,范例的語言從Java切換成了JavaScript烫止,意味深長啊蒋荚。正好我一直沒學(xué)會JavaScript,多了一個接觸JS的機會馆蠕,不過中文版和英文版的引進估計要等一年后了期升。
言歸正傳
第一章,Martin從一個只有三個類荆几,幾十行代碼的小Demo開始吓妆,一步步講解重構(gòu)的手法和基本概念,讓沒有接觸過重構(gòu)的人對重構(gòu)有最直觀的印象吨铸。 我為了分享,把這個Demo寫了兩遍祖秒,對重構(gòu)的理解和原本只看書就會不同诞吱。正如他說的,重構(gòu)更重要的在于“節(jié)奏”的把握竭缝。這種手感通過刻意練習(xí)才能習(xí)得房维。
第二章就開始涉及到一點點理論,重構(gòu)的原理抬纸,告訴我們什么是重構(gòu)咙俩,為什么要重構(gòu),什么時候開始重構(gòu)湿故,甚至還貼心地出謀劃策如何向經(jīng)理解釋重構(gòu)的必要性阿趁。 重構(gòu)會遇到的什么問題?重構(gòu)與設(shè)計和性能有什么關(guān)系坛猪?這些內(nèi)容包含作者真知灼見脖阵,千萬重視。
第三章墅茉,代碼的壞味道命黔,教會我們識別什么樣的代碼是壞味道的代碼呜呐,需要重構(gòu),這其實是通過大量的訓(xùn)練培養(yǎng)判斷代碼好壞的直接悍募,講得有點雜且啰嗦蘑辑。
第四章,強調(diào)了測試和重構(gòu)的關(guān)系坠宴。測試在開發(fā)者里是一件被普遍忽略的事情洋魂,我想做好幾次,也沒搞起來啄踊。但是我接受了Martin和他們一群大師的觀點忧设,留待后敘。
第五章簡單地介紹一些颠通,書中重構(gòu)的組織方式址晕,重構(gòu)列表長什么樣的。
從第六章到第十一章顿锰,介紹了六種類型的重構(gòu)谨垃,包括組織函數(shù)、對象之間搬移功能硼控、組織數(shù)據(jù)刘陶、簡化表達式、簡化函數(shù)調(diào)用牢撼,處理泛化關(guān)系匙隔,這些重構(gòu)都不難,卻大多很有用熏版,可以立刻應(yīng)用在工程中纷责。
后面三章,大型重構(gòu)撼短,重構(gòu)再膳、復(fù)用與現(xiàn)實,重構(gòu)工具曲横,我這次重讀就跳過了喂柒,也許隨著重構(gòu)的接受和工具的改進,作者覺得不重要禾嫉,在第二版中移除了灾杰。
重構(gòu)和設(shè)計模式之間有天生的聯(lián)系,我覺得重構(gòu)是掌握設(shè)計模式的必經(jīng)之路夭织。這點在《Refactoring to Patterns》有更多的講解吭露,這是重構(gòu)系列的第二本重要的書。預(yù)知后事如何尊惰,且待下回分解讲竿。
周二下午泥兰,我在小組里分享了《重構(gòu)》這個話題。有個一直以來被驗證的心得:“知識只有被分享出去题禀,才能留得下來鞋诗。”
對于一個工作即將十二年的老程序員來說迈嘹,分享這個話題顯然是晚了削彬,現(xiàn)在不做,難道再等下一個甲子嗎秀仲?
“種一棵樹最好的時機是十年前融痛,其次是現(xiàn)在∩窠”
我預(yù)計我的程序員的職業(yè)生涯還很長雁刷,搞不好再搞“幾輩子”,所以保礼,盡管代價很高沛励,把過去沒做好的事情,重新做一遍是值得的炮障。