代碼之道

出版時(shí)間:2009-1  出版社:機(jī)械工業(yè)出版社  作者:Eric Brechner  頁數(shù):192  譯者:陸其明  
Tag標(biāo)簽:無  

前言

長(zhǎng)期以來,我一直在閱讀Eric Brechner以I. M. Wright為筆名撰寫的欄目。當(dāng)我第一次見到作者本人的時(shí)候,我費(fèi)了好大的勁才讓自己相信,我是在跟同一個(gè)人說話。Wright先生非常地自以為是,然而站在我面前說話的人卻那么謙虛、彬彬有禮、非常友好,他看起來更像Clark Kent。(譯者注:Clark Kent是“超人”的名字,他具有超強(qiáng)的本領(lǐng),是一個(gè)虛構(gòu)的超級(jí)英雄,美國漫畫中的經(jīng)典人物。)我很關(guān)注微軟內(nèi)部團(tuán)隊(duì)在軟件開發(fā)的過程中,他們是如何去處理技術(shù)與人際交流之間的關(guān)系的;這類欄目總是我的最愛??吹酱罅康墓緝?nèi)幕被寫了出來,我常常會(huì)感到吃驚——我不知道還有多少不為人知的故事沒有說出來。大型項(xiàng)目中的軟件工程管理者面臨著3個(gè)基本的問題。第一個(gè)是,程序代碼太容易被改變了。跟機(jī)械或土木工程不一樣,它們?cè)诂F(xiàn)有系統(tǒng)上做一次改變總是要付出實(shí)實(shí)在在地拆毀某些東西的代價(jià),而軟件程序的改變只需要敲敲鍵盤就行了。如果對(duì)一座橋的橋墩或一架飛機(jī)的引擎做一個(gè)錯(cuò)誤的結(jié)構(gòu)性更改,由此產(chǎn)生的后果,即使不是專家也很容易就能看出來。然而,如果在一個(gè)現(xiàn)有程序上做修改,對(duì)于其風(fēng)險(xiǎn),即使經(jīng)驗(yàn)豐富的軟件開發(fā)者進(jìn)行了充分的討論,其結(jié)果常常還是錯(cuò)的。建筑隱喻實(shí)際上可以很好地適用于軟件?;诔绦虼a在系統(tǒng)中所處的層次,它們可以被比作為“基礎(chǔ)、框架和裝飾”。“基礎(chǔ)”代碼具有高度的杠桿作用,它們的改動(dòng)常常會(huì)引起嚴(yán)重的連鎖反應(yīng)?!把b飾”代碼比較容易改動(dòng),而且也需要被經(jīng)常改動(dòng)。問題是,累積了幾年的改變之后,復(fù)雜的程序就跟歷經(jīng)過幾次裝修的房子差不多了——電源插座躲到了櫥柜的后面,浴室風(fēng)扇的出風(fēng)口通向了廚房。再做任何改變的話,其副作用或最終的代價(jià)都是很難預(yù)知的。第二個(gè)基本問題是,軟件行業(yè)還太年輕,關(guān)于可復(fù)用組件的正確標(biāo)準(zhǔn)實(shí)際上還沒有被發(fā)現(xiàn)或建立起來。大頭釘是否應(yīng)該放在離開16英寸的地方,以同時(shí)適應(yīng)水平或垂直的4x8英尺的干壘墻或夾板?我們不僅在這類問題上還沒有取得一致意見,甚至我們還沒有決定,是否像大頭釘、干壘墻和夾板這樣的組合更可取,還是我們要去發(fā)明像泥漿、稻草、石頭、鋼鐵和碳化纖維這樣的組合。最后一個(gè)問題實(shí)際上是第二個(gè)問題的另一種表現(xiàn)形式。每個(gè)項(xiàng)目中重復(fù)發(fā)明的軟件組件,它們也被重復(fù)命名了。軟件行業(yè)里對(duì)現(xiàn)有的概念發(fā)明新的名字是很常見的,即使用的名字相同,這些名字也以新的方式被重用。行業(yè)里有一個(gè)心照不宣的秘密:關(guān)于軟件開發(fā)最佳方法的相當(dāng)多的討論,參與的實(shí)際上都是同一群人,只不過他們用了不同的名字,他們甚至對(duì)彼此正在說的東西都沒有一個(gè)哪怕是很朦朧的想法。表面上看來,這些都是很簡(jiǎn)單的問題。建立一些標(biāo)準(zhǔn),然后強(qiáng)制實(shí)行它們。在快速進(jìn)步的大容量、高價(jià)值、低成本的軟件世界里,這可是一個(gè)讓你的業(yè)務(wù)落敗的捷徑。實(shí)際情況是,軟件最大的工程障礙,同時(shí)也是它最大的優(yōu)勢(shì)。無處不在的軟件(運(yùn)行在低成本的個(gè)人電腦和互聯(lián)網(wǎng)上),已經(jīng)使得以驚人的步伐去創(chuàng)新成為可能。隨著微軟的成長(zhǎng),公司已經(jīng)不再能在最佳工程實(shí)踐的研究方面大量地投入,然后經(jīng)過深思熟慮,挑選出其中具有最好質(zhì)量的方法。個(gè)人電腦和Windows的成功,已經(jīng)把公司從按傳統(tǒng)方式做些小項(xiàng)目的形態(tài)轉(zhuǎn)變出來,轉(zhuǎn)而要去譜寫開發(fā)有史以來最龐大、最復(fù)雜軟件的新篇章。為了能夠創(chuàng)建出平衡風(fēng)險(xiǎn)與效率、創(chuàng)新的最佳系統(tǒng),微軟面臨著持續(xù)不斷的掙扎??紤]到我們的一些項(xiàng)目有著極度的復(fù)雜性,這些努力甚至可以稱得上“英勇無畏”。在過去的一段時(shí)間以來,我們已經(jīng)設(shè)置了專員、建立了專門的組織,他們都一心一意、致力于這個(gè)行業(yè)里最困難的事情——“軟件發(fā)布”。我們已經(jīng)學(xué)會(huì)了很多的民間傳說、風(fēng)俗、文化、工具、過程和大拇指規(guī)則(譯者注:Rules of Thumb,是指沒有經(jīng)過科學(xué)實(shí)驗(yàn)、直接從實(shí)踐中總結(jié)出來的方法和規(guī)則;它們?cè)诤芏嗲闆r下都有用,但并不是放之四海皆準(zhǔn)),那些都有助于我們建造和發(fā)布這個(gè)世界上最復(fù)雜的軟件。但與此同時(shí),每天都處理這些問題難免也讓人心驚膽戰(zhàn)、士氣受挫。Eric的欄目正是大家跟我們一起分享和學(xué)習(xí)的極好方式。

