開火前進 ——識破微軟的齷齪伎倆

風林火山發表於2012-12-06

原文:Fire And Motion

譯者:風林火山

有些時候,我會有一種力不從心的感覺。

進入辦公室後,我當然可以閒逛,每隔一會查收下郵件,讀讀網頁,然後做一些像是支付美國運通賬單的蒜皮小事。但是想要敲打鍵盤寫程式碼卻比登天還難。

通常,這種沒有工作效率的情況會持續一到兩天。但是在我的軟體開發的生涯裡,我遇到過多次幾周內無法完成任何任務的情況。也許像他人說的,我不在狀態,我的心思不在工作上,或者我的腦子被殭屍吃了。 人人都會有情緒波動的時候,只是有的人不明顯,而有的人更明顯些,甚至情緒有時還會失去控制。並且低效的工作時段似乎和情緒波動有所關聯。

這一點讓我想起了一項有趣的調查。此調查中指出,人們基本上無法控制自己的食慾,任何節食的試圖必定是短期的行為,而且最後人們都慢慢的恢復至原來的體重。作為軟體開發者,也許無法控制何時效率才會高。所以我必須接受工作有時高效而有時低效的現實,並且希望綜合起來能夠開發出使我滿意的程式碼量。 令人沮喪的是,從事軟體開發的第一份工作開始就意識到,我平均每天高效程式設計只能持續兩至三個小時。當我還在微軟暑期實習時,一個同期實習生告訴我,他每天只有12點到5點才能進入工作狀態。也就5個小時,再減去吃飯的時間……但是開發組的人還是很喜歡他,因為他平均完成任務比別人還多得多。我發現這種情況確實如此。每當我發現別人看起來整天很忙而我一天只能高效的工作2到3個小時時,些許的內疚感便油然而生。但我仍然是我們組最多產的組員之一。這也許就是Peopleware(人件程式設計)和XP(極限程式設計)的專案組拒絕加班並每週嚴格堅持工作40小時的原因。他們有把握這麼做不會減少團隊的產出。

當然,使我感到焦急地不是每天只能工作兩個小時,而是那些我無法做任何事情的日子。

對於這一點,我思考過很多。我試圖回憶在我事業中什麼時候是完成工作最多並且是最高效的。也許是Microsoft把我調到一個漂亮、豪華的辦公室時。這間辦公室有一張大大的落地窗,從這扇窗向外望去,可以看見漂亮的用石頭堆砌的庭院,庭院中開滿了櫻桃花。每件事情都很順利。我花了好幾個月的時間不停止的琢磨Excel Basic詳細的說明書。這份說明書可以說是具有里程碑意義的文件。為了將其中複雜的物件模型和程式設計環境介紹的細緻全面,我馬不停蹄的足足耗費了可以壘一座山的紙張。這種日子一直持續到我不得不去波士頓參加蘋果開發者大會。大會期間,我還舒適地坐在哈佛商學院的露天陽臺,用隨身的筆記本編寫視窗類。

一旦你進入了狀態,那麼維持這種狀態並不是很艱難。我很多天都是這樣過來的:(1)進入辦公室(2)查收郵件,看看網頁等(3)決定不如在開始工作前吃午飯(4)午飯歸來(5)查收郵件,看看網頁等(6)最終決定我不得不開始工作了(7)查收郵件,看看網頁等(8)再次地決定我不得不開始工作了(9)啟動該死的編輯器(10)不停的編碼直到我意識到已經下午7:30

第八步和第九步有時會出現一點小狀況,因為我不能總是完成其間跳轉。對於我來說,只有起步時是艱難的。因為靜止的物體總是傾向於靜止(也就是物理課上的慣性,譯者注)。我的大腦裡形成了深刻的意識,那就是一開始時加速很艱難,但是一旦全速執行,維持這個狀態便會不費吹灰之力。就像騎車參加自助式越野環行--當你剛踏上自行車轉動齒輪時,很難想象要用多大的力氣才能使它們運轉起來,但一旦運轉起來,自行車便像沒有齒輪一樣易於駕駛。

