軟體設計的核心目標是降低複雜性。要對付敵人,第一步是先認識它:
- 「複雜性」到底是什麼?
- 如何辨別一個系統是否不必要地複雜?
- 是哪些原因讓系統變複雜?
本章從高層次回答這些問題,後續章節再依此基礎延伸到具體的結構性議題。
為什麼辨識能力重要#
辨識複雜性是設計者最關鍵的能力之一:
- 在投入大量心力前,就能提早察覺問題
- 在多個替代方案間做出較好的判斷
- 判斷一個設計是否簡單,比寫出簡單的設計來得容易——這份判斷力反過來能引導你的設計哲學朝向簡潔
如果某個設計看起來複雜,就試另一條路看看是否更乾淨。久而久之你會累積出一份直覺:哪些手法傾向產生簡單設計,哪些則傾向滋生複雜性。
本章的角色#
本章為全書奠定基礎假設:
- 對複雜性給出實用的定義
- 描述複雜性如何在開發中顯現出來(症狀)
- 探討造成複雜性的根本原因
- 解釋複雜性為何是「漸進累積」的
後續章節會把本章的內容當作既定前提,不再重複論證。
因此本章的觀念若沒掌握牢,後面讀起來會比較吃力。
結語#
複雜性源自**依賴(dependencies)與模糊(obscurity)**的累積。它愈累積,就愈會引發變更放大、認知負擔與未知的未知;最終讓修改既有程式碼變得困難且風險高昂。