1 人月神話_part1

1 編程的樂趣

  • 創(chuàng)造事物的純粹快樂
  • 快樂來自于開發(fā)對(duì)別人有用的東西
  • 學(xué)習(xí)的樂趣,來自于工作的非重復(fù)特性
  • 樂趣還來自于工作的介質(zhì)容易駕馭

2 職業(yè)的苦惱

  • 必須追求完美:一點(diǎn)點(diǎn)不匹配都能導(dǎo)致魔術(shù)失效
  • 依賴于其他人設(shè)定目標(biāo),并依靠自己無法控制的程序
  • 調(diào)試和查錯(cuò):伴隨創(chuàng)造的往往是枯燥沉悶的時(shí)間和勞動(dòng)
  • 軟件項(xiàng)目越接近完成,收斂得越慢
  • 產(chǎn)品即將完成的時(shí)候,又有了新的方案

3 人月神話

英文是The Mythical Man-Month。用人月衡量一項(xiàng)工作的規(guī)模,是一個(gè)危險(xiǎn)和帶有欺騙性的神話,因?yàn)樗凳救藛T數(shù)量和時(shí)間是可以相互替換的。

缺乏合理的時(shí)間進(jìn)度是造成項(xiàng)目滯后的最主要原因,比其他所有因素加起來影響還大。成本的確隨開發(fā)產(chǎn)品的人數(shù)和時(shí)間的不同,有很大變化,進(jìn)度卻不是如此。向進(jìn)度落后的項(xiàng)目中增加人手,只會(huì)使進(jìn)度更加落后:從三個(gè)方面增加了項(xiàng)目必要的總體工作量:任務(wù)重新分配本身和所造成的工作中斷;培訓(xùn)新人員;額外的相互溝通。

人類和時(shí)間的互換僅僅適用于以下情況:某個(gè)任務(wù)可以分解給參與人員;子任務(wù)之間不需要相互溝通。調(diào)試、測(cè)試的次序特性,使得很多任務(wù)無法分解。軟件開發(fā)的實(shí)踐,很快會(huì)消耗任務(wù)分解所節(jié)省下來的個(gè)人時(shí)間,并不會(huì)縮短時(shí)間進(jìn)度。

4 合理的軟件任務(wù)安排

  • 1/3 計(jì)劃
  • 1/6 編碼
  • 1/4 構(gòu)建測(cè)試、早起系統(tǒng)測(cè)試
  • 1/4 系統(tǒng)測(cè)試(所有構(gòu)件已完成)

剔除bug的設(shè)計(jì);構(gòu)建單元調(diào)試、系統(tǒng)集成調(diào)試。

5 十人編程

同樣有兩年經(jīng)驗(yàn),而且受到同樣培訓(xùn)的情況下,優(yōu)秀程序員的工作效率是較差程序員的十倍。需要協(xié)作溝通的人員數(shù)量影響著開發(fā)成本,因?yàn)槌杀镜闹饕糠质窍嗷サ臏贤ê徒涣?,以及更正溝通不?dāng)所引起的不良結(jié)果(系統(tǒng)測(cè)試)。

  • 首席程序員:需要極高的天分,十年的經(jīng)驗(yàn),應(yīng)用數(shù)學(xué)、業(yè)務(wù)數(shù)據(jù)處理,以及其他方面大量的系統(tǒng)和應(yīng)用知識(shí)。
  • 副手:需要相對(duì)較少的經(jīng)驗(yàn),某個(gè)功能和接口團(tuán)隊(duì)的代表人,但不承擔(dān)代碼部分的具體開發(fā)職責(zé)。
  • 程序職員:負(fù)責(zé)維護(hù)編程產(chǎn)品庫中所有團(tuán)隊(duì)的技術(shù)記錄,歸檔以前和最新的運(yùn)行情況日志,使用交互式工具來控制產(chǎn)品逐步增長(zhǎng)的完整性和有效性。
  • 測(cè)試人員:負(fù)責(zé)設(shè)計(jì)各個(gè)功能的系統(tǒng)測(cè)試用例,列出測(cè)試的步驟,以及為測(cè)試搭建測(cè)試平臺(tái)。

6 實(shí)現(xiàn)人員的心態(tài)

