「
沒有銀彈」,什麼是銀彈?記得剛開始閱讀軟體方面的文章時,文章中常常出見這個詞彙「銀彈」,一直搞不清楚究竟有什麼含意,直到看了一本書才恍然大悟,這本書是1975年出版,1995年原著再版,軟體界的聖經:
「人月神話:軟體專案管理之道」
(The Mythical Man-Month: Essays on Software Engineering)
作者是Frederick P. Brooks, Jr.,書中第十六章「
沒有銀彈:軟體工程的本質性與附屬性工作」(No Silver Bullet — Essence and Accidents of Software Engineering),這篇文章是1986年刊登於IFIPS上的文章,1987年轉載於
IEEE《Computer》雜誌上。
「銀彈」的典故是來自於狼人的傳說,因為銀被視為月亮的同一體,具有法力,對付狼人必須使用銀製子彈射穿狼人的心臟,因此「
銀彈」是殺死狼人的必殺技!
Frederick P. Brooks, Jr.著,錢一一譯,人月神話:軟體專案管理之道,台北:經濟新潮社,2004。
「沒有銀彈:軟體工程的本質性與附屬性工作 」這篇文章闡述的重點是(請記住時間是1986年):
「在未來十年之內,無論是在技術上或管理上,都不會有任何單一的重大突破頭夠保證在生產力、可靠度或簡潔性上獲得改善,甚至,連一個數量級的改善都不會有。」
There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.
十年指的是1986年至1996年,而
數量級指的是10倍的進步。
銀彈指的是殺死狼人的「必殺技」,沒有銀彈比喻軟體上沒有必殺技的出現可以造成重大的進步。
Frederick P. Brooks, Jr.的論述指出:
軟體的開發工作區可以分成兩個部分,一是
本質性(Essence):源自於軟體本質,屬於與生俱來的困難,指的是創造一種由抽象的軟體實體所組成的複雜概念結構。 另一是
附屬性(Accident):當今伴隨在製作過程中所產生的困難,而非與生俱來的部分,指的是用程式語言來表現這些抽象的實體。
軟體的本質性(Essence)有:
複雜性(Complexity)、配合性(Conformity)、易變性(Changeability)、隱匿性(Invisibility)。 這是軟體開發設計的天命,很難改變而有重大的進步。就目前(1986年)的進展都是對於附屬性(Accident)的進展,因此,雖說是有進步,但還未到達數量級的改善。
這本書一直是軟體開發的聖經,不是沒有道理,因為Brooks寫出所有人都誤以為正確的觀點,而且找出事情發生的原因,追根究柢看穿真相的精神,才是這本書的精華。