內(nèi)容概要

本書以一位微軟內(nèi)部人士的視角,揭示了關(guān)于軟件編碼、軟件測(cè)試和項(xiàng)目管理中的方方面面問題。作者文筆犀利,見解獨(dú)到,對(duì)軟件行業(yè)內(nèi)的很多常見問題提出了解決方案,并提供了最佳實(shí)踐。本書詳細(xì)介紹怎樣提高軟件的質(zhì)量和價(jià)值;切合實(shí)際地管理項(xiàng)目的時(shí)間表、風(fēng)險(xiǎn)和規(guī)范書;為常見的低效率開發(fā)瘦身;應(yīng)用過程改進(jìn)方法,避免固執(zhí)盲從;規(guī)劃一個(gè)成功的、令人滿意的職業(yè)生涯;發(fā)展并管理一個(gè)欣欣向榮的團(tuán)隊(duì)等?! ”緯亲髡邔?duì)過去在軟件行業(yè)6個(gè)不同的公司、28年的工作經(jīng)驗(yàn)的一次總結(jié)?! ”緯粌H是微軟內(nèi)部員工的必讀之書,也同樣適合于軟件行業(yè)內(nèi)其他所有工程師和管理者閱讀。

作者簡(jiǎn)介

Eric Brechner,微軟公司“卓越開發(fā)”部門的總監(jiān),在軟件行業(yè)已經(jīng)積累了20多年的經(jīng)驗(yàn)。他從2001年開始寫“Hard Code”欄目,作為一種資源提供給微軟的員工。自那以后,其觀點(diǎn)欄目在微軟內(nèi)部成千上萬的軟件開發(fā)者之間,激起了無休無止的關(guān)于最佳實(shí)踐的討論——如今,這些觀點(diǎn)

書籍目錄

