作者: 周思博 (Joel Spolsky)
譯: Siyan Li 李思延
編輯: Paul May 梅普華
2002年1月6日
時(shí)不時(shí)坯屿,總有一陣兒蹬刷,我什么事也干不了砰蠢。
我也去辦公廳,東瞄瞄淋袖,西看看婴削,每十秒鐘查一次電子郵件,網(wǎng)上逛一圈隙券。也許干點(diǎn)兒象付運(yùn)通卡賬單之類不需要大腦的事男应。不過要回去嘩啦嘩啦寫程序,可沒門兒娱仔。
這種不出活的狀態(tài)沐飘,一般通常會(huì)持續(xù)一兩天。在我的軟件開發(fā)生涯中也有過幾個(gè)星期干不了活的時(shí)候牲迫。就像他們說的耐朴,我不在狀態(tài),我進(jìn)入不了情況恩溅,我找不到組織。
人人都有情緒波動(dòng)谓娃,有的人溫和一些脚乡,有的響動(dòng)大點(diǎn)兒,也有的可以整個(gè)亂套滨达。但不管怎么著奶稠,那段不出活期似乎總是跟憂郁有點(diǎn)兒關(guān)系。
我不由得聯(lián)想到那些專家說捡遍,人們基本上控制不了自己吃什么锌订。任何節(jié)食計(jì)劃都長(zhǎng)不了。大家總是悠回各自的正常體重画株。也許作為一個(gè)軟件工程師辆飘,我也不能控制什么時(shí)候最能出活。我唯一希望的就是發(fā)呆那段能被嘩嘩干活那段扯平谓传,最終還能混碗飯吃蜈项。
自從我干上軟件開發(fā)這一行起,我平均每天只有兩三個(gè)的高效時(shí)間续挟。這真讓我頭大紧卒。我在微軟實(shí)習(xí)的時(shí)候,另外一個(gè)實(shí)習(xí)生告訴我诗祸,他每天12點(diǎn)上班跑芳,5點(diǎn)下班轴总。5個(gè)鐘頭還包括午餐時(shí)間,但他的同事還對(duì)他特別滿意博个。因?yàn)樗傻幕畋纫话闳硕级嗷痴痢F鋵?shí)我也一樣。我每天只有兩三個(gè)小時(shí)的高效時(shí)間坡倔∑澹看著別人那么賣力的干,還有點(diǎn)不好意思罪塔。不過呢投蝉,我總是組里出活最多的。由此可見征堪,“人件理論”和極限編程都堅(jiān)持不加班瘩缆,每周只干40小時(shí),還是有點(diǎn)道理的佃蚜。他們都清楚這么做不會(huì)降低一個(gè)小組的生產(chǎn)能力庸娱。
每天只能干兩小時(shí)還沒讓我太擔(dān)心,真讓我擔(dān)心的是完全干不了活的那些天谐算。
我老想這是怎么回事兒熟尉。我努力回憶我出活最多的時(shí)候。估計(jì)是微軟把我搬到一間漂亮的新辦公室的時(shí)候洲脂。舒適豪華的辦公室斤儿,窗外風(fēng)景如畫,窗對(duì)面櫻桃花開滿了石頭堆砌的庭院恐锦。所有的一切都那么恰到好處往果。我馬不停蹄地干好好幾個(gè)月,一口氣把Excel Basic的詳細(xì)設(shè)計(jì)搞定一铅。用象紀(jì)念碑那么高的一疊紙陕贮,詳細(xì)描素了一個(gè)超大型目標(biāo)模型和編程環(huán)境,工作之細(xì)致潘飘,令人難以置信肮之。我自始至終就沒停過手。去波士頓參加MacWorld I的時(shí)候卜录,我都帶著一臺(tái)手提電腦局骤,坐在哈佛商學(xué)院的大陽臺(tái)上把Windows類別的所有文件都寫完了。
按步就班并不難暴凑。通常我一天是這樣度過的:1峦甩,去上班。2,查電子郵件和上網(wǎng)等等凯傲。 3犬辰,考慮是否應(yīng)該吃完中飯?jiān)陂_始干活。4冰单,吃完中飯回來幌缝。5,查電子郵件逛網(wǎng)诫欠。6涵卵,終于決定應(yīng)該開始工作了。7荒叼,查電子郵件逛網(wǎng)轿偎,東瞄瞄,西看看被廓。8坏晦,再次決定確實(shí)應(yīng)該開始開始干活了。9嫁乘,打開該死的編輯器昆婿。10,一直會(huì)些程序?qū)W到晚上7:30蜓斧,寫到忘記時(shí)間仓蛆。
在以上第8步和第9步之間似乎有點(diǎn)缺陷,因?yàn)槲也皇敲看味寄茼樌貓?zhí)行下去挎春。
對(duì)我來說看疙,啟動(dòng)是唯一的難題。靜止物體在不受外力作用的情況下會(huì)保持靜止搂蜓。大腦里有些物質(zhì)的質(zhì)量大得不可思議狼荞,讓它加速太難了辽装。但是只要速度上去了帮碰,在全速行使的情況下,倒不用使什么勁就能繼續(xù)走下去拾积。就象騎著自行車去作一次自費(fèi)橫穿美國(guó)的旅行殉挽,一開始,你根本想象不出要花那么多時(shí)間讓車輪動(dòng)起來拓巧,可是一旦動(dòng)起來了斯碌,讓它們繼續(xù)轉(zhuǎn)就不是一件很難的事了。
也許高效率的關(guān)鍵就:?jiǎn)?dòng)起來肛度。配對(duì)編程法之所以成功傻唾,說不定就靠?jī)蓚€(gè)人在一起,互相強(qiáng)迫對(duì)方啟動(dòng)起來。
我在以色烈當(dāng)傘兵時(shí)冠骄,一次伪煤,有個(gè)將軍來給我們講實(shí)戰(zhàn)戰(zhàn)術(shù)。他告訴我們凛辣,步兵戰(zhàn)術(shù)其實(shí)只有一種:行進(jìn)中開火抱既。你一邊開火一邊朝著敵人沖過去,火力讓敵人抬不起頭來扁誓,不能朝你開火 (當(dāng)一個(gè)軍人喊:“掩護(hù)我”的時(shí)候防泵,他的意思就是“在我沖過街時(shí)候,你朝敵人猛烈開火蝗敢,迫使他貓起來捷泞,沒法朝我開火)。前進(jìn)了前普,你就可以占領(lǐng)陣地肚邢,接近敵人,這樣你的勝算要大的多拭卿。你要是不往前沖骡湖,敵人就有時(shí)間來搞清楚形勢(shì),這可不妙峻厚。你要是不開火响蕴,敵人就要朝你開火,撂倒你惠桃。
我很長(zhǎng)一段時(shí)間都在想著這個(gè)教導(dǎo)浦夷。我想通了不論是戰(zhàn)斗機(jī)空中格斗還是大規(guī)模艦隊(duì)攻擊,大部份軍事戰(zhàn)略戰(zhàn)術(shù)都是以行進(jìn)中開火作為基礎(chǔ)的辜王。我又化了十五年時(shí)間才想通了行進(jìn)中開火也是一個(gè)人在現(xiàn)實(shí)生活中成功的基本原則劈狐。你每天都得往前進(jìn)點(diǎn)兒,不用想你寫的程序怎么差勁呐馆,怎么賣不出去肥缔,只要你不停地寫,不停地改汹来,滴水也能穿石续膳。同時(shí), 要注意你的競(jìng)爭(zhēng)對(duì)手朝你開火收班。他們是不是想讓你全心全意應(yīng)付他們的掃射坟岔,好讓你往前走不了呢?
想想這些年來摔桦,微軟開發(fā)出來的資料存取方法社付,從OBDC,RDO,DAO鸥咖,ADO纪隙,OLEDB直到現(xiàn)在的 ADO,.NET扛或,不停翻新绵咱,技術(shù)上有必要嗎?還是因?yàn)槟莻€(gè)設(shè)計(jì)組實(shí)在蹩腳熙兔,每過他媽一年就得重新發(fā)明一遍資料存取技術(shù)悲伶?(實(shí)際上可能真是)。它最終的效果其實(shí)是一道掩護(hù)火力住涉,讓競(jìng)爭(zhēng)者別無選擇麸锉,只能把本來該用來開發(fā)新功能的寶貴時(shí)間都用來移植和升級(jí)了。仔細(xì)看看軟件行業(yè)舆声,干得好的公司對(duì)那些對(duì)大公司都依賴最少花沉,不用把所有精力都用來為趕潮流而把程序重寫一遍,還得修改那些只有在Windows XP上才會(huì)出現(xiàn)的缺陷媳握。那些花太多時(shí)間去猜測(cè)微軟未來發(fā)展方向的公司碱屁,日子都好過不了。有些人見了.NET就發(fā)怵蛾找,忍不住要按.NET來完全重建自己的體系結(jié)構(gòu)娩脾,以為自己別無選擇。哥門兒打毛,看清楚了柿赊,微軟是在朝你開火呢,而且這只是掩護(hù)火力幻枉。這游戲就是這么玩兒的碰声。這樣一來,他們就可以大步朝前走熬甫,而你卻不能胰挑。你要支持Hailstorm 嗎?SOAP呢罗珍?還有RDF洽腺?是因?yàn)槟愕念櫩托枰潘冢阅阒С炙鼈兏埠担窟€是因?yàn)橛腥顺汩_火而你覺得應(yīng)該還擊?大公司的營(yíng)銷部都懂火力掩護(hù)核无。他們到客人那兒就說扣唱,“你們不一定非買我們的。誰的產(chǎn)品最好您就應(yīng)該買誰的。不過噪沙,我們想提醒您炼彪,在下單之前最好先確認(rèn)他們支持(XML/ SOAP/CDE/J2EE)。否則你們就會(huì)被他們的技術(shù)套牢正歼》恚”。等到小公司去向這個(gè)客戶推銷的時(shí)候局义,那個(gè)聽話的CTO就會(huì)問他們:“你們有J2EE嗎喜爷?”。他們回去就只好不管賣不賣得掉萄唇,都埋頭打造他們的J2EE檩帐。他們也就再?zèng)]有機(jī)會(huì)來展示自己的特色了。其實(shí)另萤,這只不過是個(gè)打勾功能湃密。因?yàn)橛袀€(gè)打勾攔在那兒空著,你就必須有這個(gè)功能四敞。其實(shí)誰都不需要它泛源。這就是火力掩護(hù)。
對(duì)于我這樣的小公司來說忿危,行進(jìn)中開火意味著兩件事俩由。別跟時(shí)間過不去,同時(shí)你還得每天都進(jìn)步癌蚁。天不負(fù)苦心人幻梯,你終有出頭的一天。我昨天花了一天時(shí)間只不過讓FogBUGZ的顏色稍微好看點(diǎn)努释。這不要緊碘梢,只要不停步。最重要的是伐蒂,我們的軟件越來越好煞躬,客人越來越多。在我們達(dá)到Oracle 的規(guī)模之前逸邦,我們并不需要通盤戰(zhàn)略恩沛。我們只需要每天早晨到辦公室來,別多想缕减,打開編程器雷客。
本文最先用英文出版,題為 Fire and Motion