天天看點

蹲在馬桶上程式設計

蹲在馬桶上程式設計

5點鐘了。這段代碼我已經研究了好幾個小時,半天寫出一行。這真是一種折磨。有些天裡,代碼會不由自主的從腦子裡溜到我的指尖。可今天不是。

我的任務是往一個類裡添加一個新功能。“easy”,我想。“我寫的這個類,現在去擴充它,怎麼也不應該太難。”于是,在飽飽的午餐後,我就開始坐下來程式設計。

開 始一切都很順利——我有個不錯的主意,知道如何将這個新功能放進這個類裡。然而,越往細裡分析,我開始發現我的妙主意并不是那麼好。這個功能需要的資料在 這裡無法擷取到。我嘗試了各種激進的方法,使得這個類混亂不堪,bug橫生。修改後的代碼的單元測試幾乎沒有成功通過過。

接下來的幾個小時 裡我感覺就像是在兔子洞裡越掉越深,最後完全認不出自己寫的代碼。我反複的對比修改後的代碼和修改前的原始代碼,試圖能清楚什麼地方出了問題。我的腦子已 經無法了解這段代碼為什麼能運作起來。已經不知道我要把它改成什麼樣。情況很快變成了我和計算機之間的一場拳擊。“編譯呀,該死的,趕快編譯!”

于是到了現在,5點鐘了——一個小時後就是下班時間。我幾乎放棄今天完成這個功能的計劃。“不可能了,”我想。“光把這些亂糟糟的代碼理清楚就需要1個小時。”

我沮喪的站起來,耷拉着頭,慢慢往衛生間走去。我坐在馬桶上,深呼吸——就在這時,靈感來了!

靈感女神的寶座

忽然間,我想清楚了一切。代碼一下子在湧進了我的腦海。我想清楚了這個類,它的所有功能,它的使用場景。我想清楚了如何把我的功能代碼加進去。我想清楚了一切!

解決完生理問題後(洗了手),我跑回辦公桌前,開始一陣狂敲代碼。我敲鍵盤的速度趕不上那些不斷湧進我腦海的代碼的速度。在我的手指的重敲下,鍵盤看起來要散架。電腦和我不再是敵人,我們是最親密的戰友,是為了一個共同的目标走到一起來。

30分鐘後,代碼編譯成功。所有的單元測試都順利通過。我完整的按着新功能的需求跑了一遍,所有功能點都按預期運作。“我搞定了這無法完成的任務,我成功了!”

當編碼的興奮勁慢慢消退後,我意識到了一個無法回避的事實:我最高效的程式設計不是坐在計算機前,而是蹲在馬桶上。

退一步海闊天空(from your code)

現在,我并不是說馬桶具有神奇的代碼設計的魔法(雖然我承認它是一個偉大的發明)。然而,我要說的是,不論你是要完成多麼重大或多麼微不足道的程式設計任務,從電腦前走開,從一個更高的層面思考問題,你的效率至少會提高10倍。不論是去衛生間,還是去公園走一走,或在辦公室休息區休息一會兒,遠離你的電腦螢幕,這能清醒你的大腦,讓你推開樹木看到森林。

很多程式員舍不得離開他們的電腦桌。他們認為時間沒有花在ide上都是浪費,擔心被别人說不努力工作。“為什麼你不在工位上編碼!?等着扣薪水吧,”項目經理會這樣說。

我 認為,這種邏輯是愚蠢的,是反效率的。程式員不是雇來坐在桌邊的,或雇來盯着螢幕的,甚至雇來寫代碼的。這些隻是程式員達到他們最終目的的過程,而真正的 目标是:為最終使用者開發功能。如果我們要是能在遠離電腦桌的情況下可以更快速更高效的開發出這些功能,那何樂而不為呢?

總之,在程式設計時别忘了充分利用馬桶。

[英文原文:programming on the toilet ]

繼續閱讀