序簡(jiǎn)介第1章 項(xiàng)目的不當(dāng)管理 2001年6月1日:“開發(fā)時(shí)間表、飛豬和其他幻想”  里氏震級(jí)估計(jì)  風(fēng)險(xiǎn)管理  客戶贏了 2001年10月1日:“竭盡所能:再論開發(fā)時(shí)間表”  軟件工程絕對(duì)是含糊的  相信一半你看到的,別信你聽到的  激勵(lì):不能光靠比薩和啤酒  在日期上沉淪 2002年5月1日:“我們還開心嗎?分診的樂趣”  戰(zhàn)爭(zhēng)是地獄  這不是個(gè)人的事情  分診的5條黃金法則  魔鬼藏在細(xì)節(jié)里面  很難進(jìn)行下去,不是嗎?  謹(jǐn)小慎微 2004年12月1日:“向死亡進(jìn)軍”  暗箭傷人  對(duì)失敗的連禱  轉(zhuǎn)折點(diǎn)  很少有人走過的路 2005年10月1日:“揭露真相”  遭受錯(cuò)覺之苦  拿把叉子扎進(jìn)我的身體  給我個(gè)坦率的回答  給豬抹口紅  看看所有這些傳言  我想知道真相第2章 過程改進(jìn),沒有魔法 2002年9月2日:“六西格瑪?饒了我吧!”  ?。∵@是什么巫術(shù)?!  召集騎兵  在混沌之外建立秩序 2004年10月1日:“精益:比帕斯雀牛肉還好”  任何事情都要適中  儉則不匱  過量生產(chǎn)  走向深處  運(yùn)輸  多余動(dòng)作  等待  過程不當(dāng)  庫存  缺陷  合作共生 2005年4月1日:“客戶不滿”  但愿不知道  太過分,太遲了  敏捷錯(cuò)覺  回退你的步伐  更多用武之地  使用正確的工具  布基膠帶和打包鋼絲  客戶滿意 2006年3月1日:“敏捷子彈”  真理的敵人  撥亂反正  準(zhǔn)備改變了嗎?  讓他說話  你完善我  有點(diǎn)極端  準(zhǔn)備玩橄欖球!  最后你要知道的第3章 根除低下的效率 2001年7月1日:“遲到的規(guī)范書:生活現(xiàn)實(shí)或先天不足”  對(duì)于每次變更,攪動(dòng),攪動(dòng),攪動(dòng)  走廊會(huì)議  委員會(huì)議  規(guī)范書變更請(qǐng)求  預(yù)防是最好的治療 2002年6月1日:“閑置人手”  寶寶做了件極壞的事情  告訴我該做什么  儉則不匱 2004年6月1日:“我們開會(huì)的時(shí)候”  為什么我們會(huì)在這里?  我們正在試圖做什么?  為什么他們會(huì)在這里?  為什么我現(xiàn)在才聽到這個(gè)?  接下去要做什么? 2006年7月1日:“停止寫規(guī)范書,跟功能小組呆在一起”  你失去理智了嗎?  在那里進(jìn)退兩難  特殊要求  我不記得了  堅(jiān)持做一件事情  你準(zhǔn)備好了嗎? 2007年2月1日:“糟糕的規(guī)范書:該指責(zé)誰?”  樹立靶子  溝通分解  保持簡(jiǎn)單容易  變得穩(wěn)健  獲取反饋  集成質(zhì)量檢查  差別在哪?第4章 跨越工種 2002年4月1日:“現(xiàn)代臨時(shí)夫婦?開發(fā)與測(cè)試”  我怎么愛你?讓我來數(shù)一下有多少種方式  必要的邪惡或珍貴的伙伴?  每個(gè)人都要知道自己的弱點(diǎn)  你完善我 2004年7月1日:“感覺性急——測(cè)試者的角色”  高級(jí)保護(hù)  改變一下對(duì)你有好處  黎明時(shí)分  充分利用數(shù)據(jù)  非常酷——我保證你 2005年5月1日:“模糊邏輯——君子之道”  包羅萬象  他們跟我們不一樣  通過安檢  著手去改變  更好地在一起 2005年11月1日:“廢除工種——有什么理由搞專業(yè)化?”  歷經(jīng)未來的日子  考察它的極限  足球是門科學(xué)  兩者之間的距離  你深陷其中第5章 軟件質(zhì)量不是夢(mèng) 2002年3月1日:“你對(duì)你的安全放心嗎?”  小心晃動(dòng)的鐘擺  做正確的事  安全受制于最薄弱環(huán)節(jié)  領(lǐng)導(dǎo)、跟隨或者離開 2002年11月1日:“牛肉在哪里?為什么我們要質(zhì)量”  情況變了  足夠好還不行  艱難的選擇  終于有足夠的時(shí)間了  再檢查一遍  醫(yī)生,治好你自己的病  步步為營  太多疑問? 2004年4月1日:“軟件發(fā)展之路——從手工藝到工程”  工藝制桌子,工程造汽車  其實(shí)你知道  真實(shí)面對(duì)自己  數(shù)字的含義  各人有各人的習(xí)性  大處著想,小處著手  從優(yōu)秀到卓越 2005年7月1日:“復(fù)審一下這個(gè)——審查”  糟糕的混合  完美風(fēng)暴  誰來負(fù)責(zé)?  你有什么想法?  正是這個(gè)形式  孩子,準(zhǔn)備好了嗎?  再檢查一遍  神奇的匯總會(huì)議  審查的訣竅  走上正道 2006年10月1日:“對(duì)質(zhì)量的大膽預(yù)測(cè)”  謎?我不這么認(rèn)為  邪惡雙煞  嫌疑慣犯  你會(huì)喜歡它的  停止賣弄愚蠢  質(zhì)量就是沒有意外第6章 有時(shí)間就做軟件設(shè)計(jì) 2001年9月1日:“錯(cuò)誤處理的災(zāi)難”  恐怖,恐怖  使用異?! e丟棄,用上它! 2002年2月1日:“廚師太多燒不好菜——惟一權(quán)威”  一幅圖片抵得上一千個(gè)字  有人確切知道現(xiàn)在幾點(diǎn)了嗎?  只能有一個(gè)  萬物皆有聯(lián)系 2004年5月1日:“通過設(shè)計(jì)解決”  如何才算足夠好?  設(shè)計(jì)完成  細(xì)節(jié),細(xì)節(jié)  讓我看看你是由什么組成的  當(dāng)心缺口  成功處方 2006年2月1日:“質(zhì)量的另一面——設(shè)計(jì)師和架構(gòu)師”  你必須比那做得更好  改變一下對(duì)你有好處  他這么做不對(duì)  正確的做法  下一次,試試雕塑  關(guān)鍵要有正確的工具  打破這些壁壘 2006年8月1日:“美妙隔離——更好的設(shè)計(jì)”  分解難做  正確的做法  團(tuán)隊(duì)不需要“我”  循序漸進(jìn)  貓狗不分家第7章 職業(yè)生涯歷險(xiǎn) 2001年12月1日:“當(dāng)熟練就是目標(biāo)”  每個(gè)人都要知道自己的弱點(diǎn)  享其成但不坐等  我希望他們尊重我  我們都牽連其中  2002年10月1日:“生活是不公平的——考核曲線”  我不想再逆來順受了  知識(shí)就是力量  關(guān)注業(yè)務(wù)  前進(jìn),讓我快樂  伸出手去接觸某人  有了檸檬?制作檸檬水  改變你的主意  方向盤后面的人 2006年11月1日:“職業(yè)階段中的角色”  一個(gè)人同時(shí)扮演很多角色  搞清楚職業(yè)階段  我是有抱負(fù)的  資歷過高  我是特殊的  只能選一個(gè)  你想成為什么? 2007年5月1日:“讓你自己與世界相連”  你認(rèn)識(shí)的人  我利用習(xí)慣  難道你不好奇?  你得到了我們的感謝  我回頭再找你  歡迎來到這個(gè)世界第8章 自我完善 2002年12月1日:“要么聽我的,要么走人——協(xié)商”  一個(gè)你無法拒絕的方式  逐漸長(zhǎng)大  我腦子里閃過的陰影和兇兆  不要傷害Messenger  皆大歡喜 2005年2月1日:“最好學(xué)會(huì)平衡生活”  平衡是關(guān)鍵  光說不練  我甚至不能平衡我的支票簿  平衡好,一切都好 2005年6月1日:“時(shí)間夠用了”  直接告訴我  免受打擾之苦  找到你的樂園  我們誰也不笨  我們必須共同承擔(dān)  告訴我必須做什么  他還是個(gè)孩子  你應(yīng)該休息一下  這里秩序井然  坦誠相待  大有可為 2005年8月1日:“有理有節(jié)地控制你的上司”  我沒轍了  知彼知己  他們能自我適應(yīng)  把水賣給魚  勢(shì)利的眼睛  付諸行動(dòng)  敢于做夢(mèng) 2006年4月1日:“你在跟我說話嗎?基本溝通”  為我著想一下  告訴我你想要什么  你什么時(shí)候想要?  縮小注意力跨度  就這樣完了? 2007年3月1日:“不只是開放和誠實(shí)”  那不是理由  我會(huì)對(duì)你誠實(shí)  那不容易  他們似乎有個(gè)開放政策  無處隱藏  跟我想的不一樣  走上正道第9章 成為管理者,而不是邪惡的化身 2003年2月1日:“不只是數(shù)字——生產(chǎn)力”  小心你希望得到的東西  扮演一個(gè)角色  卓越開發(fā)者的素質(zhì)  你要做法官 2004年9月1日:“面試流程之外”  抱怨得不到幫助  90%是準(zhǔn)備  那就是問題  白板編譯器  幫招聘專員準(zhǔn)備  再次幫面試官準(zhǔn)備  友情提醒  最后的難題 2004年11月1日:“最難做的工作——績(jī)效不佳者”  你期望什么?  知難而進(jìn)  尋求專業(yè)援助  沒人想失敗  目標(biāo)是成功  無所求,則無所獲  你不會(huì)總能如愿 2005年9月1日:“隨波逐流——人才的保持和流動(dòng)”  我只是想環(huán)球旅行  不錯(cuò)的水壩?  像河水一樣流動(dòng)  新鮮血液  分享就是關(guān)愛  成長(zhǎng)空間  我必須要旅行  放任自流 2005年12月1日:“我能夠管理”  持續(xù)送出的贈(zèng)品  優(yōu)秀就夠了  草率行事  我想要工作  我不是東西  從優(yōu)秀到卓越  我服務(wù)于人 2006年5月1日:“不恰當(dāng)?shù)谋容^——病態(tài)團(tuán)隊(duì)”  想要挑起戰(zhàn)爭(zhēng)  這不是競(jìng)爭(zhēng)  我會(huì)給你些提示  團(tuán)結(jié)在一起第10章 微軟,你會(huì)喜歡它的 2001年11月1日:“我是怎么學(xué)會(huì)停止焦慮并愛上重組的”  沿著巴別塔下來  地獄里的生活  很少有人走過的路  容忍問題還是主動(dòng)去解決? 2005年3月1日:“你的產(chǎn)品單元經(jīng)理是個(gè)游民嗎?”  有計(jì)劃的人  我等不及要去實(shí)施了  魔鬼藏在細(xì)節(jié)里面  道路規(guī)則  回到正確的跑道上 2006年9月1日:“有幸成為Windows的主宰者”  你還有別的要求嗎?  準(zhǔn)備輪船  設(shè)置路線  啟航  導(dǎo)航  責(zé)任  下一代Windows 2006年12月1日:“Google:嚴(yán)重的威脅還是糟糕的拼寫?”  他們步伐踉蹌,我們手舞足蹈  注定要失敗  聰明人需要智能客戶端  保持警惕  一馬當(dāng)先 2007年4月1日:“中年危機(jī)”  你已經(jīng)變了  日子照過,只不過要掌握一點(diǎn)竅門  不輕易冒險(xiǎn)  我認(rèn)為他們還不能勝任  不再年輕了  不要驚慌失措  沒有人是完美的  術(shù)語表