也許這就是多產高效的金鑰匙:只管開始就行!結對程式設計時也許更有效,因為當你和同伴安排結對程式設計會話時,可以敦促彼此開始程式設計。

當我還是以色列傘兵時,一位將軍來給我們作了一次關於作戰策略的簡短訓話。他告訴我們,在激烈的陸戰戰場上,只有一個策略:開槍衝鋒。邊開火,邊向你的敵人移動。火力會迫使他低頭,以便不被子彈擊中。(這就是士兵大喊“掩護我”的意圖:朝我們的敵人開火,以讓他不能在我穿過街道時向我射擊。這種策略很實用)。衝鋒可以奪取敵人的陣地,還可以靠近你的敵人提高子彈命中的概率。如果你不移動位置,那麼敵人就控制戰局使你陷入被動。如果你不開火,那麼敵人就會朝你射擊阻止你前進。

我一直記著這一點,而且我發現各種各樣的軍事戰略,從空軍混戰到大型的海軍演習,都是基於射擊前進。大約又經過了15年,我意識到射擊前進同樣適用於日常生活。即使程式碼爛到別人嗤之以鼻的程度,你每天也必須前進一點點。只要堅持不停的寫程式碼和持續的修改錯誤,最終時間會站在你這邊。當競爭對手朝你發飆時,你要格外的留心。是不是他們只是讓你疲於應付而無法前進。

回顧一下微軟推出的資料儲存策略。如ODBC,RDO,DAO,ADO,OLEDB和最近的ADO.NET,它們無疑採用了全新的策略。這些技術都是必須的嗎?一個平庸的設計團隊才會每年都費力不討好的使用新的資料儲存策略(也許他們真的很平庸)。但是結果是這些只是掩護火力。這樣,競爭對手為了不被技術淘汰,不得不花費所有的時間來移植。但同時,也失去 了開發新特性的經歷。仔細研究一下軟體開發領域,那些執行良好的公司都很少依賴大型公司,而且不盲目花費所有時間跟風新技術,也不僅僅的修改只在Windows XP上出的的bug。那些陷入困境的公司都是花費太多時間在分析微軟未來技術走向的企業。微軟發現人們很關注.NET架構,於是決定重新實現整個.NET的架構,而這麼做沒有任何理由。注意!微軟正在狙擊你,重新實現架構只是些掩護火力,以便他們可以順利前進而你不能。這就是遊戲的規則!你的軟體將會支援Hailstorm,SOAP和RDF嗎?你的軟體支援這些是因為使用者真的需要嗎,還是隻是有人朝你開火你覺得不得不反擊?大型公司的銷售團隊很懂得提供火力掩護。他們到客戶那裡,然後告訴客戶:“好吧。你不是必須要從我們這裡購買產品,你完全可以從最好的供應商那裡買。但是你的產品一定要支援這些(XML / SOAP / CDE / J2EE),不然你就別想成功!”然後當一些小公司去推銷同樣的產品時,他們就會聽到沒有主見的CTO的鸚鵡學舌“你們支援J2EE嗎?”再然後,即時還沒有賣出一份產品也無法區分它們的區別,小公司不得不浪費所有的時間去支援J2EE。這是一項複選功能,新增它只是標示你有這個功能,而沒有是使用它,甚至沒有人需要他。可以看出,這只是火力掩護。

開火前進對於像我這種小型公司來說,有兩種意義。必須有充分的時間,每天必須前進。你最終會取得勝利。昨天一整天,我全力去做的只是提升FogBUGZ中顏色方案一點點效能。我們的軟體一天更比一天好,我們的客戶也漸漸增多。這才是至關重要的!直到我們公司到了Oracle的規模,我們就可以不必去想使用什麼巨集偉的戰略了。我們只是每天清晨進入辦公室,在自己喜歡的時候,啟動編輯器。

相關文章