重構是每個程序員的洗髓經
相傳達摩祖師面壁九年,功成坐化,少林僧眾于其面壁之處獲鐵函一只,內有兩部不世絕學:《易筋經》和《洗髓經》,易筋功法強筋健骨,洗髓心法采納調息,故少林冠絕武林,為江湖稱頌。
自軟件江湖降世,功法、心法及門派層出不窮,各大公司年年招兵買馬,意在爭奪江湖頭把交椅。然每每武林大會之季,仍有不少公司感慨人馬多而不強,魚龍混雜,江湖地位力有未逮。原因何在?究其根本乃是軟件江湖快速膨脹,功法(編程語言,設計模式等)之類見效快,故而為世人推崇,而內功心法(思想,方法,習慣)非一年之功乃是經年累月之效因而鮮有問津。更有不少江湖騙子偽裝得道大師,隨意杜撰心法,更是造成不少初涉軟件開發之人,走火入魔,飲恨江湖,從而導致世人對內功心法更加敬而遠之。
世間繁雜在一定程度上掩蓋了武林至尊絕學《洗髓經》的光彩,口口相傳更是加深其神秘感,但這都改變不了其真正價值–洗髓是脫胎換骨,由內而外地強化自身功力,更是打通任督二脈,實現向真正的高手大師過渡。
軟件開發也有一部內功絕學–《重構》,它來自一位長相酷似達摩祖師的軟件大師,Martin Fowler,關于這位大師的傳奇經歷此處不表,本文所要說的是他創立的軟件開發內功心法–重構。
正如前文所說軟件開發的內功心法其實講的是軟件開發者使用的方法,習慣和思想,與武功中的內功一樣,長期的修煉能夠讓修煉者參悟到軟件開發的不同境界。說到這里,有人會說真有這么神奇嗎?回答是肯定,因為這樣的修煉改變的是開發者的習慣,包括思考的習慣、設計的習慣和開發的習慣。這正是江湖流傳的不二箴言:習慣決定成敗。
重構改變了開發者的什么習慣?首先來看下重構是什么,重構是指不改變軟件功能的前提下,通過代碼調整來改善代碼質量,提高代碼的可維護性,使代碼的架構更加趨于合理。一言以概之–改代碼,有人會提出疑問,改代碼我們也會啊,這有什么習慣可以改變的,重構并不是改一次代碼,而是在開發的過程中頻繁地進行代碼調整,只要在開發中發現可以重構的點,就可以記錄下來,然后進行重構,不只對現在正在開發,也可以是對之前完成的代碼,這不是件容易的事,需要付出恒心和毅力。
可能有人擔心重構會破壞代碼原先的功能,OK,那就引入 TDD 和版本控制,TDD 保證重構不破壞原有功能,而版本控制則保證出現了破壞原有功能的錯誤后能迅速回到原先正確的狀態。
重構 +TDD+ 版本控制,開發者一下就擁有了三件法寶來改善代碼質量。恭喜你,你現在變成 XP (極限編程)了,你的開發習慣一下就從瀑布遷移到了敏捷上,再加上經年累月的磨礪,OK,你自然而然地成了高質量代碼的貢獻者,是不是想想有點小激動呢?
內功心法大多分為若干層次,重構也是一樣,分為幾重境界。第一層是通達,即閱讀性重構,如同打通全身經脈,消除代碼中詞不達意,表意不明,做到 “信、達、雅”;第二層是凝煉,即結構性重構,如同氣沉丹田,消彌雜念,剔除代碼中的重復,提取職責單一的功能塊,實現代碼重用和邏輯清晰;第三層是突破,即設計性重構,如同打通任督二脈,重鑄體內氣血循環,在這一層次,經過前面的兩層修煉,代碼結構趨于合理,邏輯趨于清晰,此時可以考慮引入模式,完成質的跨越。
完成三重修煉,經歷若干次周天循環,開發者的思考習慣就發生了變化,首先思考如何實例化需求,因為開發者通過修煉了解何種需求是有價值的;接下來就是如何在實現的過程思考合理的引入模式,因為開發者明白何種模式能夠更適合,區分哪些是壞味道;并自然地寫下清晰通順的代碼,因為那是每次重構時的條件反射,只是簡單地表達出來。
在經歷了重構帶來的開發習慣和思考習慣的變化之后,那么在設計過程中就會將這些習慣融入其中,化為無形,設計出功能合理的軟件產品。
習慣的改變使得開發者可以站在一個全新的角度看問題,正如練就洗髓經的武林高手能夠無招勝有招,花對手萬般招數于無形,因為他們看到了最核心價值的東西。
最后引用豆瓣上看到的一篇奇文中的一段來說明練好重構這門內功的重要性,因為它能讓你成為真正讀懂軟件開發,學會軟件開發,運用軟件開發的高手:鳩摩智上少林寺挑釁,使遍七十二絕技,方丈群僧無不駭然。這時,小和尚虛竹跑過來,只瞅了一眼,就說:“這位大師用的明明是小無相功嘛。”鳩摩智慌了。一般人看到的是招數(各種花式的語法,模式),厲害的人看到的是內功(開發的思想,設計的思想)。
筆者仍屬于只見樹木不見林的開發凡人,因此謹以此文激勵自己向高手的路上前進。
</blockquote> 來自: insights.thoughtworkers.org本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!