章節(jié)摘錄

第1章 項(xiàng)目的不當(dāng)管理本章內(nèi)容:2001年6月1日:“開發(fā)時(shí)間表、飛豬和其他幻想”2001年10月1日:“竭盡所能:再論開發(fā)時(shí)間表”2002年5月1日:“我們還開心嗎?分診的樂趣”2004年12月1日:“向死亡進(jìn)軍”2005年10月1日:“揭露真相”我的第一個(gè)欄目是在2001年6月刊的微軟內(nèi)部網(wǎng)絡(luò)雜志《Interface》上發(fā)表的。為了進(jìn)入I.M.Wright的人物角色,我需要一個(gè)真正能讓我傷腦筋的主題。而工作的時(shí)間安排和進(jìn)度跟蹤再好不過了。項(xiàng)目管理的偉大神話至今都讓我瘋狂,它的威力遠(yuǎn)勝過其他任何主題。這些神話是:1.人們能夠按期交付被要求實(shí)現(xiàn)的功能(事實(shí)上,項(xiàng)目可以按期交付,但人們按期交付功能的概率不會(huì)高于擊中曲棍球的概率)。2.有經(jīng)驗(yàn)的人估計(jì)日期比較準(zhǔn)(事實(shí)上,他們能夠較好地估計(jì)工作,但不是日期)3.人們必須按照項(xiàng)目預(yù)定的日期按時(shí)交付項(xiàng)目(事實(shí)上,因?yàn)槿藗儾荒馨雌诮桓侗灰髮?shí)現(xiàn)的功能,而你若想你的項(xiàng)目能夠按期交付的話,你必須進(jìn)行管理風(fēng)險(xiǎn)、范圍和通過溝通來減輕人性的弱點(diǎn)可能給項(xiàng)目帶來的負(fù)面影響)。在本章中,I.M.Wright討論了如何通過管理風(fēng)險(xiǎn)、范圍和進(jìn)行溝通,來保障你的項(xiàng)目能夠按時(shí)完成。前兩個(gè)欄目專門討論開發(fā)工作的時(shí)間安排,接著討論善后事宜的管理(我們稱之為“Bu9分診”),最后是一篇對(duì)死亡行軍的聲討,以及一個(gè)關(guān)于人們?yōu)槭裁匆鲋e的哲學(xué)欄目。不得不提的是:通過我在微軟多年的工作經(jīng)歷,以及對(duì)我所在組織的觀察,我發(fā)現(xiàn),項(xiàng)目管理行為和方法在不同規(guī)模和抽象層次的組織中,其表現(xiàn)大不相同。這些層次包括:團(tuán)隊(duì)或功能層次(10人左右),項(xiàng)目層次(50~5000人,他們一起致力于某個(gè)特定的產(chǎn)品發(fā)布),以及產(chǎn)品層次(由高層人員主管的多次產(chǎn)品發(fā)布)。敏捷方法在團(tuán)隊(duì)這個(gè)層次能夠很好地發(fā)揮作用,組織方法在項(xiàng)目這個(gè)層次比較適用,而長(zhǎng)遠(yuǎn)的戰(zhàn)略規(guī)劃方法在產(chǎn)品這個(gè)層次功效顯著。然而,一個(gè)人幾乎不可能同時(shí)在多個(gè)層次上工作。時(shí)間長(zhǎng)河為每個(gè)人將這些經(jīng)歷錯(cuò)開了。當(dāng)一個(gè)人從一個(gè)層次轉(zhuǎn)到另一個(gè)層次工作的時(shí)候,他可能會(huì)想,在以前那個(gè)層次上有效的方法在其他層次上應(yīng)該也同樣有效。災(zāi)難就這么產(chǎn)生了!原因很簡(jiǎn)單:小型、緊湊的群體跟大型、松散的機(jī)構(gòu)在運(yùn)轉(zhuǎn)方式上是不同的。因此要因地制宜,選擇最適合的方法?!狤ric2001年6月1日:“開發(fā)時(shí)間表、飛豬和其他幻想”一匹馬走進(jìn)酒吧,說道:“我能在兩天內(nèi)完成那個(gè)功能。”開發(fā)成本計(jì)算和時(shí)問安排是個(gè)玩笑。相信它的人,要么是傻瓜,要么是初出茅廬的項(xiàng)目經(jīng)理。這不是模糊科學(xué),純粹是杜撰。不錯(cuò),的確有人相信編碼可以被分割成一個(gè)可預(yù)見進(jìn)度和質(zhì)量的可重復(fù)的過程,那我兒子至今還相信牙仙子呢!事實(shí)上,除非你只需編寫10行那么長(zhǎng)的代碼,或者代碼可以直接從以前的工作中復(fù)制過來,否則你不可能知道編碼會(huì)花費(fèi)你多久時(shí)間。作者注:項(xiàng)目經(jīng)理(ProgramManager,PM)有很多職責(zé),其中最主要的是負(fù)責(zé)說明最終用戶體驗(yàn)和跟蹤項(xiàng)目的整體進(jìn)度。這種角色是必要的,但他們常常不討開發(fā)者的喜歡,因而也很少得到開發(fā)者的尊重。真遺憾,項(xiàng)目經(jīng)理是一份很難做好的工作。但是,對(duì)于Wright先生來說,做好項(xiàng)目經(jīng)理仍然是一個(gè)有趣并且容易達(dá)到的目標(biāo)。里氏震級(jí)估計(jì)當(dāng)然,你可以估計(jì),但估計(jì)出來的時(shí)間是成對(duì)數(shù)比例的。有些事情需要花費(fèi)幾個(gè)月,有些事情需要幾周,有些需要幾天,有些需要幾個(gè)小時(shí),有些則只需幾分鐘。而我跟我的部門項(xiàng)目經(jīng)理(GroupProgramManager,GPM)一起給一個(gè)項(xiàng)目做時(shí)間安排時(shí),我們對(duì)每個(gè)功能使用“困難/中等/容易”3個(gè)等級(jí)來評(píng)估。“困難”意味著一個(gè)全職開發(fā)人員需要花費(fèi)整個(gè)里程碑時(shí)間;“中等”意味著一個(gè)全職開發(fā)人員需要花費(fèi)2~3周時(shí)間;“容易”意味著一個(gè)全職開發(fā)人員需要花費(fèi)2~3天時(shí)間。這里沒有中間等級(jí),也不做精確的時(shí)間表。為什么呢?因?yàn)槲覀儌z知道,我們已經(jīng)不可能知道得再精確了。在我的記憶里,除了一系列里程碑、測(cè)試版、正式版發(fā)布等“項(xiàng)目日期”外,我沒有在開發(fā)時(shí)間表上為各個(gè)功能規(guī)定交付日期。一個(gè)好的開發(fā)時(shí)間表應(yīng)該是這樣的——它只是簡(jiǎn)單地列出在每個(gè)里程碑期間需要實(shí)現(xiàn)的功能。那些“必須有”的功能放在第一個(gè)里程碑內(nèi),并且標(biāo)上開發(fā)人員的數(shù)量和“困難/中等/容易”等級(jí);“最好有”的功能放在第二個(gè)里程碑內(nèi);“希望有”的功能放在第三個(gè)里程碑內(nèi)。除此之外的所有功能統(tǒng)統(tǒng)不做。通常情況下,如果到了第三個(gè)里程碑內(nèi)的第二周,你仍然有較多“最好有”、“希望有”的功能沒有實(shí)現(xiàn),這時(shí)候大家都很惶恐,你就要把所有“希望有”的功能扔掉,并且將“最好有”的功能也只保留一半。作者注:里程碑的設(shè)定因團(tuán)隊(duì)而異,也因產(chǎn)品而異。典型情況下,一個(gè)里程碑跨越6~12周不等。它們被認(rèn)為是“項(xiàng)目日期”,是組織(50-5000人)用于同步工作和復(fù)審項(xiàng)目計(jì)劃的時(shí)間點(diǎn)。在里程碑期問,各個(gè)團(tuán)隊(duì)(3-10人)可能使用他們自己的方法來跟蹤具體的工作,比如簡(jiǎn)單的工作條款清單或bum-down圖。風(fēng)險(xiǎn)管理這才是我要引出的主題。開發(fā)成本計(jì)算和時(shí)間安排不能只盯著日期或時(shí)間不放,而應(yīng)該關(guān)注的是風(fēng)險(xiǎn)管理。我們通過軟件的功能和特性來取悅客戶,而不管這個(gè)軟件產(chǎn)品是零售包還是網(wǎng)絡(luò)服務(wù)。這里的風(fēng)險(xiǎn)是,我們否能在合適的時(shí)間、將包含必要的功能集合、并且達(dá)到一定質(zhì)量要求的軟件產(chǎn)品交付到客戶手中。一個(gè)好的開發(fā)時(shí)間表通過優(yōu)先處理關(guān)鍵功能來管理風(fēng)險(xiǎn)。這些關(guān)鍵功能是能讓客戶滿意的最小功能集合。通過“困難/中等/容易”這種評(píng)級(jí)方法,可以判斷出在這個(gè)最小集合中包含哪些功能才是切實(shí)可行的。其他功能按照優(yōu)先順序和一致性原則依次加入。然后你開始編寫代碼,并且選擇功能實(shí)現(xiàn)從困難轉(zhuǎn)向容易,或者從容易轉(zhuǎn)向困難。你通過平衡資源,以降低不能按時(shí)交付高質(zhì)量的“必須有”的功能的風(fēng)險(xiǎn)。其他都是次要的,有則錦上添花,沒有也無妨,況且你還可以設(shè)立不重要、但又不失挑戰(zhàn)性的項(xiàng)目交給實(shí)習(xí)生去做。作者注:具有諷刺意味的是,幾乎所有工程師和經(jīng)理都贊同要優(yōu)先處理“必須有”的功能,但事實(shí)上很少有人真的這么做,因?yàn)椤氨仨氂小钡墓δ芡ǔJ欠ξ兜模热绨惭b、建造、向后兼容性、性能和測(cè)試套件等。然而沒有這些功能,你的產(chǎn)品根本就發(fā)布不了。因此,產(chǎn)品發(fā)布往往是因?yàn)檫@些領(lǐng)域的問題一拖再拖。一定要破除“功能交付日期”的神話,因?yàn)殚_發(fā)人員專注于這種日期的時(shí)候會(huì)破壞風(fēng)險(xiǎn)管理。真正要關(guān)心的日期只能是“項(xiàng)目日期”,比如各個(gè)里程碑、測(cè)試版發(fā)布等,而絕不應(yīng)該是“功能交付日期”。項(xiàng)目日期之間一般都有較長(zhǎng)時(shí)間的間隔,而且不會(huì)很多。管理這幾個(gè)日期要容易得多。如果要求開發(fā)人員在某個(gè)日期之前一定要實(shí)現(xiàn)某個(gè)功能,當(dāng)他們不能按時(shí)完成時(shí)他們往往不會(huì)告訴你,而是對(duì)你說“我正在加緊做……我會(huì)加班……”之類的話。在軟件開發(fā)過程中進(jìn)行風(fēng)險(xiǎn)管理,我們還要特別注意以下幾個(gè)因素:一個(gè)是過度勞累的員工,一個(gè)是匆匆忙忙實(shí)現(xiàn)的、質(zhì)量很差的功能,再一個(gè)就是你花費(fèi)幾周的時(shí)間、動(dòng)用2~3位甚至更多的高級(jí)開發(fā)人員去解決一個(gè)棘手的問題。如果你的開發(fā)人員是在圍繞“功能交付日期”付出大量的努力,而不是幫助你在產(chǎn)品的關(guān)鍵功能上實(shí)現(xiàn)降低風(fēng)險(xiǎn),那么那些時(shí)間真的就被浪費(fèi)了??蛻糈A了一個(gè)產(chǎn)品的成功與否,取決于你對(duì)關(guān)鍵功能的風(fēng)險(xiǎn)管理能力。當(dāng)你給開發(fā)團(tuán)隊(duì)解釋清楚這一點(diǎn)之后,情況就完全不一樣了。當(dāng)然,額外的功能可以錦上添花,但最關(guān)鍵的還是要專注于存在風(fēng)險(xiǎn)的領(lǐng)域,充分溝通,并一起努力把它們解決掉。當(dāng)所有人都理解了目標(biāo),所有人都能比以前工作得更好。每個(gè)艱巨任務(wù)的完成都能鼓舞士氣,即使新員工也會(huì)因?yàn)槌墒斓臎Q議而得到回報(bào)。最終,我們的客戶是大贏家,因?yàn)樗麄兊玫搅苏嬲胍墓δ?,并且產(chǎn)品質(zhì)量也是他們當(dāng)初所期望的,而不是一些勉強(qiáng)實(shí)現(xiàn)的、質(zhì)量不能保證的垃圾。順便提一句,我對(duì)開發(fā)時(shí)間安排的所有論述,對(duì)于測(cè)試時(shí)間安排同樣適用。2001年10月1日:“竭盡所能:再論開發(fā)時(shí)間表”該對(duì)我6月份的那個(gè)欄目(“開發(fā)時(shí)間表、飛豬和其他幻想”)的評(píng)論做出一些回應(yīng)了。其實(shí),大部分評(píng)論都是恭維之詞,這里就不再贅述,因?yàn)闆]有必要再次證明我有多么正確。我這里要做的是,去幫助一下那些對(duì)那個(gè)欄目還在無知中徘徊、但又非常熱情的讀者朋友們。軟件工程絕對(duì)是含糊的我對(duì)關(guān)于不能也不應(yīng)該對(duì)一個(gè)功能的開發(fā)做時(shí)間安排的論斷表示懷疑。文中的論述精確地描繪了“編碼”活動(dòng)。不幸的是,這是初中生干的事情,類似于他們拼湊一個(gè)VB程序來解密信息、相互通信。我們可是軟件工程師啊,不是電腦苦工?!粋€(gè)充滿懷疑的無知者作者注:這是我僅有的一個(gè)“郵件箱”欄目,收集了我對(duì)一些讀者來信的回復(fù)。我還在持續(xù)不斷地收到讀者對(duì)我的欄目的大量“反饋”,但一旦一個(gè)欄目很受歡迎,很多新的話題便會(huì)涌現(xiàn)出來;討論那些新話題的價(jià)值要遠(yuǎn)遠(yuǎn)超過對(duì)一個(gè)老話題郵件的回復(fù)。不管怎么樣,當(dāng)我回顧這個(gè)早期的欄目時(shí),我意識(shí)到,可能Wright先生應(yīng)該再次清空他的郵件箱了。我經(jīng)常聽到這種說法,但請(qǐng)就此打住。銀行經(jīng)理并不管理銀行,軟件工程師也不在軟件上做工程。他們開發(fā)軟件,定制軟件,通常隨意性很大,對(duì)所謂的操作范圍、公差、故障率、壓力條件等沒有明確的度量標(biāo)準(zhǔn)。的確,我們的系統(tǒng)有這些標(biāo)準(zhǔn),但這些標(biāo)準(zhǔn)不是為軟件編碼準(zhǔn)備的。我曾到一個(gè)工程學(xué)校進(jìn)修過。我的朋友當(dāng)中也有很多是電力、基建、航空、機(jī)械等方面的工程師。工程師做的項(xiàng)目,其建造模塊和建筑流程都經(jīng)過了很好的定義和提煉,而且都是可預(yù)測(cè)的。雖然有時(shí)候?yàn)榱诉_(dá)到客戶的要求需要一個(gè)優(yōu)雅的設(shè)計(jì),像寫小說一樣把各個(gè)模塊創(chuàng)造性地組合在一起,但最標(biāo)新立異的建筑也會(huì)符合一定的公差要求,并且具有嚴(yán)格的可控質(zhì)量和功能。但對(duì)軟件開發(fā)來說,情況就不一樣了,盡管很多人竭力想讓這兩者達(dá)成一致。軟件的各個(gè)構(gòu)造模塊太底層了,變數(shù)太多。它們之間的交互影響太難預(yù)料了。像Windows、Office、VisualStudio、MSN等大型軟件系統(tǒng)的復(fù)雜度,已經(jīng)遠(yuǎn)遠(yuǎn)超過了工程的正常范圍,以至于哪怕只在這些系統(tǒng)中做微小的功能改動(dòng),也無法粗略估計(jì)出這些改動(dòng)所引起的“平均失效時(shí)間”。因此無論好壞,還是拋開癡心妄想和崇高理想,回到現(xiàn)實(shí)中來吧!我們必須承認(rèn),我們是開發(fā)者,而不是工程師。我們不能奢望輕易得到傳統(tǒng)的工程領(lǐng)域積累了成百上千、甚至成千上萬年的經(jīng)驗(yàn)才能做到的“可預(yù)測(cè)性”。這無異于我們奢望:不跟電腦說什么,而電腦卻能按照我們心里的想法去做事。我們還辦不到!作者注:在我寫下這個(gè)欄目6年后的今天,微軟已經(jīng)對(duì)其很多軟件進(jìn)行了“平均失效時(shí)間”的評(píng)估。除此之外,把編程當(dāng)作工程看待的各種方法也逐漸出現(xiàn)了。這個(gè)我會(huì)在第5章的“軟件發(fā)展之路”欄目中再次介紹??v然如此,我仍然認(rèn)為本欄目很好地見證了軟件開發(fā)作為一個(gè)領(lǐng)域,他已經(jīng)走過了幼年,但跟他早已長(zhǎng)大成人的傳統(tǒng)工程兄弟相比,他還只是個(gè)10幾歲的小朋友的現(xiàn)狀。

