「沒有任何一種單純的技術或管理上的進步,能夠獨立地承諾在十年內提高生產率、可靠性和簡潔性。」
silever bullet(獵殺狼人的特效**),被喻為一項技術或方法能讓軟體工程的生產力在十年內提高十倍,或是針對所有情況都管用的奇效工具。fred brooks預言這樣的「銀彈」在十年之內方法學家是找不到的。有意思的是,對比於gordon moore認為的積體電路上可容納的元器件數目每隔18至24個月便會增加一倍,軟體和硬體兩大工程的關聯與差異也就顯得十分微妙。
該論述中通過次要複雜度和必要複雜度的概念來解釋這一現象。次要複雜度就是指人們本身所產生的問題,是可以被解決的,高階語言的誕生讓語言優化組合之類的次要複雜度的移除取得了極大的進展;但必要複雜度則是軟體本身要解決的問題衍生而來的,無法被移除,主要表現為軟體實體一下性質:複雜性——兩個軟體部分不可能相同且擴充套件過程中元素互動以指數形式劇增,一致性——各種介面標準與相容性限制沿用,可變性——軟體變更容易快速,不可見性——軟體結構思路難以視覺化。
軟體工程的任務分為兩類:根本任務——打造構成抽象軟體實體的複雜概念結構,次要任務——使用程式語言表達這些抽象實體,在空間和時間限制內將他們對映成機器語言。由於根本任務在任務佔比中比重大,想要生產率有數量級式的提高,就觸及了軟體性質的固有困難,就類似於妄談「永動機」。
基於大量卓越的設計人的與增量開發以及軟體流通等形式,我們能夠專注於簡化這些困難,邁出的第一步也就是表達出軟體複雜的概念結構。
軟體專案存在可能成為乙個進度落後、預算超支、缺陷繁多、使用者缺少的怪物,恐怖猶如所謂的「人狼」,在任何時候都可能發出絕望的呼喚。完美的軟體在開發過程中沒有萬能的理論和方法,偷來的巧是致命的拙,唯有具體問題具體分析,將各種方法綜合運用才是解決之道。(然而再完美的軟體也僅僅是一項工程,就算能提供再多再好的必要功能,必要複雜度的存在也會讓問題無法完全被軟體替代)
「沒有銀彈」的由來!
一直聽說著 沒有銀彈 也知道它的意思 出自計算機科學家布魯克斯 沒有銀彈 一書 但沒看過,否則早知道了 意思是 沒有一種單純的技術或管理上的進步,能夠獨立地承諾在10年內大幅度地提高軟體的生產率 可靠性和簡潔性 但為什麼說不能大幅度的提高軟體的生產力為 沒有銀彈 呢?原來 布魯克斯用形象的譬喻來論述...
人月神話之沒有銀彈
讀 人月神話 也有了一段時間了,現在也理清了一些自己的思路了,這次主要是針對裡面的 沒有銀彈 這一話題,提出自己的看法。我認為,在現有的所有體系中,都沒有所謂的 銀彈 銀彈 只是人們想擁有乙個一勞永逸的解決辦法而針對乙個具體事件想出來的臨時的可行的某乙個措施,它的效用時間是有限的,並且解決方法本身並...
mysql運維 讀書筆記 Mysql 讀書筆記
mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...