引發的風暴#
〈沒有銀彈〉一文自 1986 年發表以來,引發了 Brooks 所有著作中最大的爭議與討論。支持者認為它道出了軟體工程的根本真相;批評者則認為 Brooks 過於悲觀,低估了新興技術的潛力。在這篇 1995 年撰寫的回應文章中,Brooks 逐一檢視了主要的批評意見,並重新審視自己的論點。
本章是 20 週年紀念版新增的內容,Brooks 以近十年的後見之明重新檢驗「沒有銀彈」的核心主張。
主要批評與回應#
Harel 的挑戰#
David Harel 在〈Biting the Silver Bullet〉一文中對 Brooks 提出了系統性的反駁。Harel 認為 Brooks 對本質困難與附屬困難的劃分過於粗糙,而且低估了某些技術進展的複合效果。
Brooks 的回應是:Harel 的論點實際上並未找到任何單一技術能帶來十倍提升,而是主張多種技術的組合效果。但這恰恰印證了「沒有銀彈」的核心論點——不存在單一的魔法解方。
Cox 的軟體 IC#
Brad Cox 提出了**「軟體積體電路」**(Software ICs)的概念,主張透過建立可重用的軟體元件市場,如同硬體產業的 IC 市場,來實現生產力的飛躍。
Brooks 認為這個方向確實極具前景,但也指出了現實中的障礙:建造高品質的可重用元件成本極高,建立分享與交易的市場機制同樣困難,而且文化上程式設計師傾向於「自己寫」而非「拿來用」。
Jones 的生產力數據#
Capers Jones 等人提供了產業生產力數據,試圖證明整體生產力確實在快速提升。Brooks 承認數據顯示了穩定的漸進改善,但強調這些改善是許多小進步的累積,而非任何單一技術的功勞——再次印證了原始論點。
重新審視候選銀彈#
物件導向程式設計#
到了 1995 年,OOP 已經成為主流。Brooks 承認物件導向確實帶來了實質的好處——更好的模組化、資訊隱藏、以及設計的可重用性。然而,它並未帶來十倍的生產力提升。OOP 的主要貢獻在於攻克了部分附屬困難(更好的表達方式),但對本質困難的影響有限。
Brooks 特別指出,OOP 最大的貢獻不在於語言特性本身,而在於它促進了軟體重用的文化與實踐。
人工智慧#
1986 年時 AI 正處於熱潮之中,許多人預期 AI 將很快解決軟體工程的難題。到了 1995 年,AI 的熱潮已經消退。Brooks 指出,當時所謂的 AI 技術(主要是專家系統)並未實現承諾。軟體設計需要的是全面的創造性思維,而非狹窄的規則推理。
圖形化程式設計#
圖形化程式設計工具在某些特定領域(如使用者介面設計)取得了成功,但作為通用程式設計範式,仍然受限於軟體不可見性的本質特性。複雜的邏輯關係無法用二維圖形充分表達。
重用:最大的希望#
在所有候選技術中,Brooks 認為軟體重用(Reuse)是最有潛力帶來重大改善的方向。
重用攻克本質困難的方式很直接:如果你不需要建構某個功能,它的所有複雜性都消失了。購買或取用一個經過驗證的函式庫、框架或元件,比從零開始設計要高效得多。
然而,Brooks 也誠實地指出重用的障礙:
- 建構真正可重用的元件,成本是一次性元件的三到五倍
- 需要良好的分類、檢索和整合機制
- 程式設計師需要克服**「非我發明」**(Not Invented Here)的心態
- 需要成熟的市場機制和標準化的介面
Brooks 的觀察在今天看來極具預見性——開源生態系統、套件管理器(npm、Maven、pip)、以及雲端服務(AWS、GCP)正是他所期待的重用基礎設施。
本質與附屬的區分依然成立#
Brooks 重新檢視了軟體的四大本質特性——複雜性、配合性、易變性、不可見性——並確認這些特性在 1995 年依然成立。軟體的核心困難並未因為任何新技術而根本改變。
他特別強調,許多批評者混淆了「生產力的穩定提升」與「單一技術帶來的十倍突破」。前者確實存在,但後者仍未出現。
最大的修正:漸進式開發#
Brooks 在本章做出了一個重要的修正:他對漸進式開發(Incremental Development)的評價比原文更高。
在 1986 年的原始文章中,Brooks 將漸進式開發列為「有希望的方向」之一,但語氣相對保守。到了 1995 年,他明確表示:
漸進式開發的成效比我預期的更好。瀑布模型是錯誤的。
軟體應該像生物一樣生長,而非像建築一樣建造。從一個能運行的最小核心開始,逐步增加功能,每一步都測試、學習、調整。
Brooks 在此明確否定了瀑布模型——這對一位在 1975 年的著作中主張嚴格階段化開發的作者來說,是一個重大的立場轉變。
本章重點#
- 「沒有銀彈」的核心論點在近十年後依然成立:沒有任何單一技術帶來了十倍的生產力提升
- OOP 帶來了實質改善,但主要價值在於促進重用,而非語言特性本身
- 軟體重用是最有潛力的方向,但需要克服成本、文化和基礎設施的障礙
- 本質與附屬困難的區分依然有效,軟體的四大本質特性未變
- Brooks 的最大修正:漸進式開發的價值超出預期,瀑布模型是錯誤的