成為一名好的軟體設計者,第一步是承認「程式能跑還不夠」。
心態的重新定位#
- 不能為了完成當前任務而引入不必要的複雜性
- 最重要的是系統的長期結構
- 系統中大多數程式碼都是在現有 codebase 上擴充而來,所以你最重要的工作是讓未來的擴充變得容易
因此:
- 不要把「程式能跑」視為主要目標(雖然它當然得能跑)
- 主要目標應該是做出一個優秀的設計,而它剛好也能跑
這就是戰略型程式設計(strategic programming)。
投資心態(Investment Mindset)#
戰略型需要的是「投資」的心態:
- 不要走完成當前專案的最短路徑
- 投入時間改善系統設計
- 短期會稍微慢一點,但長期會更快
兩類投資#
主動式(Proactive)#
提前一步、為了未來而做的投資:
- 寫新類別時多花一點時間找簡單的設計,不要寫第一個冒出來的點子
- 嘗試幾個替代設計,挑最乾淨的
- 想像一下系統未來可能怎麼變化,確保你的設計能容納這些變化
- 寫好的文件也是主動式投資
反應式(Reactive)#
事後修正的投資:
- 不論前期投入多少,設計上總會出錯
- 隨時間推進,這些錯誤會逐漸浮現
- 發現設計問題時,不要忽視、不要 patch 繞過——花一點時間把它修對
戰略 vs. 戰術的本質差異#
| 戰術型 | 戰略型 |
|---|---|
| 持續累積小複雜性 → 未來爆炸 | 持續做小改善 → 系統設計持續變好 |
| 為「現在」最快而設計 | 為「未來的可擴充性」而設計 |
| 走捷徑 | 投資 |