作者: 周思博 (Joel Spolsky)
譯: Siyan Li 李思延
編輯: Paul May 梅普華
2002年1月6日
時不時,總有一陣兒,我什么事也干不了。
我也去辦公廳,東瞄瞄,西看看,每十秒鐘查一次電子郵件,網上逛一圈。也許干點兒象付運通卡賬單之類不需要大腦的事。不過要回去嘩啦嘩啦寫程序,可沒門兒。
這種不出活的狀態,一般通常會持續一兩天。在我的軟件開發生涯中也有過幾個星期干不了活的時候。就像他們說的,我不在狀態,我進入不了情況,我找不到組織。
人人都有情緒波動,有的人溫和一些,有的響動大點兒,也有的可以整個亂套。但不管怎么著,那段不出活期似乎總是跟憂郁有點兒關系。
我不由得聯想到那些專家說,人們基本上控制不了自己吃什么。任何節食計劃都長不了。大家總是悠回各自的正常體重。也許作為一個軟件工程師,我也不能控制什么時候最能出活。我唯一希望的就是發呆那段能被嘩嘩干活那段扯平,最終還能混碗飯吃。
自從我干上軟件開發這一行起,我平均每天只有兩三個的高效時間。這真讓我頭大。我在微軟實習的時候,另外一個實習生告訴我,他每天12點上班,5點下班。5個鐘頭還包括午餐時間,但他的同事還對他特別滿意。因為他干的活比一般人都多。其實我也一樣。我每天只有兩三個小時的高效時間。看著別人那么賣力的干,還有點不好意思。不過呢,我總是組里出活最多的。由此可見,“人件理論”和極限編程都堅持不加班,每周只干40小時,還是有點道理的。他們都清楚這么做不會降低一個小組的生產能力。
每天只能干兩小時還沒讓我太擔心,真讓我擔心的是完全干不了活的那些天。
我老想這是怎么回事兒。我努力回憶我出活最多的時候。估計是微軟把我搬到一間漂亮的新辦公室的時候。舒適豪華的辦公室,窗外風景如畫,窗對面櫻桃花開滿了石頭堆砌的庭院。所有的一切都那么恰到好處。我馬不停蹄地干好好幾個月,一口氣把Excel Basic的詳細設計搞定。用象紀念碑那么高的一疊紙,詳細描素了一個超大型目標模型和編程環境,工作之細致,令人難以置信。我自始至終就沒停過手。去波士頓參加MacWorld I的時候,我都帶著一臺手提電腦,坐在哈佛商學院的大陽臺上把Windows類別的所有文件都寫完了。
按步就班并不難。通常我一天是這樣度過的:1,去上班。2,查電子郵件和上網等等。 3,考慮是否應該吃完中飯在開始干活。4,吃完中飯回來。5,查電子郵件逛網。6,終于決定應該開始工作了。7,查電子郵件逛網,東瞄瞄,西看看。8,再次決定確實應該開始開始干活了。9,打開該死的編輯器。10,一直會些程序學到晚上7:30,寫到忘記時間。
在以上第8步和第9步之間似乎有點缺陷,因為我不是每次都能順利地執行下去。
對我來說,啟動是唯一的難題。靜止物體在不受外力作用的情況下會保持靜止。大腦里有些物質的質量大得不可思議,讓它加速太難了。但是只要速度上去了,在全速行使的情況下,倒不用使什么勁就能繼續走下去。就象騎著自行車去作一次自費橫穿美國的旅行,一開始,你根本想象不出要花那么多時間讓車輪動起來,可是一旦動起來了,讓它們繼續轉就不是一件很難的事了。
也許高效率的關鍵就:啟動起來。配對編程法之所以成功,說不定就靠兩個人在一起,互相強迫對方啟動起來。
我在以色烈當傘兵時,一次,有個將軍來給我們講實戰戰術。他告訴我們,步兵戰術其實只有一種:行進中開火。你一邊開火一邊朝著敵人沖過去,火力讓敵人抬不起頭來,不能朝你開火 (當一個軍人喊:“掩護我”的時候,他的意思就是“在我沖過街時候,你朝敵人猛烈開火,迫使他貓起來,沒法朝我開火)。前進了,你就可以占領陣地,接近敵人,這樣你的勝算要大的多。你要是不往前沖,敵人就有時間來搞清楚形勢,這可不妙。你要是不開火,敵人就要朝你開火,撂倒你。
我很長一段時間都在想著這個教導。我想通了不論是戰斗機空中格斗還是大規模艦隊攻擊,大部份軍事戰略戰術都是以行進中開火作為基礎的。我又化了十五年時間才想通了行進中開火也是一個人在現實生活中成功的基本原則。你每天都得往前進點兒,不用想你寫的程序怎么差勁,怎么賣不出去,只要你不停地寫,不停地改,滴水也能穿石。同時, 要注意你的競爭對手朝你開火。他們是不是想讓你全心全意應付他們的掃射,好讓你往前走不了呢?
想想這些年來,微軟開發出來的資料存取方法,從OBDC,RDO,DAO,ADO,OLEDB直到現在的 ADO,.NET,不停翻新,技術上有必要嗎?還是因為那個設計組實在蹩腳,每過他媽一年就得重新發明一遍資料存取技術?(實際上可能真是)。它最終的效果其實是一道掩護火力,讓競爭者別無選擇,只能把本來該用來開發新功能的寶貴時間都用來移植和升級了。仔細看看軟件行業,干得好的公司對那些對大公司都依賴最少,不用把所有精力都用來為趕潮流而把程序重寫一遍,還得修改那些只有在Windows XP上才會出現的缺陷。那些花太多時間去猜測微軟未來發展方向的公司,日子都好過不了。有些人見了.NET就發怵,忍不住要按.NET來完全重建自己的體系結構,以為自己別無選擇。哥門兒,看清楚了,微軟是在朝你開火呢,而且這只是掩護火力。這游戲就是這么玩兒的。這樣一來,他們就可以大步朝前走,而你卻不能。你要支持Hailstorm 嗎?SOAP呢?還有RDF?是因為你的顧客需要,所以你支持它們?還是因為有人朝你開火而你覺得應該還擊?大公司的營銷部都懂火力掩護。他們到客人那兒就說,“你們不一定非買我們的。誰的產品最好您就應該買誰的。不過,我們想提醒您,在下單之前最好先確認他們支持(XML/ SOAP/CDE/J2EE)。否則你們就會被他們的技術套牢。”。等到小公司去向這個客戶推銷的時候,那個聽話的CTO就會問他們:“你們有J2EE嗎?”。他們回去就只好不管賣不賣得掉,都埋頭打造他們的J2EE。他們也就再沒有機會來展示自己的特色了。其實,這只不過是個打勾功能。因為有個打勾攔在那兒空著,你就必須有這個功能。其實誰都不需要它。這就是火力掩護。
對于我這樣的小公司來說,行進中開火意味著兩件事。別跟時間過不去,同時你還得每天都進步。天不負苦心人,你終有出頭的一天。我昨天花了一天時間只不過讓FogBUGZ的顏色稍微好看點。這不要緊,只要不停步。最重要的是,我們的軟件越來越好,客人越來越多。在我們達到Oracle 的規模之前,我們并不需要通盤戰略。我們只需要每天早晨到辦公室來,別多想,打開編程器。
本文最先用英文出版,題為
Fire and Motion??