本書談的就是一件事——複雜性。
應對複雜性是軟體設計最重要的挑戰:它讓系統難以建造與維護,也常常讓系統變慢。
本書討論過的事#
- 複雜性的根本成因:依賴與模糊
- 辨識複雜性的紅旗:資訊洩漏、不必要的錯誤條件、太籠統的命名……
- 創造簡單系統的高層概念:類別要深、要通用、把錯誤從定義中消除、把介面文件與實作文件分開……
- 投資心態:產生簡單設計所需的觀念
短期成本#
所有這些建議都有副作用:在專案早期增加額外工作。
若你還不習慣思考設計,速度會更慢,因為你要邊做邊學好設計手法。
如果你只在乎「現在能跑」,那麼花時間想設計就會變成阻擋你達成目標的雜事。
長期回報#
但若好設計是你的目標——這本書的觀念會讓寫程式變得更有趣。
- 設計是引人入勝的解謎:「怎麼用最簡單的結構解這個問題?」
- 嘗試多種方法本身就有趣
- 找到既簡單又強大的方案是滿足感的來源
- 乾淨、簡單、顯而易見的設計,是美的
投資回收很快#
- 一開始仔細定義的模組,在後續被反覆重用時為你省時間
- 半年前寫好的清楚文件,在你回頭加新功能時為你省時間
- 磨練設計技藝本身也為自己付出代價:技巧成熟後,好設計幾乎不比快速骯髒設計更費時
雙倍紅利#
好設計者的回報:有更大比例的時間花在設計階段——這正是有趣的部分。
糟糕的設計者多半花時間在追複雜、脆弱程式碼裡的 bug。
提升設計能力 → 你不只能更快地交出更高品質的軟體,寫程式的過程本身也會變得更愉快。