出版時(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)分、閱讀與下載