這是近期我閱讀的第二本關(guān)于軟件工程的書(shū)籍,第一本是《構(gòu)建之法》;雖然兩本書(shū)都是關(guān)于軟件工程方面,但各有側(cè)重。《構(gòu)建之法》一定程度是為了解決老師在具體教授知識(shí)上的一些難點(diǎn)和問(wèn)題,所以在軟件工程中的各個(gè)領(lǐng)域如構(gòu)建、開(kāi)發(fā)、測(cè)試、項(xiàng)目管理 都有具體的探討和對(duì)應(yīng)的實(shí)踐,側(cè)重于術(shù); 《人月神話(huà)》的中心論點(diǎn)是在大型編程項(xiàng)目中,由于人員的分工和軟件固有的內(nèi)在困難,在十年內(nèi)無(wú)法是生產(chǎn)率、可靠性、簡(jiǎn)潔性 取得數(shù)量級(jí)上的進(jìn)步,側(cè)重于道。
從學(xué)習(xí)的遞進(jìn)層次關(guān)系來(lái)看,應(yīng)該先懂「道」,再學(xué)習(xí)「術(shù)」,這樣才能夠獲得更深的認(rèn)識(shí)。不過(guò)對(duì)于高難度學(xué)科的學(xué)習(xí)過(guò)程而言,我們更傾向于先學(xué)習(xí)術(shù),在實(shí)踐的同時(shí)不斷強(qiáng)化,逐步獲得更深的理解,最終在腦海中形成全面的「系統(tǒng)」。所以要想學(xué)會(huì)一門(mén)技術(shù)或技能,最好的方法就是馬上開(kāi)始行動(dòng),并且堅(jiān)持「做中學(xué)」。
接下來(lái)我將根據(jù)自己的理解把整本書(shū)的框架梳理出來(lái),受限于自身的能力,不免會(huì)這樣或那樣的不足,歡迎批評(píng)和建議。
名詞解釋
「銀彈」: 銀色子彈,在歐洲民間傳說(shuō)及19世紀(jì)以來(lái)哥特小說(shuō)風(fēng)潮的影響下,銀色子彈往往被描繪成具有驅(qū)魔功效的武器,是針對(duì)狼人等超自然怪物的特效武器。后來(lái)也被比喻為具有極端有效性的解決方法,作為殺手锏、最強(qiáng)殺招、王牌等的代稱(chēng)。
文中的「沒(méi)有銀彈」:沒(méi)有任何技術(shù)或管理上的進(jìn)展, 能夠獨(dú)立地許諾十年內(nèi)使軟件系統(tǒng)項(xiàng)目生產(chǎn)率、 可靠性或簡(jiǎn)潔性獲得數(shù)量級(jí)上的進(jìn)步。
1. 現(xiàn)象
軟件系統(tǒng)項(xiàng)目中的「焦油坑」:表面上看起來(lái)好像沒(méi)有任何一個(gè)單獨(dú)的問(wèn)題會(huì)導(dǎo)致困難, 每個(gè)都能被解決, 但是當(dāng)它們相互糾纏和累積在一起的時(shí)候, 團(tuán)隊(duì)的行動(dòng)就會(huì)變得越來(lái)越慢。 對(duì)問(wèn)題的麻煩程度, 每個(gè)人似乎都會(huì)感到驚訝, 并且很難看清問(wèn)題的本質(zhì)。 最終導(dǎo)致項(xiàng)目進(jìn)度嚴(yán)重滯后或者干脆以失敗而告終。
2. 原因
- 缺乏合理的時(shí)間進(jìn)度是主要原因,它比其他所有因素加起來(lái)的影響都還大。
- 對(duì)進(jìn)度缺少跟蹤和監(jiān)督(如何進(jìn)行跟蹤和監(jiān)督??)。其他工程領(lǐng)域中,經(jīng)過(guò)驗(yàn)證的跟蹤技術(shù)和常規(guī)監(jiān)督程序,在軟件工程中常常被認(rèn)為是無(wú)謂的舉動(dòng)。
- 意識(shí)到進(jìn)度偏移時(shí),固有(傳統(tǒng))的反應(yīng)是增加人力。這就像使用汽油滅火一樣, 只會(huì)使事情更糟。 越來(lái)越大的火勢(shì)需要更多的油, 從而進(jìn)入了一場(chǎng)注定會(huì)導(dǎo)致災(zāi)難的循環(huán)。
- 傳統(tǒng)團(tuán)隊(duì)(按任務(wù)分解)的結(jié)構(gòu)組成無(wú)法保證系統(tǒng)「概念的完整性」
- 軟件的系統(tǒng)內(nèi)在(根本)困難:復(fù)雜性、一致性、可變性和不可見(jiàn)性。
- 軟件的次要困難: 不能相對(duì)較容易地使用編程語(yǔ)言表達(dá)這些抽象實(shí)體, 在空間和時(shí)間限制內(nèi)將它們映射成機(jī)器語(yǔ)言。
3. 現(xiàn)行的解決辦法
- 定義清晰、具體、可度量的項(xiàng)目里程碑;制定合理的時(shí)間進(jìn)度表,并及時(shí)更新修正。
- 大型項(xiàng)目的每一個(gè)部分由一個(gè)團(tuán)隊(duì)解決,但是該隊(duì)伍以類(lèi)似外科手術(shù)的方式建立,而并非一擁而上。也就是說(shuō), 同每個(gè)成員截取問(wèn)題某個(gè)部分的做法相反, 由一個(gè)人來(lái)進(jìn)行問(wèn)題的分解, 其他人給予他所需要的支持,以提高效率和生產(chǎn)力。具體成員的職責(zé)見(jiàn)文末「《人月神話(huà)》原文摘要」
- 系統(tǒng)設(shè)計(jì)中,概念完整性應(yīng)該是最重要的考慮因素,也就是說(shuō)由團(tuán)隊(duì)中的外科醫(yī)生或者非常少數(shù)互有默契的人員來(lái)實(shí)現(xiàn)。 這可以一定程度上盡量規(guī)避問(wèn)題的出現(xiàn)。
- 保證交流和交流的結(jié)果--組織
- 必備的文檔手冊(cè)和更新機(jī)制
- 各種形式的會(huì)議
- 工具的合理利用,包括「高級(jí)語(yǔ)言」和「交互式編程」。
- 建立軟件系統(tǒng)開(kāi)發(fā)中的「實(shí)驗(yàn)性工廠」:化學(xué)工程師很早就認(rèn)識(shí)到, 在實(shí)驗(yàn)室可以進(jìn)行的反應(yīng)過(guò)程, 并不能在工廠中一步實(shí)現(xiàn)。一個(gè)被稱(chēng)為“實(shí)驗(yàn)性工廠”的中間步驟是非常必要的,它會(huì)為提高產(chǎn)量和在缺乏保護(hù)的環(huán)境下運(yùn)作提供寶貴經(jīng)驗(yàn)。
4. 結(jié)論
「沒(méi)有銀彈」:沒(méi)有任何技術(shù)或管理上的進(jìn)展, 能夠獨(dú)立地許諾十年內(nèi)使軟件系統(tǒng)項(xiàng)目生產(chǎn)率、 可靠性或簡(jiǎn)潔性獲得數(shù)量級(jí)上的進(jìn)步。
軟件工程的焦油坑在將來(lái)很長(zhǎng)一段時(shí)間內(nèi)會(huì)繼續(xù)地使人們舉步維艱,無(wú)法自拔。只能期待人們?cè)诹λ芗暗幕蛘邉倓偝搅λ芗暗姆秶鷥?nèi)進(jìn)行探索和嘗試。這個(gè)復(fù)雜的行業(yè)需要: 進(jìn)行持續(xù)的發(fā)展; 學(xué)習(xí)使用更大的要素來(lái)開(kāi)發(fā); 新工具的最佳使用; 經(jīng)論證的管理方法的最佳應(yīng)用; 良好判斷的自由發(fā)揮; 以及能夠使我們認(rèn)識(shí)到自己不足和容易犯錯(cuò)的——上帝所賜予的謙卑。
作為軟件行業(yè)從業(yè)者中的一員,更準(zhǔn)確的說(shuō)是作為一名開(kāi)發(fā)人員,我們需要學(xué)習(xí)的不僅僅是學(xué)習(xí)開(kāi)發(fā)相關(guān)的技術(shù),更需要全面性的去了解和學(xué)習(xí)軟件工程,這將有助于我們建立全面系統(tǒng)的認(rèn)知。在工作過(guò)程中也應(yīng)該時(shí)刻注意到焦油坑帶來(lái)的束縛,去思考未來(lái)軟件工程的更多可能的出路。
還有一點(diǎn)必須承認(rèn),由于受限于自身的經(jīng)驗(yàn)不足,以及本書(shū)部分翻譯上的生硬,有一部分的內(nèi)容我并不能完全理解。不過(guò)慶幸的是即便如此書(shū)中的觀點(diǎn)已然給予我關(guān)于軟件工程更宏觀的認(rèn)識(shí),在以后的工作學(xué)習(xí)中必然對(duì)我有所裨益,我有理由相信隨著自身能力和各方面經(jīng)驗(yàn)的積累,我將獲得更深層次的認(rèn)知。
附: