在馬桶上編程
英文原文: programming on the toilet
現在是下午 5 點,我已經在同一處代碼耗了幾個小時了,為了完成一個功能的實現琢磨每一行代碼。這是一個備受折磨的過程。有時候,代碼會自然而然的從大腦中流到我的指尖上,這次卻不然。
我一直負責增加新的功能到一個類。“簡單”,我想,“我先寫出這個類,搞清楚如何擴展它應該不是難事。”于是,美味的午餐之后,我坐下來開始編碼。
事情開始很順利——我有了一個模糊的想法,關于新的功能如何來適應這個類。但是,隨著我的實現越加深入,我就越加意識到我模糊的想法遠遠不夠。 類的方法需要訪問那些沒有訪問權限的數據。我不停地創建各種邊界用例,把這個類弄得非常的脆弱、漏洞百出。更重要的是,當我運行我的新的代碼的時候,單元 測試總是通不過。
在接下來的幾個小時內,我在這樣的困境中越陷越深,直到后來,我幾乎連自己的代碼都看不懂了。我不停地查看我本地代碼和原始代碼的差異,想找出 我做了哪些修改。我已經搞不懂代碼是如何工作的了,也不知道我期望它怎么做。事情很快演變成我和電腦之間的一場戰爭。“只要編譯通過,你這該死的,編 譯!”
就這樣直到現在,下午 5 點了——還有一個小時我就要回家了。我幾乎放棄了在今天完成這項功能的打算。“不可能完成了”我想,“只是清理這些混亂的代碼就要花費我一個小時!”
我從電腦桌旁站起來,情緒低落,低著頭,前往洗手間。我坐在馬桶上,深吸了一口氣——那就是我靈光乍現的時刻!
靈感的寶座
在馬桶上的一瞬間, 我什么都明白了。代碼飛速的閃現在我腦海中。我可以看見那個類,以及它所有的功能和用例。我可以清楚地看到在哪里添加代碼。我全都能看見!
我方便完后(回去工作之前先洗手!)跑回電腦桌前開始敲代碼。代碼從我的大腦中奔騰而出,我手指上的速度完全跟不上這種速度。當我用力敲擊鍵打,鍵盤都開始扛不住了。計算機和我不再是敵人了——我們是最親近的同盟,為了一個共同的目標而努力。
30 分鐘過后,代碼編譯成功了。所有的單元測試都通過了。我遍歷完新功能的需求列表,其中的每一項都按預期運行著。“我做到了不可能的事,我完成了!”
當我從編程的高興勁兒中靜下來,我領悟到一個簡單的真理:我編程最有效率的時候不是在鍵盤面前,而是在馬桶上。
后退一步
現在,我并不是在說馬桶有某種構建代碼的魔力(當然我確信它們是偉大的發明)。不過,我想要說的是如果從你的電腦前退一步,從一個更高的角度看 待問題,即使是最復雜瑣碎的任務也會容易 10 倍。無論是去一趟洗手間,還是去公園走走,或者僅僅是在你的辦公室坐一會兒,只要暫時離開你的電腦屏幕,都能夠清醒你的頭腦,讓你更全面地看問題。
許多程序員不愿意離開他們的電腦桌。他們覺得離開 IDE 時間會浪費掉,或者他們會被瞧不起。“他為什么不在工作崗位上?!準備著降職吧。”他們的經理會說。
我認為這個邏輯完全錯誤,并且只會適得其反。程序員的職責并不是坐在電腦桌前,或者盯著屏幕,甚至也不是寫代碼。這些僅僅是通往最終目的的基本步驟:為最終用戶開發好的功能。如果離開你的電腦桌可以使你更快速高效地開發那樣的功能,那這正是你應該做的。
總之:別忘記在敲代碼的時候上洗手間一趟。
翻譯: 伯樂在線 - 馮鈞
譯文鏈接: http://blog.jobbole.com/66416/