成為一名好的軟體設計者,第一步是承認「程式能跑還不夠」。

心態的重新定位#

  • 不能為了完成當前任務而引入不必要的複雜性
  • 最重要的是系統的長期結構
  • 系統中大多數程式碼都是在現有 codebase 上擴充而來,所以你最重要的工作是讓未來的擴充變得容易

因此:

  • 不要把「程式能跑」視為主要目標(雖然它當然得能跑)
  • 主要目標應該是做出一個優秀的設計,而它剛好也能跑

這就是戰略型程式設計(strategic programming)。

投資心態(Investment Mindset)#

戰略型需要的是「投資」的心態:

  • 不要走完成當前專案的最短路徑
  • 投入時間改善系統設計
  • 短期會稍微慢一點,但長期會更快

兩類投資#

主動式(Proactive)#

提前一步、為了未來而做的投資:

  • 寫新類別時多花一點時間找簡單的設計,不要寫第一個冒出來的點子
  • 嘗試幾個替代設計,挑最乾淨的
  • 想像一下系統未來可能怎麼變化,確保你的設計能容納這些變化
  • 寫好的文件也是主動式投資

反應式(Reactive)#

事後修正的投資:

  • 不論前期投入多少,設計上總會出錯
  • 隨時間推進,這些錯誤會逐漸浮現
  • 發現設計問題時,不要忽視、不要 patch 繞過——花一點時間把它修對

戰略 vs. 戰術的本質差異#

戰術型戰略型
持續累積小複雜性 → 未來爆炸持續做小改善 → 系統設計持續變好
為「現在」最快而設計為「未來的可擴充性」而設計
走捷徑投資