1 編程的樂趣
- 創(chuàng)造事物的純粹快樂
- 快樂來自于開發(fā)對別人有用的東西
- 學(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)試轧抗、測試的次序特性,使得很多任務(wù)無法分解瞬测。軟件開發(fā)的實(shí)踐鸦致,很快會(huì)消耗任務(wù)分解所節(jié)省下來的個(gè)人時(shí)間,并不會(huì)縮短時(shí)間進(jìn)度涣楷。
4 合理的軟件任務(wù)安排
- 1/3 計(jì)劃
- 1/6 編碼
- 1/4 構(gòu)建測試分唾、早起系統(tǒng)測試
- 1/4 系統(tǒng)測試(所有構(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)測試)睦授。
- 首席程序員:需要極高的天分,十年的經(jīng)驗(yàn)摔寨,應(yīng)用數(shù)學(xué)去枷、業(yè)務(wù)數(shù)據(jù)處理,以及其他方面大量的系統(tǒng)和應(yīng)用知識是复。
- 副手:需要相對較少的經(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)品逐步增長的完整性和有效性季惩。
- 測試人員:負(fù)責(zé)設(shè)計(jì)各個(gè)功能的系統(tǒng)測試用例录粱,列出測試的步驟腻格,以及為測試搭建測試平臺。
6 實(shí)現(xiàn)人員的心態(tài)
概念完整性是系統(tǒng)設(shè)計(jì)最重要的考慮因素啥繁,功能與理解上的復(fù)雜程度之比是系統(tǒng)設(shè)計(jì)的最終測試標(biāo)準(zhǔn)荒叶,必須由一個(gè)人或者具有共識的小型團(tuán)隊(duì)來完成。實(shí)現(xiàn)人員的反對意見:
- 文檔中的功能過于繁多输虱,對實(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)高級別的創(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è)叫諾亞的好人,便指示諾亞建造一艘方舟抖所,把妻子梨州、兒子兒媳痕囱,以及一對對動(dòng)物帶上方舟田轧。洪水過后,上帝在天空制造了彩虹鞍恢,與人們約定再也不會(huì)有大洪水傻粘。(“彩虹之約”)
巴別塔
大家商量著建造一座城和一座通天塔每窖,這樣即使再有洪水也不用畏懼∠蚁ぃ“傳揚(yáng)我們的名窒典,免得分散在全地上” vs “贊美耶和華,要傳揚(yáng)他的名”
上帝的回應(yīng)很絕妙:使人類的語言不通稽莉,因?yàn)橹灰蠹夷苡行贤ㄆ僦荆涂梢猿删蜆O大的事情,語言承擔(dān)的角色相當(dāng)重要污秆。上帝不用剿滅建筑工人劈猪,沒有暗殺、監(jiān)視良拼、離間等战得,不動(dòng)用任何武力,只簡簡單單變亂了口音庸推,便能直擊要害常侦。
8 團(tuán)隊(duì)的有效溝通
- 非正式途徑:鼓勵(lì)大量的電話溝通,以達(dá)成對所書寫文檔的共同理解贬媒。
- 項(xiàng)目會(huì)議:團(tuán)隊(duì)一個(gè)接一個(gè)進(jìn)行技術(shù)陳述聋亡,能有效澄清細(xì)小誤解。
- 項(xiàng)目工作手冊:在項(xiàng)目開始階段即準(zhǔn)備好正式的項(xiàng)目工作手冊际乘。
不是獨(dú)立的一篇文檔杀捻,而是對項(xiàng)目一系列產(chǎn)出文檔的組織框架。包括目的蚓庭、外部規(guī)格說明致讥、接口說明、技術(shù)標(biāo)準(zhǔn)器赞、內(nèi)部說明和管理備忘錄垢袱。如果實(shí)現(xiàn)制訂了良好結(jié)構(gòu),可以將后來的文字放置在合適的章節(jié)中港柜,實(shí)時(shí)更新是至關(guān)重要的请契。
在基本語句級別,生產(chǎn)率似乎是固定的夏醉;使用適當(dāng)?shù)母呒壵Z言(相比匯編語言)爽锥,生產(chǎn)率可以提高5倍。高級語言不僅提升了生產(chǎn)率畔柔,還改進(jìn)了調(diào)試:bug更少氯夷,以及更容易尋找。