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