概念完整性是系統(tǒng)設(shè)計(jì)最重要的考慮因素,功能與理解上的復(fù)雜程度之比是系統(tǒng)設(shè)計(jì)的最終測(cè)試標(biāo)準(zhǔn),必須由一個(gè)人或者具有共識(shí)的小型團(tuán)隊(duì)來完成。實(shí)現(xiàn)人員的反對(duì)意見:

  • 文檔中的功能過于繁多,對(duì)實(shí)際成本考慮的少。
  • 結(jié)構(gòu)師獲得了創(chuàng)造的快樂,這剝奪了實(shí)現(xiàn)人員的創(chuàng)造力。
  • 體系結(jié)構(gòu)團(tuán)隊(duì)緩慢工作時(shí),實(shí)現(xiàn)人員只能空閑地等待。

實(shí)現(xiàn)同樣是一項(xiàng)高級(jí)別的創(chuàng)造性活動(dòng);具體實(shí)現(xiàn)中創(chuàng)造和發(fā)明的機(jī)會(huì),并不會(huì)因?yàn)橹付送獠考夹g(shù)說明而減少,反而創(chuàng)造性活動(dòng)因?yàn)橐?guī)范化會(huì)得到增強(qiáng)。應(yīng)該在文檔完成的時(shí)候,再雇傭編程實(shí)現(xiàn)人員。

體系結(jié)構(gòu)、設(shè)計(jì)實(shí)現(xiàn)、物理實(shí)現(xiàn),許多工作可以同時(shí)開始和并發(fā)地進(jìn)行。

7 巴別塔的失敗

伊甸園

上帝耶和華用七天時(shí)間創(chuàng)造了世間萬物,亞當(dāng)和夏娃赤身躶體地住在伊甸園,所有的動(dòng)物都要聽從亞當(dāng)?shù)闹笓]。但上帝警告說智慧樹上的果子絕不能碰。在一條蛇(撒旦)的引誘下,兩人先后吃了智慧果,被上帝詛咒并趕出了伊甸園,人類于是有了原罪。

諾亞方舟

上帝見到地上充滿罪惡,計(jì)劃用洪水消滅惡人。但他發(fā)現(xiàn)有個(gè)叫諾亞的好人,便指示諾亞建造一艘方舟,把妻子、兒子兒媳,以及一對(duì)對(duì)動(dòng)物帶上方舟。洪水過后,上帝在天空制造了彩虹,與人們約定再也不會(huì)有大洪水。(“彩虹之約”)

巴別塔

大家商量著建造一座城和一座通天塔,這樣即使再有洪水也不用畏懼?!皞鲹P(yáng)我們的名,免得分散在全地上” vs “贊美耶和華,要傳揚(yáng)他的名”

上帝的回應(yīng)很絕妙:使人類的語言不通,因?yàn)橹灰蠹夷苡行贤?,就可以成就極大的事情,語言承擔(dān)的角色相當(dāng)重要。上帝不用剿滅建筑工人,沒有暗殺、監(jiān)視、離間等,不動(dòng)用任何武力,只簡(jiǎn)簡(jiǎn)單單變亂了口音,便能直擊要害。

8 團(tuán)隊(duì)的有效溝通

  • 非正式途徑:鼓勵(lì)大量的電話溝通,以達(dá)成對(duì)所書寫文檔的共同理解。
  • 項(xiàng)目會(huì)議:團(tuán)隊(duì)一個(gè)接一個(gè)進(jìn)行技術(shù)陳述,能有效澄清細(xì)小誤解。
  • 項(xiàng)目工作手冊(cè):在項(xiàng)目開始階段即準(zhǔn)備好正式的項(xiàng)目工作手冊(cè)。

不是獨(dú)立的一篇文檔,而是對(duì)項(xiàng)目一系列產(chǎn)出文檔的組織框架。包括目的、外部規(guī)格說明、接口說明、技術(shù)標(biāo)準(zhǔn)、內(nèi)部說明和管理備忘錄。如果實(shí)現(xiàn)制訂了良好結(jié)構(gòu),可以將后來的文字放置在合適的章節(jié)中,實(shí)時(shí)更新是至關(guān)重要的。

在基本語句級(jí)別,生產(chǎn)率似乎是固定的;使用適當(dāng)?shù)母呒?jí)語言(相比匯編語言),生產(chǎn)率可以提高5倍。高級(jí)語言不僅提升了生產(chǎn)率,還改進(jìn)了調(diào)試:bug更少,以及更容易尋找。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容