重構:最委屈的工程實踐

重構誤區

重構變成了業界最委屈的工程實踐之一,管理層不支持,而程序員吃力不討好。歸根結底,是對「重構」錯誤地理解,給管理層帶來不少負反饋。程序員

將事情作好,還得正確地作事。重構是一個系統工程,不只僅要求雄厚的軟件設計素養,同時須要正確的作事方法。express

大謬否則

談及「重構」,管理層談虎色變,錯誤地理解或實踐重構,必然得不償失,收效甚微。安全

  • 這個Bug,就是由於上次重構引入的;ide

  • 這個模塊再不重構,就完全完蛋了;性能

  • 系統性能太差,得重構一下;測試

  • 還沒壞就別動;this

  • ......idea

麻木不仁

優秀的程序員對軟件設計中存在的壞味道具備敏銳的嗅覺。我所經歷的團隊,不是由於進度的約束限制重構的工程實踐,而是因爲缺少壞味道的嗅覺,長期地麻木不仁。一日皮死麻木不仁,二日肉死針刺不痛,系統就這樣每況愈下,腐朽變質了。spa

孤芳自賞

有的程序員,自我感受良好,孤芳自賞;實際上,他們每每「不知道本身不知道」,並且這樣的程序員心胸都很狹窄,代碼猶如尊嚴同樣,毫不容忍侵犯。設計

直到有一天,知道本身知道了,才以爲那麼地無知和可憐。

高處不勝寒

他人笑我太瘋癲,我笑他人看不穿。若是兩我的沒有共同的上下文,沒有共同的背景,但硬是要談到一塊,兩我的都會很尷尬,很痛苦。

我喜歡優美的軟件系統,設計充滿着簡單的美感,每一個軟件的元素都是恰到好處,抽象而不至於複雜,直白而不流於形式。

華而不實

重構須要長期的「刻意訓練」,而且要求具備良好的軟件設計的素養。重構並非將一種壞味道重構爲另一個壞味道,或者變得更加脆弱,更加複雜。

重構只是手段,關鍵在於軟件設計的修爲。只有練就雄厚的內功,方能遊刃有餘。

主次不分

重構是一個系統工程,若是沒有目標,主次不分,很容易迷失自我,吃力不討好。由點到線,由線到面,各個擊破;關注優先級,優先解決最棘手,最重要的問題。

設計欠帳

重構應該成爲天天的麪包和黃油,而不是等到程序變成一個大泥球(Big Ball of Mud),才集中人力實施大規模的重構。

交付壓力成爲拒絕重構最大的藉口,重構並不難,關鍵在於良好的心態,及其鍥而不捨的工做態度。

至善至美

至善至美的系統是不存在,由於沒有一個統一的標準來衡量。因此,重構必定要有一把尺子,知道本身走了多少,有多大,還離目標有多遠。只有短迭代交付,經過正確的反饋渠道,才能贏得管理層的支持。

不然,重構每每變成了項目經理最討厭的工程實踐之一,由於他對重構帶來的收益,感受知之甚少。

重構的本質

「重構」本質是軟件設計的過程。這能夠從「重構」的定義,目的出發,結合「簡單設計」的基本原則,很容易地看出二者是一脈相承的,而且擁有共同的價值觀。

何謂重構

重構(名詞):對軟件內部結構的一種調整,目的是在不改變軟件可觀察行爲的前提下,提升其可理解性,下降其修改爲本。

重構(動詞):使用一系列重構手法,在不改變軟件可觀察行爲的前提下,調整其結構。

前提

重構是一種「保持行爲的等價轉換過程」,它是在不改變軟件可觀察行爲的前提條件下進行的軟件過程。

目的:使軟件更容易地被修改和理解

  • 改進軟件設計

  • 使軟件更容易理解

  • 使軟件沒有冗餘

重構與簡單設計

「簡單設計」的四個基本原則,而且重要程度依次減低:

  • 經過測試:Passes all the tests

  • 消除重複:Says everything OnceAndOnlyOnce

  • 揭示意圖:Expresses every idea that we need to express

  • 沒有冗餘:Has no superfluous parts

重構與簡單設計一脈相承,相互呼應。改進設計最重要的一個方向就是「消除重複」,肯定全部事物和行爲在代碼中只存在一份表述,這正是優秀設計的根本;重構讓代碼變得更加容易理解,並準確地表達做者所要的;重構使設計保持簡單,使用最少的元素表述軟件的行爲,避免沒必要要的複雜度。

重構原則

保持清潔

Try and leave this world a little better than you found it. - Robert Stephenson

「沒有壞就不修改」,技術債務與日俱增,最後窮途末路。相反地,應該遵循「童子軍規則」,老是保持提交時的代碼比簽出時更整潔。決不容忍代碼中的髒亂,毫不能倒退到壞習慣中去。

按部就班

對重構理解越深入,就越傾向於採用更小的,更安全的步驟。欲速則不達,步子不宜邁得太大,不然容易迷失自我,越挫越不勇,從而懼怕重構,拒絕重構,從而使得系統腐敗變質,陷入惡性循環。

關鍵還得靠人

招聘最優秀的人

重構須要高超的軟件設計的技藝,給他們沒法拒絕的收入,給他們自由,相信他們,他們必定不會讓你失望的。

給管理層正反饋

快速迭代,持續反饋,讓他們可以看到重構的價值,從而贏得管理層的支持。

尋找你的同盟者

找對合適的人,正確的人作正確的事;若是志不一樣道不合,是很難將事情作對作好。世界這麼大,總會碰到一羣追夢人,值得去付出努力和青春,由於你們都擁有一個共同的夢想:讓軟件更加簡單,美好!

相關文章
相關標籤/搜索