有效的軟體開發實踐已有大量文獻記載,遠超多數人所知。別人已經犯過你正在犯的錯誤——與其重蹈覆轍,不如閱讀他們的經驗並從中學習。本章提供一份結構化的資源指南,涵蓋建構核心書籍、相關領域、期刊,以及一個分級的閱讀計畫。

35.1 關於軟體建構的資訊#

軟體開發函式庫由幾類資訊組成:核心程式設計書籍解釋基礎概念、相關書籍涵蓋更大的技術與管理脈絡、特定參考資料則針對語言和環境(通常只有一個專案的壽命)。

建構領域的重要書籍:

  • 《Pragmatic Programmer》(Hunt & Thomas, 2000)——聚焦於與編碼最密切相關的活動(測試、除錯、斷言等),包含許多建立好程式碼的原則
  • 《Programming Pearls》 第二版(Bentley, 2000)——以散文形式討論小規模軟體設計的藝術與科學,寫作精彩、見解深刻
  • 《Extreme Programming Explained》(Beck, 2000)——定義了一種以建構為中心的開發方法;其關於經濟效益的主張未獲業界研究證實,但許多建構建議仍然實用
  • 《Writing Solid Code》(Maguire, 1993)——基於 Microsoft Office 開發經驗,聚焦於商業品質軟體的 C 語言建構實踐
  • 《The Practice of Programming》(Kernighan & Pike, 1999)——橋接學術知識與實務經驗,涵蓋程式風格、設計、除錯與測試
  • 《Programmers at Work》(Lammers, 1986)——訪談業界知名程式設計師(Bill Gates、John Warnock、Andy Hertzfeld 等),探索其工作習慣與程式設計哲學

35.2 建構以外的話題#

概述性資料#

  • 《Facts and Fallacies of Software Engineering》(Glass, 2003)——軟體開發常識的可讀導論,研究紮實且附有豐富參考資源
  • 《Professional Software Development》(McConnell, 2004)——調查軟體開發的現狀與最佳實踐的可能性
  • 《SWEBOK: Guide to the Software Engineering Body of Knowledge》(Abran, 2001)——軟體工程知識體系的詳細分解,顯示建構之外還有多少知識存在
  • 《The Psychology of Computer Programming》(Weinberg, 1998)——充滿關於程式設計的迷人故事,強調程式設計首先是人的活動
  • 《The Mythical Man-Month》(Brooks, 1995)與 《Peopleware》(DeMarco & Lister, 1999)——同樣強調人是軟體開發的核心
  • 《Software Creativity》(Glass, 1995)——討論創造力 vs. 紀律、理論 vs. 實踐、啟發法 vs. 方法論等軟體領域的重要二分法

軟體工程概述#

每位實務工作者都應擁有一本高階軟體工程參考書,提供方法論的全貌與各技術的概要描述:

  • 《Software Engineering: A Practitioner’s Approach》 第六版(Pressman, 2004)——均衡涵蓋需求、設計、品質驗證與管理
  • 《Software Engineering》 第六版(Sommerville, 2000)——與 Pressman 的書相當,提供良好的高階總覽

其他參考書目#

  • ACM Computing Reviews——依廣泛分類系統組織的書評
  • Construx Software 的 Professional Development Ladder——為開發者、測試者與管理者提供推薦閱讀計畫

35.3 期刊#

大眾程式設計雜誌#

期刊特色
Software Development聚焦一般專業程式設計議題,文章品質高
Dr. Dobb’s Journal面向硬核程式設計師,文章深入且包含大量程式碼

高階程式設計期刊#

期刊特色
IEEE Software聚焦建構、管理、需求、設計等前沿議題;對認真的軟體實務工作者最有價值的期刊
IEEE ComputerIEEE Computer Society 旗艦刊物,涵蓋廣泛的電腦主題
Communications of the ACM歷史悠久且受尊重,偏學術風格;優點是包含尖端資訊,缺點是部分作者寫作風格晦澀

專業出版品#

  • IEEE Computer Society——發行軟體工程、安全與隱私、電腦圖學、網路開發等專業期刊
  • ACM——發行人工智慧、人機互動、資料庫、嵌入式系統、程式語言等特定領域的出版品
  • 大眾市場雜誌——如 C/C++ Users Journal、Java Developer’s Journal、Linux Journal 等,涵蓋各自的專門領域

35.4 軟體開發者的閱讀計畫#

此計畫基於 Construx Software 的專業發展階梯(Professional Development Ladder),分為三個層級:

入門級(Introductory Level)#

  • Adams —《Conceptual Blockbusting》第四版
  • Bentley —《Programming Pearls》第二版
  • Glass —《Facts and Fallacies of Software Engineering》
  • McConnell —《Software Project Survival Guide》
  • McConnell —《Code Complete》第二版

實務級(Practitioner Level)#

  • Berczuk & Appleton —《Software Configuration Management Patterns》
  • Fowler —《UML Distilled》第三版
  • Glass —《Software Creativity》
  • Kaner, Falk & Nguyen —《Testing Computer Software》第二版
  • Larman —《Applying UML and Patterns》第二版
  • McConnell —《Rapid Development》
  • Wiegers —《Software Requirements》第二版
  • NASA Goddard —「Manager’s Handbook for Software Development」

專業級(Professional Level)#

  • Bass, Clements & Kazman —《Software Architecture in Practice》第二版
  • Fowler —《Refactoring》
  • Gamma et al. —《Design Patterns》
  • Gilb —《Principles of Software Engineering Management》
  • Maguire —《Writing Solid Code》
  • Meyer —《Object-Oriented Software Construction》第二版
  • NASA Goddard —「Software Measurement Guidebook」

這個閱讀計畫是通用基準;實際應根據個人興趣與專長方向進一步調整,並搭配訓練與實務經驗。

35.5 參加專業組織#

學習程式設計最好的方式之一是與同樣認真投入的程式設計師交流。除了本地的使用者群組外,有兩個主要的專業組織:

  • IEEE Computer Society——較偏實務導向,出版 IEEE Computer 與 IEEE Software
  • ACM(Association for Computing Machinery)——歷史最悠久的專業組織,出版 Communications of the ACM 及眾多特定領域刊物,較偏學術導向

要點#

  • 軟體開發知識體系龐大,別人已犯過的錯無需重複——大量閱讀是提升能力最有效的途徑
  • 建構核心書籍(如《Programming Pearls》、《Pragmatic Programmer》)奠定扎實基礎,建構以外的書籍提供更大的技術與人文脈絡
  • 期刊是持續學習的重要管道:大眾雜誌適合日常閱讀,IEEE Software 和 Communications of the ACM 提供前沿資訊
  • 透過分級閱讀計畫(入門 → 實務 → 專業)系統性地建立知識體系
  • 加入專業組織(IEEE Computer Society、ACM)是與同行交流、持續成長的有效方式