這不是軟體產業第一次經歷這樣的轉型。回顧過去幾次「模式、實踐與可重用元件重塑系統開發」的時刻,有助於理解當下的變革。

演算法程式設計的規範化#

  • 高德納(Donald Knuth)1962 年起出版的《The Art of Computer Programming》是電腦科學發展的重要一章。
  • 書中的演算法不為任何特定電腦設計,而是為了教育讀者理解演算法本身;讀者再將其調整到自己使用的機器架構或要解決的問題上。
  • 這種規範化(formalization)的重要性在於:它提供了建構程式的共享工具箱,也證明了存在值得程式設計師先學習、再應用於各種情境的通用概念——演算法本身(獨立於任何具體問題)就值得理解。

物件導向程式設計的模式#

  • 隨著程式複雜度成長、單一程式的開發人數從個位數成長到數十人甚至數千人,程序式語言與演算法已不敷現代程式設計所需,因而催生了物件導向程式語言——將資料、可重用性與可擴展性提升到與演算法平起平坐的地位。
  • 1990 年代早期到中期,物件導向模式的書籍大量湧現,最著名的是「四人幫」(Gang of Four)的《Design Patterns: Elements of Reusable Object-Oriented Programming》(Erich Gamma 等著)。
  • 《Design Patterns》為程式設計提供了共同語言與框架,描述一系列基於介面(interface-based)、可在各種情境重用的模式;拜物件導向與介面的進展所賜,這些模式還能實作成通用的可重用函式庫——由開發者社群寫一次、反覆重用,既省時又提升可靠性。

開放原始碼軟體的興起#

  • 開發者分享原始碼的概念幾乎與電腦運算同壽,正式的自由軟體組織也自 1980 年代中期就存在,但 1990 年代末到 2000 年代,開源軟體的開發與散布出現爆炸性成長。
  • 開源與分散式系統模式的發展只有間接關聯,但它的重要性在於:透過開源社群,人們越來越清楚軟體開發(尤其是分散式系統開發)是一項社群性的事業
  • 本書所描述模式的基礎——所有容器技術——都是以開源軟體的形式開發與釋出的。從社群視角來看,模式在「描述」與「改進」分散式開發實務上的價值格外明顯。