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