- 相關推薦
雙十讀書活動總結范文
沒有銀彈何以制服“不死人狼”
——讀《人月神話》第十九章(沒有銀彈)有感
《人月神話》(英語:The Mythical Man-Month)是由IBM System/360系統(tǒng)之父佛瑞德布魯克斯(英文名:FrederickP.Brooks.Jr.)所著經典文集,全書講解軟件工程、項目管理相關課題,被譽為軟件領域的圣經,內容源于作者布魯克斯在IBM公司System/360家族和OS/360中的項目管理經驗。該書于1975年首次發(fā)行(ISBN 0-201-00650-2),并于1995年重新發(fā)行紀念版(ISBN 0-201-83595-9)。
《人月神話》全書共十九章,可以說每一章都是軟件工程的精華,是軟件開發(fā)人員的精神食糧,沒有任何一本書敢與之媲美,即使是39年后的今天,當我再次讀到這本書的時候依然有醍醐灌頂之感。
《沒有銀彈》這一章節(jié),可以說是本書最重要的章節(jié),也是大家最為在意和討論的章節(jié)。本章以巧奪天工的比喻開題,講述了在所有恐怖民間傳說的妖怪中,最可怕的是人狼,因為它們可以完全出乎意料地從熟悉的面孔變成可怕的怪物。為了對付人狼,我們在尋找可以消滅它們的銀彈。
大家熟悉的軟件項目具有一些人狼的特性,常?此坪唵蚊髁说臇|西,卻有可能變成一個落后進度、超出預算、存在大量缺陷的怪物。因此,我們聽到了近乎絕望的尋求銀彈的呼喚,尋求一種可以使軟件成本像計算機硬件成本一樣降低的尚方寶劍。但是,我們看看近二十年來的情況,沒有銀彈的蹤跡。沒有任何技術或管理上的進展,能夠獨立地許諾在生產率、可靠性或簡潔性上取得數(shù)量級的提高。
所謂的人狼,也就是“軟件活動的根本任務”。首先,Brooks認為我們并沒有足夠的精力來放到“軟件活動的根本任務”這一目標之上。根本任務的目標是抽象軟件構成的復雜概念結構;次要任務的目標是表達抽象實體,在一定范圍內映射成計算機的執(zhí)行邏輯;我們大多時候在關注次要目標,例如寫程序和開發(fā)“寫程序用的”程序;我們寫再多的程序與再強的“寫程序用的”程序都不會觸及到根本任務。
進一步的分析來說,是我們探索目標的方法,分散了達到目標的力量。軟件實體是一個許多概念交織的建筑:數(shù)據(jù)集、數(shù)據(jù)項的關系、算法以及引用函數(shù)。其本質是抽象的,概念架構在許多不同的表示方式下是一樣的。編寫軟件最困難的部分是規(guī)范、設計和測試這種概念架構,而不是表式他的勞動和測試這一表示的可靠性。現(xiàn)代軟件系統(tǒng)存在的內在的不可減少的特性有:復雜性(Complexity)、遵守隨機的復雜的規(guī)范(Conformity)、易變性(Changeability)和不可見性(Invisibility)。高級語言、分時系統(tǒng)、統(tǒng)一編程環(huán)境、面向對象編程、人工智能、專家系統(tǒng)、自動化編程、圖形化編程都只是解決了編程偶然的困難,而不能解決
編程的內在困難。
1. 復雜性:極端的復雜性不可避免
軟件系統(tǒng)與計算機、建筑或者汽車大不相同,后者往往存在著大量重復的部分。由于軟件產品特有的復雜度導致了成員之間的溝通非常困難,帶來了軟件產品的進度,質量和成本多方面的問題。特別是在軟件規(guī)模增加的時候復雜度往往成倍上升。同時復雜度不僅僅導致技術上的困難,還引發(fā)了很多管理上的問題。它使全面理解問題變得困難,從而妨礙了概念上的完整性。所以在復雜性方面,人狼是自療系的:越做越復雜,不可能變簡單。
2. 一致性:要背上不可丟棄的歷史包袱
由于Brooks強調新的軟件需要保證跟舊的軟件兼容,你創(chuàng)生了一個軟件也就創(chuàng)生了下一個軟件的需求,所有的創(chuàng)生活動產生了需求的自增集合,盡管這種“變體不是必需的”,但它一個不可丟棄的歷史包袱。某些情況下,因為是開發(fā)最新的軟件,所以它必須遵循各種接口。另一些情況下,軟件的開發(fā)目標就是兼容性。在上述的所有情況中,很多復雜性來自保持與其他接口的一致,對軟件的任何再設計,都無法簡化這些復雜特性。所以在保證一致性這一方面,人狼是自增長的。
3. 可變性:要接受持續(xù)的變更
軟件系統(tǒng)包含了很多功能,而功能是最容易感受變更壓力的部分。所有成功的軟件都會發(fā)生變更,F(xiàn)實工作中,經常發(fā)生兩種情況。當人們發(fā)現(xiàn)軟件很有用時,會在原有應用范圍的邊界,或者在超越邊界的情況下使用軟件。功能擴展的壓力主要來自那些喜歡基本功能,又對軟件提出了很多新用法的用戶們。簡言之,軟件產品扎根于文化的母體中,如各種應用、用戶、自然及社會規(guī)律、計算機硬件等等。后者持續(xù)不斷地變化著,這些變化無情地強迫著軟件隨之變化。需求是無度和不可控的,所以人狼本身又是變形系的。
4. 不可見性:任務無法全面抽象描述
除去軟件結構上的限制和簡化方面的進展,軟件仍然保持著無法可視化的固有特性,從而剝奪了一些具有強大功能的概念工具的構造思路。這種缺憾不僅限制了個人的設計過程,也嚴重地阻礙了相互之間的交流。你找不到足夠的抽象方法描述軟件的不同側面,也就不能將它們表達為抽象概念上的圖形。如果你找到了這樣的方法,那么這個“軟件”本身就不足夠復雜,因此也就不是原本含義上的“根本任務”。所以,它是隱形的——你如果看見了它,要么是看見了諸多復雜的方面中的一面,要么根本就是看錯了。
面對一個具有“自增+自療+變形+隱身”的“不死人狼”,我們何以應對?
一、 在應對“自療”方面,在軟件產品開發(fā)工廠化的過程中,我們要注意到仍然解決的是次要因素,比如加大公用組件開發(fā),加大平臺和框架的建設,而業(yè)務功能本身導致的復雜性是無法避免的,F(xiàn)在市場上有很多快速開發(fā)平臺,但是真正能夠不寫代碼就完成業(yè)務功能的開發(fā)平臺基本上沒有成功的,特別是在業(yè)務場景比較復雜情況下,編程自動化基本是不可能的事情。唯一看到有所突破的是關于統(tǒng)一框架和技術平臺等方面的建設,在原有的框架基礎上我們可以構建一個產品開發(fā)平臺,將跟業(yè)務關系不大的權限模型,工作流引擎等集成進去,將常用的可復用組件集成進去,加快開發(fā)速度。我們不能在追求自動編程平臺上下功夫,可以在加強組件復用和技術平臺建設上下功夫。
二、 在應對“自增”方面,我們要在軟件產品的設計過程中,盡可能考慮到軟件的可擴展性。
三、 在應對“變形”方面,軟件開發(fā)的過程必須要考慮如何適應變化,我們要在需求,設計和編碼過程中都需要考慮如何快速響應變化,如何提高軟件產品的可擴展性。我們在軟件開發(fā)生命周期模型上強調增量迭代的思路,強調測試驅動的思路其根本目的就是為了快速響應變化,降低變化帶來的風險。
四、 在應對“隱身”方面,我們要改進軟件開發(fā)模型,比如增量迭代的開發(fā)模型,快速原型法,測試驅動,高級語言和圖形化編程等。
總之,盡管我們或許找不到殺死“不死人狼”的銀彈,但是只要我們全面剖析“不死人狼”特性,結合人類的智慧,不斷改進工作思路,隨機應變,找準突破口總能找到有效克制它的方法。
【雙十讀書活動總結】相關文章:
雙十一活動總結08-10
雙十一活動的總結03-23
雙十一活動總結07-29
雙十二促銷活動總結04-30
雙十一促銷活動總結08-16
商家雙十一活動總結08-22
舉辦雙十一活動總結10-25
店鋪雙十二活動總結11-21
關于雙十一活動總結11-09
雙十一活動總結通用03-23