程式設計如打仗:打一槍換一個地方

edithfang發表於2014-11-01



有時候我就是不能認真做事。
       
當然,我走進辦公室,閒逛一會兒,每十秒鐘就看看我的電子郵箱,瀏覽下網頁 ,甚至做一些很腦殘的任務比如支付美國快遞的賬單。但就是進不了寫程式碼的“流動”狀態。
       
這些階段性的沒效率的狀態通常會持續一兩天。但在我作為開發者的職業生涯中曾有好多次連續幾周都不能做好任何事情的經歷。就像他們所說,我沒在“流動”狀態。我腦子沒在工作中,我哪都沒在。
       
每個人都有情緒波動,但對一些人來說比較溫和,對另外一些人可能更明顯甚至不正常。沒效率時期似乎與悲觀情緒有所關聯。
       
這讓我想起那些說人們基本上不能控制他們吃什麼的研究人員,所以任何節食的嘗試都是短期的,他們將始終回到他們的自然體重。也許作為一個軟體開發者當我在工作狀態的時候我真的不能控制自己,我只好接受這些過得比較快和比較慢的階段,並希望這兩者平均起來能產出足夠行數的程式碼,以讓我看起來還對得起這份工作。
       
讓我快瘋掉的是自從我的第一份工作開始就已經意識到,作為一個開發者我通常能保持每天兩到三個小時高效率的工作。當我曾在微軟做暑假實習生的時候,一個同行的實習生告訴我他其實每天只有從12點到5點的時候才投入工作。五個小時,減去午餐時間,他的團隊很喜歡他因為他仍然成功的做到了比普通人做的還多。我曾發現同樣的情況是真實的。當我看到其他人都很辛苦地工作而我每天只需要兩到三個小時高效率的工作時,我甚至感到有點內疚,然而我仍然總是成為團隊裡最有效率的成員之一。這很可能就是Peopleware和XP堅持取消加班和每週嚴格工作40小時的原因吧,他們這麼有把握是因為他們懂得這樣做並不會減少團隊的輸出的道理。
       
但現在並不是以前我只用兩小時就能完成工作的時候了,現在讓我煩惱的是,我做不成任何事情。
       
我已想過這個問題很多次了。我努力回憶我職業生涯中能把大部分工作完成的那個時期。很可能是當微軟把我調進一個美麗、豪華的新辦公室的時候,辦公室有大型的落地窗,能俯瞰開滿了櫻花的美麗的假山庭院。一切都很默契。幾個月來我馬不停蹄地工作著,生產出了Excel Basic的詳細規格(有著令人難以置信的包括一個巨大的物件模型和程式設計環細節的大量有紀念性的論文)。我真的從來沒有停止工作過。當我不得不回到波士頓的MacWorld工作前,我帶著我的膝上型電腦,坐在哈佛商學院的舒適的陽臺上完成了視窗類的文件。
       
一旦你進入到“流動”裝態,想繼續往前走就不那麼難了。我度過的很多天都是這個樣子的:

       (1)開始工作
       (2)檢視電子郵件,閱讀網頁等
       (3)決定可我能得在開始工作前也可以先吃個午飯
       (4)吃完午飯回來
       (5)檢視電子郵件,閱讀網頁等
       (6)最終覺得我必須得開始工作了
       (7)檢視電子郵件,閱讀網頁等
       (8)再次決定我真的必須要開始工作了
       (9)啟動該死的編輯器
       (10)不停地寫程式碼直到我意識到已經下午7:30了
       
在第8步和第9步之間似乎有個漏洞,因為我不是總能跨越這個坎。只有開始工作是唯一困難的事情。一個靜止的物體傾向於保持靜止。我腦中的一些令人難以置信的沉重的東西讓我開始工作變為極為困難,但一旦開始全速前進了,再往前走就不需要任何動力了。就像一個看起來能自己提供動力的山地車之旅,當你第一次開始騎車時要帶動所有的齒輪,很難相信當它開始往前走時還需要什麼動力,然而一旦你開始往前行,就只會覺得毫不費力。


結伴程式設計
 

       
也許這就是高效率的關鍵:馬上開始。也許當結伴程式設計的時候這個會湊效,因為和你的小夥伴當你安排了一個結伴程式設計的計劃時,你們兩個會互相催促對方儘快開始工作。
       
當我還是一名以色列傘兵時,一位將軍停下來給我們發表了一篇關於策略的演講。他告訴我們,在陸戰中只有一個策略:打一槍換一個地方。當你開火時要向著敵人的方向移動。我方火力會迫使敵人低頭隱蔽所以敵人就不能攻擊我們了(這就是戰士們喊“掩護我”的意思,這意味著“朝敵人開火所以他不得不閃避,這樣在我跑過這條街的時候他就不能打我了”,這是很有用的)。換地方能讓你收回佔地並接近敵人,這樣你的子彈就更容易擊中目標了。如果你不動,敵人就會猜到發生了什麼事,這不是一件好事。如果你不開火,敵人就會朝你開火,制約住你。


打一槍“換”一個地方(程式設計是向前衝,地道戰是打游擊)
 

       
我把這個策略記在心裡好長時間了。我發現幾乎每一種軍事策略,從空軍空戰到大規模軍事演習,都是基於“打一槍換一個地方”的理念。再過了十五年後我才意識到“打一槍換一個地方”是怎麼完成你生活中的事情的原則。你必須每天都前進一點點。如果你的程式碼瘸了且還有很多漏洞,沒關係,反正現在也沒人要它。如果你一直在前進,不斷地寫程式碼和修復漏洞,你就擁有了時間上的主動權。當競爭對手向你開火時要小心。難道他們只是想逼你應對他們齊射的子彈,你就不能向前移動麼?
       
想想資料訪問走出微軟策略的歷史吧。ODBC,RDO,DAO,ADO,OLEDB,現在的ADO.NET,所有的都是新的!這些在技術上是必要的麼?每年都TM要重塑資料訪問這是不稱職的設計組的結果?(實際上很可能就是這樣的)但最終的結果剛好掩蓋住了火力。競爭已經沒有選擇,只能把本來要寫新功能的所有時間都耗在移植和保持進度上面。仔細看看軟體領域,做得很好的公司是那些很少依賴大公司、不必耗費開發週期在追趕和重新實現並修復只在Windows XP上出現的漏洞的公司;做的不好的是那些花費太多時間在預測微軟未來發展方向的公司。人們擔心.NET,並決定為.NET重寫整個架構,因為他們不得不這麼做。微軟正在向你開火,這就是火力掩護,所以他們能向前移動而你不能,因為這就是遊戲的規則,小娃娃。你會支援Hailstorm麼?SOAP呢?RDF呢?你支援它是因為你的客戶需要它,或者是因為有人正向你開火時你需要有點回應?大公司的銷售團隊都懂得火力掩護的道理。他們走向客戶說:“好吧,你不必從我們這買產品,從最好的供應商那買吧,但要確保你買的產品支援(XML/SOAP/CDE/J2EE),否則你會被強制購買這些產品。”然後當小公司試圖出售到該賬戶時,他們所聽到的是聽話的CTO們的學舌“你們有J2EE麼?”即使沒有任何銷售量他們也不得不浪費時間用J2EE來構建,並讓其他公司沒有機會脫穎而出。這是一個核取方塊功能,你做它是因為你需要這個核取方塊展示你已經有這個了,但並沒人會用或需要它。這就是火力掩護。
       
打一槍換一個地方,對像我們這樣的小公司來說,意味著兩件事情:你不得不掌握時間的主動權,並且你不得不每天都前進。早晚你都會贏的。我昨天做的工作是把FogBUGZ的配色方案提升了一點點,這就很好啦,因為一直都在變得更好。每天我們的軟體都會越來越好,然後我們就會有越來越多的客戶,這就是最重要的。直到我們發展成甲骨文那麼大規模的公司,我們就不需要去考慮大戰略了,只需要每天早上走進來,莫名其妙就啟動了編輯器。

原文:http://www.joelonsoftware.com/articles/fog0000000339.html

(翻譯:PHP100_Alex)
來自:PHP100
相關閱讀
評論(2)

相關文章