打一槍換一個地方(譯)

vindurriel發表於2014-04-11

原作為Joel Spolsky的博文

打一槍換一個地方

有時候我什麼都幹不成。

我來到辦公室,這轉轉那看看,隔10秒檢視一次郵件,看網頁,做些線上付賬單之類的無腦任務。但就是不能進入到寫程式碼的狀態中。

這種效率低下的狀況,通常會持續一兩天。但在我開發生涯中,曾經有一次連續數週都感覺一事無成。 俗話叫不在狀態。魂不守舍。不著四六。

心情的波動人人都有,有的比較平緩,有的則比較強烈,甚至讓人無法工作。效率低下的狀況有時候確實和低落的心情有關聯。

這讓我想起,研究者們稱人們根本管不住自己的嘴,任何節食的嘗試都無法長久堅持下去,體重總會像溜溜球一樣反彈到正常水平。也許作為軟體開發者的我, 真的沒法掌控自己的工作效率,只能任憑它忽高忽低,如果平均下來能輸出足夠多行的程式碼,保住我的飯碗,那就謝天謝地了。

從第一份開發工作開始,我就發現平均下來,每天只有2到3個小時我是在高效率地寫程式碼,這很讓我抓狂。我在微軟做暑假實習的時候,另一個實習生告訴我他每天真正在工作的時間是12點到5點。5個小時,還不算午餐時間。就是這樣,他的產出還是遠高於平均,同事們都愛死他了。同樣的情況也發生在我身上。看上去其他人時刻都在拼命幹活,而我憑藉每天火力全開地工作2到3個小時,還是成為團隊中最能幹的成員之一。 這也是為什麼人件(Peopleware)和極限程式設計(XP)的佈道者都強調杜絕加班,每週只工作40小時,因為他們確信這麼幹並不會減少團隊的產出。

然而讓我擔心的並不是“只”工作2個小時的日子,而是那些一事無成的日子。

對此我想了好多。我回憶整個生涯中最高產的時候,也許是在微軟剛剛把我的工位換到一個嶄新的辦公室的時候,那個辦公室有很大的觀景窗,外面是一個櫻花盛開的石頭院落,非常漂亮。所有事情都一拍即合。我在幾個月裡寫出了Excel Basic的詳細設計書,用堆積如山的紙,鉅細靡遺地闡述了一個龐大的物件模型以及程式設計環境。我那時像上了發條一樣工作,根本停不下來。期間我不得不去波士頓參加MacWorld大會,我坐在哈佛商學院裡漂亮的臺階上,還在用膝上型電腦撰寫Window類的說明文件。

一旦你進入狀態,保持運轉就很容易了。 我的日常是這樣的 1)上班 2)收郵件,看網頁之類的 3)決定先吃午飯再開始工作也來得及 4)吃完回來 5)收郵件,看網頁之類的 6) 下決心我必須要開始工作了 7) 收郵件,看網頁之類的 8)再次下決心,我真的要開始了 9)開啟該死的編輯器,然後 10)開始馬不停蹄地寫程式碼,回過神來已經晚上7:30了。

在第8和第9步之間的某處似乎有個bug,我不是總能跨越這道鴻溝。對我來說,開始幹活是唯一困難的事情。靜止的物體總會保持靜止。彷彿我腦中有個特別沉重的東西,很難帶著它把速度提起來,而一旦全速前進,讓它繼續運動下去就很輕鬆了。就像一架自行車,裝上了越野所需的沉重灌備,要讓這樣的自行車運轉起來是很費力的,但難以置信的是,一旦騎出速度了,感覺就和騎沒有裝備的自行車幾乎一樣了。

也許這就是高效率的關鍵:只管開始就好了。也許結對程式設計起作用的原因,在於當你和同伴一起程式設計時,彼此會迫使對方開始工作。

我在以色列做過空降兵,那時聽一位將軍講關於戰略的心得。他說,步兵戰中只有一條戰略: 打一槍換一個地方。你一邊朝敵人前進一邊開火。開火迫使對手躲避,這樣他就不能朝你開火。(這也是士兵們喊“掩護我”的意思,即“向敵人開火讓他躲避,這樣我在跑過街道的時候就不會挨槍子兒”。這很管用。)不斷移動讓你步步為營,而離敵人越近,射擊就越有可能打中目標。如果你不動,主動權就在敵人手裡,那可不好。如果你不開火,敵人就會搶先朝你開火,讓你寸步難行。

我一直記得這條戰略,並發現從飛機混戰到大規模的海軍火力部署,幾乎每種軍事戰略都建立在“打一槍換一個地方”這個思想的基礎上。又過了15年,我才意識到這個原則也是生活中的做事法則。你必須每天前進一點點。即使你的程式碼很爛,bug很多,沒人想用,都沒關係。如果你不斷進取,不斷寫程式碼、改bug,那麼時間就會站在你這一邊。當競爭者朝你開火的時候要留神。他們是不是想用干擾射擊讓你疲於應付,無法前行?

想想來自微軟的資料連線技術的歷史吧。 ODBC, RDO, DAO, ADO, OLEDB, 現在又有 ADO.NET。這麼多新技術非用不可嗎?還是說負責資料連線的設計團隊特別無能,每年都不得不推倒重來(還真有可能這是這樣。)? 我認為這更有可能是一種火力壓制。 這迫使競爭者們用全部精力來跟上微軟的節拍,移植現有的功能, 從而沒有時間開發新的功能。 讓我們仔細審視軟體行業的現狀。 凡是做得風生水起的公司, 都是對大公司技術依賴最少的, 不需要把所有開發週期浪費在緊跟並重寫同樣的功能, 或是修復一些只在特定平臺, 如Windows XP下才出現的bug。 而那些做得不好的公司卻時刻像在做占卜一樣, 猜測微軟未來技術的動向。 有些人看到.NET出來了很焦慮, 決心為.NET重寫整個架構, 因為他們認為非這樣不可。 其實是微軟在朝你開火,而且只是干擾射擊, 這樣他們可以前進而你不能, 沒錯你被耍了,老兄。 你想支援Hailstorm嗎?SOAP呢?還有RDF?你做出支援這些技術的決定是因為客戶需要呢,還是隻是由於干擾射擊的存在,被迫做出回應? 大公司的銷售團隊也會玩這一招。 他們跟客戶說:“不買我們的產品沒關係,誰家的產品最好就買誰的。 但是你一定要買支援(XML/SOA/CDE/J2EE)的產品,不然你就out了。” 然後小公司的銷售們就會聽到客戶方的CTO們鸚鵡學舌,“你們有J2EE嗎?” 於是這些公司就把時間浪費在構建J2EE上,即使這並不能讓軟體賣得更好,與此同時,失去了做出自己特色的機會。 這叫做勾選功能,開發它的目的只是為了在旁邊打個勾說你有這個功能,而不管有沒有人會用它,需不需要它。 這就是干擾射擊的影響。

對於我們這樣的小公司,打一槍換一個地方意味著兩件事情。 一是你一定要讓時間站在你這邊,二是必須每天進步。這樣遲早會勝出。 我昨天做的全部工作就是對FogBUGZ的配色做出了小小的改進。挺好。我們的軟體總是在不斷變好。 如果我們的軟體每天都變得越來越好,就會有越來越多的客戶買我們的產品,這才是我最關心的事情。 在公司膨脹到Oracle那個級別之前,我們不需要考慮高大上的戰略。 現階段我們要做的,就是每天早晨來上班,然後想辦法說服自己,儘快開啟編輯器。

相關文章