有沒有銀彈?——閱讀思考

Hello_Jane發表於2014-11-13

No Silver Bullet — Essence and Accidents of Software Engineering》是IBM大型機之父Frederick P. Brooks在1986年發表的一篇關於軟體工程的經典論文。銀彈(Silver Bullet)是外國傳說中可以殺死狼人等怪物的神器,而後引申出的含義類似於大殺招、王牌。而Brooks在這篇論文中強調,由於軟體本質的複雜性,真正的“銀彈”並不存在;也斷言在十年內,沒有任何一項技術或方法可使軟體工程的生產力提高一個數量級。

Brooks將軟體開發的困難分為兩類:本質性(essence)和伴隨性(accident)。本質性困難是指軟體“先天性”的困難,即如何從抽象性問題得到具體概念上的解決方案。就像資料庫中的實體是對現實世界的抽象,但怎麼設計這些抽象是難點,也是最重要的,將會影響整個開發的過程。伴隨性困難是指將概念構思施行到程式碼編寫等上遇到的困難。當然對伴隨性困難感受最深的就是開發環境的配置安裝……順便略吐槽一下當年安SQLSEVER時因為先裝了VS2010竟然導致不能安裝最後重灌系統的悲慘經歷。

Brooks認為,伴隨性困難會隨著工具的改善而淡化,但本質性困難是難以解決的,因為它大部分發生在我們的頭腦中,而沒有什麼工具可以有效地幫助我們。這一點我並不完全贊同。

Brooks例舉的本質性困難比如軟體的複雜性Complexity(計算是人為抽象的)、一致性Conformity(介面統一)、易變性Changeability(需求、硬體等變化)、不可見性Invisibility(未完成的的軟體難以充分展現其結構,帶來溝通困難)

過去的突破比如高階語言High-level languages.、分時技術Time-sharing、統一的開發環境Unified programming environments,解決了一些伴隨性困難。

而後Brooks也對一些興起的技術或方法做了討論和分析(感覺不樂觀的分析佔多數),例如Ada和其他高階語言的進展、物件導向的程式設計、人工智慧、專家系統、自動化程式設計等等……以及比較有前景的對本質性問題有效果的法子,如購買部分軟體取代開發、使用優秀的設計人員。

 

Brooks的這篇《沒有銀彈》引起的反響是很大的,爭議與反對的聲音也很多。1990年,Brad Cox發表了一篇名為《There Is a Silver Bullet》的文章,在其中指出採取可再利用(reusable)、可替換元件的方式來對付屬於概念本質性部分的問題。(後來他還寫了《No Silver Bullet Revisted》)

沒有銀彈,這種說法在我看來過於悲觀。前面提到我不贊同頭腦的思考難以藉助工具那一點,我認為,軟體開發者累積的經驗與其自身歸納總結的能力即是頭腦的“工具”。這一點確實不具有普適性,並且差異性很大。但隨著軟體工程的發展,我認為未來的軟體工程師會得到更好的培訓,正如這門課就是一種嘗試。我們都沒有牛頓的頭腦,但我們每個人都會計算萬有引力,此所謂“站在巨人的肩膀上”。對於總體來說,經驗性的進步是顯著的,並會因為某些契機可能得到大幅度提升,比如網際網路的全球化。經驗轉化為更優質的培訓後,開發人員的水平提升,軟體開發總體的質量或時間將得到有效的提高。

一點拙見,還請指教。

 

相關文章