要提供各種選擇您市,而不是找借口。不要說事情做不到役衡;要說明能夠做什么來挽回局面茵休。必須把代碼扔掉?給他們講授重構的價值手蝎。
一扇破窗戶榕莺,只要有那么一段時間不修理,就會漸漸給建筑的居民帶來一種廢棄感——一種職權部門不關心這座建筑的感覺棵介。于是又一扇窗戶破了钉鸯。人們開始亂扔垃圾。出現了亂涂亂畫邮辽。嚴重的結構開始損壞開始了唠雕。在相對較短的一段時間里,建筑就被損毀得超出了業(yè)主愿意修理的程度吨述,而廢棄感變成了現實岩睁。
如果你發(fā)現自己在有好些破窗戶的項目里工作,會很容易產生這樣的想法:“這些代碼的其余部分也是垃圾揣云,我只要照著做就行了捕儒。”
大多數人都以為維護是在應用發(fā)布時開始的邓夕,維護就意味著修正bug和增強特性刘莹。我們認為這些人錯了。程序員須持續(xù)不斷地維護焚刚。
系統(tǒng)中的每一項知識都必須具有單一点弯、無歧義、權威的表示汪榔。
注釋將不可避免地變得過時蒲拉,而不可信任的注釋比完全沒有注釋更糟。
處理這個問題的最佳方式是鼓勵開發(fā)者相互進行主動的交流痴腌。
你不是在窺探——你是在向他們學習雌团。
養(yǎng)成不斷地批判對待自己的代碼的習慣。尋找任何重新進行組織士聪、以改善其結構和正交性的機會锦援。
如果在代碼中有著糟糕的封裝、高度耦合以及硬編碼的邏輯或參數剥悟,事情也許就是不可能的灵寺。
發(fā)現了他人的bug之后,你可以花費時間和精力去指責讓人厭惡的肇事者区岗。在有些工作環(huán)境中略板,這是文化的一部分,并且可能是“疏通劑”慈缔。但是叮称,在技術競技場上,你應該專注于修正問題藐鹤,而不是發(fā)出指責瓤檐。
如果有一個錯誤,就說明非常娱节、非常糟糕的事情已經發(fā)生了挠蛉。
死程序帶來的危害通常比有疾患的程序要小得多。
無論何時你發(fā)現自己在思考“但那當然不可能發(fā)生”肄满,增加代碼檢查它谴古。最容易的辦法是使用斷言。
你的第一條防線是檢查任何可能的錯誤稠歉,第二條防線是使用斷言設法檢測你疏漏的錯誤讥电。
無論是誰分配的資源,它都應該負責解除該資源的分配轧抗。
最后恩敌,有一種技術可用于更進一步解除模塊的耦合:提供一個“聚會地點”,各模塊可以在那里匿名和異步地交換數據横媚。
但“羞怯”的工作方式有兩種:不向別人暴露你自己纠炮,不與太多人打交道。
很早以前我們就被教導說灯蝴,不要把程序寫成一個大塊恢口,而應該“分而治之”,把程序劃分成模塊穷躁。每個模塊都有其自身的責任耕肩;事實上,模塊(或類)的一個好定義就是,它具有單一的猿诸、定義良好的責任婚被。
對象應該能進行登記,只接收它們需要的事件梳虽,并且決不應該收到它們不需要的事件址芯。
不主動思考他們的代碼的開發(fā)者是在靠巧合編程——代碼也許能工作,但卻沒有特別的理由說明它們?yōu)楹文芄ぷ鳌?/p>
注重時效的程序員批判地思考所有代碼窜觉,包括我們自己的谷炸。
不要讓已有的代碼支配將來的代碼。如果不再適用禀挫,所有的代碼都可被替換旬陡。
當你遇到拌腳石——代碼不再合適,你注意到有兩樣東西其實應該合并或是其他任何對你來說是“錯誤”的東西——不要對改動猶豫不決语婴。應該現在就做季惩。
時間壓力常常被用作不進行重構的借口。但這個借口并不成立:現在沒能進行重構腻格,沿途修正問題將需要投入多得多的時間——那時將需要考慮更多的依賴關系画拾。我們會有更多的時間可用嗎?根據我們的經驗菜职,沒有青抛。
最勤勉的開發(fā)者如果被派到不在乎質量的團隊里,會發(fā)現自己很難保持修正瑣碎問題所需的熱情酬核。
事實上蜜另,好的項目擁有的測試代碼可能比產品代碼還要多。
匿名(尤其是在大型項目中)可能會為邋遢嫡意、錯誤举瑰、懶惰和糟糕的代碼提供繁殖地。只把自己看作齒輪上的一個齒蔬螟、在無休止的狀況報告中制造蹩腳的借口此迅、而不去編寫優(yōu)良的代碼,那太容易了旧巾。