編輯推薦

《代碼之道》是《代碼大全》姊妹篇!是微軟公司內(nèi)部所有工程師的必讀之書!了解未經(jīng)掩飾的真相:怎樣提高軟件的質(zhì)量和價(jià)值,從設(shè)計(jì)到安全;怎樣切合實(shí)際地管理項(xiàng)目的時(shí)間表、風(fēng)險(xiǎn)和規(guī)范書,怎樣為常見的低效率開發(fā)瘦身,怎樣應(yīng)用過程改進(jìn)方法、避免固執(zhí)盲從,怎樣驅(qū)動(dòng)一個(gè)成功的、令你自己滿意的職業(yè)生涯,怎樣不變成暴君、發(fā)展并管理一個(gè)欣欣向榮的團(tuán)隊(duì)!

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    代碼之道 PDF格式下載


用戶評(píng)論 (總計(jì)25條)

 
 

  •   微軟質(zhì)量管理部門資深員工的鮮活觀點(diǎn),值得一讀。
  •   51節(jié)看完了,很不錯(cuò)的書,不像教科書,但是作者的觀點(diǎn)和見解的確讓人啟發(fā),從事軟件行業(yè)的人都可以參考借鑒。很不錯(cuò)的書。推薦大家都去看看。
  •   一本可以提高自身水平的書,能幫你更透切看東西
  •   幫同事買的所以不了解大概的內(nèi)容
  •   以前買的那本丟了,再買一本
  •   由于沒時(shí)間,書剛到。隨意翻了兩頁,應(yīng)該還可以吧
  •   由于沒時(shí)間,書剛到。隨意翻了兩頁,應(yīng)該還可以吧!有機(jī)會(huì)好好讀讀。多讀書,我想是應(yīng)該有益處的吧!開卷有益啊!
  •   書的內(nèi)容不錯(cuò),很有啟發(fā),但是翻譯太糟糕了
  •   書剛到,還沒來得及看,隨手翻了下,是我想看的內(nèi)容。
  •   沒具體看,紙質(zhì)可以,
  •   但是有點(diǎn)冒進(jìn)
  •   書的內(nèi)容比較實(shí)在的反應(yīng)出軟件開發(fā)的各項(xiàng)注意問題,但感覺書里面的語句翻譯得不太好,不夠中國化。
  •   刨去對(duì)微軟的適當(dāng)吹捧,開發(fā)人員和PM都能在這本書里找到有用的信息,比如單元測(cè)試啊,團(tuán)隊(duì)合作啊,我覺得這是一本各取所需的書,可能不是整本書都適合你,個(gè)人覺得開發(fā)人員又兼管理任務(wù)的讀者可以獲得最多的信息量。另外,不是很難懂,適合任何時(shí)候閱讀。
  •   翻譯的確不是非常好,但是總體都能看的懂,畢竟英文同中文差別很大。但書的內(nèi)容質(zhì)量絕對(duì)一流,值得程序員到PM所有的人學(xué)習(xí)。。。
  •   不錯(cuò)的一本書,還在學(xué)習(xí)中,比較深?yuàn)W……但也能理解,支持……
  •   個(gè)人經(jīng)驗(yàn)總結(jié) 要好好體會(huì)
  •   書的內(nèi)容是不錯(cuò)。很有意思。讓人一讀就懂。。
  •   工作人員把發(fā)票搞錯(cuò)了,200多塊的書,給我寄了一張另外公司的發(fā)票。打了N次電話都未能給解決。竟然還要求我把錯(cuò)誤的發(fā)票用快遞給公司寄過去,客服人員態(tài)度很蠻橫。說是通過平信郵寄,至少也未見影,打電話回去確認(rèn),說已經(jīng)郵了。無賴!真是垃圾??头藛T有二個(gè)是北京的,說話還帶臟字。
  •   不錯(cuò),但我還在初學(xué)
  •   不錯(cuò),講了不少東西,值得一看
  •   書的內(nèi)容是非常好,就是翻譯的時(shí)候本地化做的還有瑕疵,一些美式語言的翻譯不夠通俗,理解起來就有些難度。
  •   損有余而補(bǔ)不足。用在這里也未必是不合適。
  •   雖然名字是代碼之道,其實(shí)應(yīng)該是本寫給管理者的書籍,而且里面的內(nèi)容看似有趣其實(shí)很空洞,只能說還行,不合適開發(fā)人員
  •   看了前面幾位的評(píng)論,決定說點(diǎn)公道話。這本書我沒有全部看完,大概看了一半以上。個(gè)人認(rèn)為,無論是開發(fā)人員還是測(cè)試人員,乃至PM,都有必要看看這本書,許多描述和當(dāng)前開發(fā)狀況及其相似,欣慰的是,書中也提出了相應(yīng)的解決方法。所謂“飛豬”,書中有專門的注釋,并不像大家想想的那樣是胡亂翻譯的。
  •   不知道原書質(zhì)量怎么樣。剛買了一本讀了十幾頁之后,覺得翻譯的很不好。
 

250萬本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7