《梦断代码》读后感 - 驱动,责任,交流,远虑
這三篇讀后感原來(lái)發(fā)布在我自己申請(qǐng)的域名 yishan.cc 上面,后來(lái)這個(gè)域名被墻了。
?
?(原文寫(xiě)于2008年12月)
幾個(gè)星期前,我給《現(xiàn)代軟件工程》課的每一個(gè)團(tuán)隊(duì)都發(fā)了一本 《Dreaming In Code》的中文版 《夢(mèng)斷代碼》,要求寫(xiě)讀后感。這本書(shū)講了這樣的故事:一群很有經(jīng)驗(yàn)的代碼牛人在先進(jìn)軟件開(kāi)發(fā)模式的指導(dǎo)下,沒(méi)有資金壓力,在更多大牛的帶領(lǐng)下,原計(jì)劃用一到兩年的時(shí)間開(kāi)發(fā)出一個(gè)備受期待的個(gè)人信息管理軟件(PIM),后來(lái)花了七年時(shí)間才完成這一創(chuàng)舉,但是已經(jīng)無(wú)人喝彩。我是9月份讀的英文版,后來(lái)又翻閱了中文版,也有一些感想如下。
1)驅(qū)動(dòng)
到底是什么驅(qū)動(dòng)程序員和管理人員,測(cè)試人員長(zhǎng)年累月投入到一個(gè)軟件項(xiàng)目中去?
有理論認(rèn)為,傳統(tǒng)的軟件公司用工資,職位,績(jī)效考核等讓一群經(jīng)過(guò)面試和培訓(xùn)的人在嚴(yán)格定義的流程下一起工作(大教堂/Cathedral模式)。其實(shí),用開(kāi)源,社區(qū),共享的模式會(huì)更好(集市/Bazaar模式)也許更好。正如在第26頁(yè)所說(shuō)的 [所有頁(yè)碼都是指英文版]
… it maps an alternate universe for programming in which time is simply less important because the work is cooperative rather than corporate, the workers are all volunteers, and the motivation is fun and ego, not financial reward.? [p26]
這理論聽(tīng)起來(lái)很好,但是我想起了兩個(gè)故事:
1) 美國(guó)的一個(gè)肥皂劇Seinfield里有一集,講了一個(gè)混混Kramer 熱心地加入了一家公司,義務(wù)打工,起初他的口頭幽默和熱情感動(dòng)了團(tuán)隊(duì),領(lǐng)導(dǎo)委以重任,不料Kramer 根本沒(méi)法兒把事情做好。最后領(lǐng)導(dǎo)只好找他談話(huà),Kramer 承認(rèn)自己不行,他說(shuō)- 但是俺是義務(wù)給你們打工的! 領(lǐng)導(dǎo)說(shuō),對(duì),這就是讓我們?yōu)殡y的地方。。。 項(xiàng)目中來(lái)了一位“義務(wù)打工的”,照理說(shuō),對(duì)項(xiàng)目只有幫助,而且別人是“義務(wù)”,你怎么好意思把別人趕走?
2) 我以前在西雅圖的時(shí)候參加過(guò)一個(gè)非營(yíng)利組織,成員們都是有熱情為社區(qū)服務(wù),而且義務(wù)付出。但是后來(lái)有些成員就逐漸找不到了,一些事情也不了了之。 由于大家都是義務(wù)貢獻(xiàn),你沒(méi)法如何要求別人。
在Chandler 項(xiàng)目中,Andy Hertzfeld 就是這樣一個(gè)義務(wù)作貢獻(xiàn)的大牛。但是他也遇到了同樣的"志愿者問(wèn)題" –
They don’t know whether to count on you or not. And because you’re not getting paid, there’s lack of control. [p167]
后來(lái)這位Hertzfeld 也拍拍屁股走人了,大家可以為 fun 和 Ego 一起工作,但是如果fun? 和 ego 都得不到滿(mǎn)足,或者,那motivation 也會(huì)急劇下降。
2)責(zé)任 和驅(qū)動(dòng)緊密相關(guān)的,是責(zé)任 – Accountability.
在 Hard Drive 這本書(shū)中,講了這樣的故事 – 由于Windows 一再拖延,BillG 最后跟 SteveB 說(shuō) – 如果今年下雪之前Windows 還沒(méi)出來(lái),你就別在這兒干了。 書(shū)中沒(méi)有詳細(xì)講 SteveB 回頭來(lái)又和他的團(tuán)隊(duì)講了什么,但是第二天一個(gè)員工背著睡袋進(jìn)駐了辦公室。
很多年以后,Windows Vista 也經(jīng)歷了很長(zhǎng)的拖延,在又一次宣布拖延之后,人們發(fā)現(xiàn) Windows 團(tuán)隊(duì)中一個(gè)赫赫有名的 VP 已經(jīng)卷起鋪蓋走了。
我們回過(guò)頭來(lái)看,在Chandler 項(xiàng)目長(zhǎng)達(dá)7年的拖延中,有沒(méi)有發(fā)生過(guò)各位項(xiàng)目管理者引咎辭職的事? 好像沒(méi)有。 [有不少人離開(kāi),但是沒(méi)有人直接為項(xiàng)目延期負(fù)責(zé)]? 既然我上一次拖延沒(méi)有什么懲罰,那我為什么一定要拼了老命要避免下一次拖延呢?
在傳統(tǒng)意義上的軟件公司,如果項(xiàng)目延期,那項(xiàng)目原計(jì)劃的收入就拿不到,拖延的時(shí)間再長(zhǎng)一些,員工就得走人,否則整個(gè)公司都被拖垮了。在“集市”,社區(qū),共享的模式下,大家都是義務(wù),大家都在玩票,大家都做貢獻(xiàn),但是對(duì)最終項(xiàng)目不直接負(fù)責(zé)任,那到底誰(shuí)負(fù)直接責(zé)任呢?
在《移山之道》 中,我講了下面的例子:
| 阿超:我今天在“頂球”網(wǎng)吧看到大牛他爹在下棋,圍觀者支招的不少,有的說(shuō)上馬,有的說(shuō)拱卒,有的說(shuō)出車(chē)。大牛他爹一會(huì)兒招法就亂了,眼看局勢(shì)不靈了,圍觀者一哄而散,老崔后來(lái)也沒(méi)法,只好認(rèn)輸了。 一個(gè)圍棋國(guó)手在一次重要的對(duì)局后,聽(tīng)到旁觀者對(duì)棋局的進(jìn)程有很多不同的看法,他也沒(méi)有過(guò)多爭(zhēng)辯,只是說(shuō):“無(wú)責(zé)任的旁觀者和有重大責(zé)任的當(dāng)局者的看法自然是不一樣的”。 無(wú)責(zé)任的旁觀者在支招后,如果不靈,他可以面不改色地繼續(xù)支招,甚至可以給另一位對(duì)局者支招,不管最后誰(shuí)輸誰(shuí)贏,旁觀者隨時(shí)都能安心地離開(kāi),回家吃飯。有重大責(zé)任的當(dāng)局者在走了損招或敗招之后,他很可能就要認(rèn)輸下臺(tái),丟掉比賽的獎(jiǎng)金和頭銜。 |
我在清華大學(xué)的這一次《現(xiàn)代軟件工程》課,我發(fā)現(xiàn)有些學(xué)生好像不是特別投入,后來(lái)了解到,由于申請(qǐng)學(xué)校用的GPA只計(jì)算前三年的成績(jī),第四學(xué)年課程的分?jǐn)?shù)就和申請(qǐng)學(xué)校沒(méi)有什么關(guān)系了,所以比較“雞肋”。有一個(gè)同學(xué)說(shuō),如果這門(mén)課是在第三學(xué)期,那許多同學(xué)們會(huì)非常計(jì)較分?jǐn)?shù),排名。現(xiàn)在,只要能過(guò)就可以了。這也許解釋了不少項(xiàng)目中出現(xiàn)了“花最少的努力能過(guò)就行”的心態(tài)。
一個(gè)軟件團(tuán)隊(duì)可以制定出動(dòng)人的遠(yuǎn)景/Vision, 但是如果大家沒(méi)有搞清楚驅(qū)動(dòng)項(xiàng)目的各種因素和每個(gè)角色應(yīng)付的責(zé)任,那Vision只是一句話(huà)而已。
時(shí)間和交流:時(shí)間對(duì)每一個(gè)人都是公平的,對(duì)每一個(gè)軟件項(xiàng)目也是這樣。
nearly all software projects require only 1/6 of their time for the writing of code and fully 1/2 of their schedule for testing and fixing bugs.? But it was rare project manager who actually planned to allocate developers’ time according to such a breakdown. [p17]
書(shū)中援引理論家的話(huà)說(shuō),最高效的軟件團(tuán)隊(duì)規(guī)模應(yīng)該是一個(gè)人,因?yàn)檫@樣就不用交流了。 隨著人數(shù)的增加,依賴(lài)關(guān)系的復(fù)雜,新手,老手員工之間的不同步,交流的成本會(huì)隨著幾何級(jí)數(shù)增加。在這里插播一個(gè)有獎(jiǎng)竟猜:
| 當(dāng)Windows 研發(fā)團(tuán)隊(duì)在開(kāi)發(fā)Windows 2000的時(shí)候,團(tuán)隊(duì)內(nèi)部每天有多少封e-mail 交流? a) 90 b) 900 c) 9,000 d) 90,000 |
對(duì)每一個(gè)團(tuán)隊(duì)成員來(lái)說(shuō),他/她不僅要完成手頭工作,還有報(bào)告自己的進(jìn)展(通過(guò)email 或其他形式),回答別人的問(wèn)題,了解其他人的進(jìn)展。每個(gè)人的時(shí)間都是有限的,那怎么能保證我們?cè)趹?yīng)付所有的交流/溝通之后,能有時(shí)間完成“手頭工作”?
一個(gè)微軟的同事前兩天跟我說(shuō),他們最近沒(méi)寫(xiě)什么代碼,集中精力做“planning” 去了,大家寫(xiě)了很多PowerPoint,改了很多PowerPoint。然后給VP, General Manger 做了兩輪匯報(bào),然后根據(jù)VP們的意見(jiàn)再修改,再匯報(bào)。。。 PowerPoint 的風(fēng)格變得非常專(zhuān)業(yè)和花哨,但是他們?nèi)匀粵](méi)有完成Planning,進(jìn)入實(shí)質(zhì)開(kāi)發(fā)階段。華麗的 PowerPoint 中的每一個(gè)條目,也需要花PM 很多時(shí)間才能寫(xiě)明白,讓VP 了解,同時(shí)也要花一線dev/test 很多時(shí)間才能實(shí)現(xiàn),但是VP,PM 和 Dev/Test 面對(duì)同一個(gè)條目,他們心里想的是同一回事么?
外部交流
在Chandler 項(xiàng)目中,幸運(yùn)的是,他們沒(méi)有這么多VP 要匯報(bào) (真正的VP? –? Al Gore 只露了一個(gè)小臉),但是我注意到他們用于交流的時(shí)間也非常多。例如
Every day the developers shared a chat room via Internet Relay Chat (IRC) [p139]
1 internal and? 4 external email list set up.?
blogs, wiki’s…
這些都是花時(shí)間的!我看到團(tuán)隊(duì)成員還要回復(fù)素未謀面的愛(ài)好者的各種問(wèn)題(例如質(zhì)問(wèn)他們?yōu)楹尾挥媚衬晨蚣?#xff0c;等等),當(dāng)然這種透明度也滿(mǎn)足了很多人的好奇心,開(kāi)源,社區(qū)的優(yōu)點(diǎn)么。。。 另一方面,項(xiàng)目管理人員發(fā)現(xiàn)他們面對(duì)著大量的任務(wù)沒(méi)有時(shí)間完成。就像第一章 Doomed 的開(kāi)篇就說(shuō)到:
John is doomed,? he has 500 hours of work scheduled between now and the next release… [p11]
團(tuán)隊(duì)中其他人也好不到哪里去。那在這種情況下,是花時(shí)間繼續(xù)參加各種討論,blog,提供透明度 (Transparency),滿(mǎn)足大眾的好奇心,還是集中精力把自己“手頭的事” 搞定?我從書(shū)中沒(méi)有看到經(jīng)驗(yàn)豐富的管理人員這時(shí)候采取了什么措施。事實(shí)上,在產(chǎn)品發(fā)布之后,沒(méi)有證據(jù)表明,那些在IRC,Email,BBS 上發(fā)了很多議論的愛(ài)好者未必真正下載并使用你根據(jù)他們的意見(jiàn)開(kāi)發(fā)出來(lái)的軟件。那這么忙于交流是為嘛?!
事實(shí)上,這么多交流和信息并不能幫助人們回答一個(gè)最重要的問(wèn)題 –
What had each programmer accomplished in the past week, and what task was next? [p141]
我的故事 – 在MS Outlook97 發(fā)布之后,網(wǎng)上對(duì)這個(gè)V1 版本有很多意見(jiàn),也有很多期待。 其中很多用戶(hù)在 NewsGroup (新聞組) BBS 上發(fā)表了強(qiáng)烈的建議,要求Outlook 支持直接閱讀 NewsGroup/BBS 的內(nèi)容,當(dāng)時(shí)只有Outlook Express 有這個(gè)功能。Outlook 的開(kāi)發(fā)成員一度認(rèn)為用戶(hù)的要求太強(qiáng)烈了,如果我們沒(méi)有這個(gè)功能,可能V2就會(huì)很不受歡迎 (幾個(gè)dev 已經(jīng)做了一個(gè)初始版本)。 但是大家仔細(xì)分析后發(fā)現(xiàn),在BBS上強(qiáng)烈發(fā)言的,就是那么幾個(gè)人,因?yàn)樗麄兝嫌肂BS,因此他們的需求特別強(qiáng)烈,并且好像聲勢(shì)浩大,但是別的大部分用戶(hù)根本就不上BBS,因此也沒(méi)機(jī)會(huì)表達(dá)意見(jiàn)。所以O(shè)utlook 決定不做 NewsGroup 的功能,一直到現(xiàn)在。
內(nèi)部的交流
除了外部的交流,還有內(nèi)部的交流,隨著一個(gè)人經(jīng)驗(yàn)的增多,會(huì)有很多其他人來(lái)找你,為大大小小的事咨詢(xún)你的意見(jiàn)。然而你自己也有無(wú)數(shù)的任務(wù)要完成,怎么辦?微軟的員工對(duì)這種情況也不陌生,微軟團(tuán)隊(duì)允許一些人 “Go Dark”,他們可以關(guān)起門(mén)自己干活,敲門(mén)不答應(yīng),不回答一般的email,不參加會(huì)議等等。
據(jù)說(shuō)很早以前,BillG 把開(kāi)發(fā)OS/2 API 的任務(wù)交給了一個(gè)牛人,這位前輩接受任務(wù)之后,并沒(méi)有開(kāi)新聞發(fā)布會(huì),建立email distribution list, 或者QQ 群,而是掛了一個(gè)和下面類(lèi)似的牌子在辦公室門(mén)外,把門(mén)一關(guān),一個(gè)人悶頭開(kāi)發(fā)去了。
??????????????? 不要打擾、投喂辦公室里的動(dòng)物
我們知道交流很重要,但是軟件不是在QQ 群中交流出來(lái)的(當(dāng)然,有人在QQ 群中交流別人寫(xiě)好的軟件),而是一些人一行行寫(xiě)出來(lái)的。 這個(gè)過(guò)程需要集中注意力,避免打擾。在一個(gè) “集市” 風(fēng)格, “共享” 的開(kāi)發(fā)氛圍中,如何能保證關(guān)起門(mén)來(lái)開(kāi)發(fā)呢?
遠(yuǎn)慮和近憂(yōu)
Kapor 的團(tuán)隊(duì)看起來(lái)非常重視“遠(yuǎn)景”, 他們似乎沒(méi)有近憂(yōu) – 這也許是致命的。
他們對(duì)于軟件的基本架構(gòu)/infrastructure 非常關(guān)心,例如對(duì)于存儲(chǔ)系統(tǒng),它們提出了下列需求:[p103]
后來(lái)對(duì)于Data Storage,又有如下構(gòu)想:[p109]
非常令人佩服的遠(yuǎn)慮。 如果一個(gè)項(xiàng)目能同時(shí)實(shí)現(xiàn)其中3個(gè)目標(biāo),就已經(jīng)能實(shí)用并吸引客戶(hù),開(kāi)始賺錢(qián)了。 但是Chandler 項(xiàng)目的同志們不滿(mǎn)足于只實(shí)現(xiàn)兩三個(gè),他們要實(shí)現(xiàn)全部5個(gè)夢(mèng)想。
一群牛人在 “沒(méi)有近憂(yōu),只有遠(yuǎn)慮” 的條件下討論問(wèn)題,最后只能議而不決。 在一次次延續(xù)到深夜的討論中,有人感慨 – "How is this night different from all other nights?" //[p110]
沒(méi)有近憂(yōu),或者說(shuō)不用為近憂(yōu)而負(fù)責(zé) – “我們這個(gè)月的目標(biāo)沒(méi)完成不要緊,但是我們的遠(yuǎn)景一定要討論好”。 導(dǎo)致了項(xiàng)目不能收斂 – 一個(gè)項(xiàng)目的一個(gè)里程碑中,不確定的事情應(yīng)該越來(lái)越少,bug 也越來(lái)越少,直到產(chǎn)品發(fā)布。
Making firm technical choices was hard in the absence of a settled design, and settling on a design was hard in the absence of a technical roadmap. [p150 – 151]
正因?yàn)榇蠹覜](méi)有近憂(yōu),所以大家可以繼續(xù)等待,設(shè)計(jì)要等技術(shù)決定后才好做,而技術(shù)的選擇要等設(shè)計(jì)決定后才好開(kāi)始。就這樣,大家折騰到2005年的時(shí)候,他們才從高瞻遠(yuǎn)睹的遠(yuǎn)慮的云端中下來(lái),有了第一個(gè)腳踏實(shí)地的計(jì)劃:
But for the first time, at least, they could see they had a plan grounded in reality, rooted in estimates that … [p232]
Kapor 畢竟是聰明人,很多年以后,他說(shuō)到了教訓(xùn):
We’ve consistently overinvested in infrastructure and design… [p342]
收斂的另一個(gè)特點(diǎn)是 – 做過(guò)了的決定,就要執(zhí)行,不要反復(fù)。事實(shí)上,Chandler 團(tuán)隊(duì)在很多決定上搖擺不定。 架構(gòu)師Hertzfeld 度假回來(lái),發(fā)現(xiàn)他帶領(lǐng)其他同事奮戰(zhàn)一個(gè)夏天得到的 Document Architecture 被扔到一邊,原來(lái) Kapor 決定 “We’ll have to come back and realign things”? [p168]。 如果你是做義務(wù)勞動(dòng)的 Hertzfeld,你還能做下去么?
回到 “遠(yuǎn)景”, 我相信幾乎沒(méi)有合適的解決方案能滿(mǎn)足“遠(yuǎn)景” 中的所有要求,很難找到 “多快好省” 的解決方案(書(shū)中提到 fast|cheap|good 不能兼得,這也是MSF 中 time | resource | feature 三個(gè)元素的矛盾)。但是往往存在若干方案,從不同的角度逼近最優(yōu),但是有各自令人討厭的缺點(diǎn)。我們能否有智慧來(lái)選擇這樣一個(gè)方案,把近憂(yōu),遠(yuǎn)慮都慢慢解決?
我自己在微軟正在做一個(gè)創(chuàng)新項(xiàng)目,前幾天一位加入這個(gè)項(xiàng)目不久的優(yōu)秀的開(kāi)發(fā)人員對(duì)我說(shuō),我們?nèi)ツ暝O(shè)計(jì)的數(shù)據(jù)庫(kù)問(wèn)題太多了,如果我們?cè)缇拖裎疫@樣設(shè)計(jì),估計(jì)會(huì)好很多。我不是數(shù)據(jù)庫(kù)的專(zhuān)家,我只能對(duì)他說(shuō),如果我們當(dāng)時(shí)堅(jiān)持要做到今天這樣才發(fā)布,這個(gè)項(xiàng)目也許就做不到今天了。
換句話(huà)說(shuō),正是因?yàn)樵缙谀切┎煌昝?#xff0c;但是及時(shí)的設(shè)計(jì),讓后來(lái)者有挑剔這些不完美的奢侈機(jī)會(huì)。
我們每個(gè)人在使用這些不完美的軟件(Windows, Outlook, 甚至Linux)的時(shí)候,都應(yīng)該感謝當(dāng)初設(shè)計(jì)者做出了正確決定,而那些堅(jiān)持完美設(shè)計(jì)遠(yuǎn)景的項(xiàng)目,它們都到哪去了?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的《梦断代码》读后感 - 驱动,责任,交流,远虑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php oci 11g.dll下载,Or
- 下一篇: 现代软件工程 教学计划 适应两种难度和