普通的軟體工程師實際與最優秀的軟體實際差距甚大—多半比其他學科中的這種差距還大。因此,傳播優秀實際經驗的工具十分重要。 -Fred Brooks

用程式去創造適合開發的語言環境(programming into a language),而不是用語言現有的環境來設計程式(programming in a language),不要受限於語言的限制。 -Steve McConnell

我這種統計出身的coder差距就更大了,統計系對程式語言的教學較少,同時我是由R起家的,再加上一路工作經驗都沒有前輩帶過,說我是毫無系統的程式設計師並不過份。藉由這本書我獲得許多大師的經驗與遵從的準則,更理解軟體設計應該注意的,還有那些我還沒遇到但前人已經有解決方案的問題。

除了程式開發者以外,我認為這本書也適合PM或是管理者閱讀,因為程式設計的問題圍繞著:

  1. 如何管理複雜度
  2. 如何規劃一個跨度長、須多人合作的專案
  3. 如何幫助別人理解你的文件
  4. 如何藉由非正式的規則與限制,填補程式語言的限制,減少被誤用、被誤解、有歧義的問題

I. 打好基礎

1. 什麼是軟體建構

*problem definition → requirements development → construction planning → software architecture/high-level design → detailed design → coding and debugging → unit testing →integration testing → integration → system testing → corrective maintenance

*相較於programming,coding有種"把已經存在的設計機械化的翻譯成電腦語言"

*建構與設計很重要

2. 藉由隱喻(metaphor)進一步理解軟體開發

*隱喻是一種啟示(heuristic),而非演算法(algorithm)