現(xiàn)在是下午5點,我已經(jīng)在同一處代碼耗了幾個小時了,為了完成一個功能的實現(xiàn)琢磨每一行代碼。這是一個備受折磨的過程。有時候,代碼會自然而然的從大腦中流到我的指尖上,這次卻不然。
我一直負(fù)責(zé)增加新的功能到一個類?!昂唵巍?,我想,“我先寫出這個類,搞清楚如何擴(kuò)展它應(yīng)該不是難事?!庇谑牵牢兜奈绮椭?,我坐下來開始編碼。
事情開始很順利——我有了一個模糊的想法,關(guān)于新的功能如何來適應(yīng)這個類。但是,隨著我的實現(xiàn)越加深入,我就越加意識到我模糊的想法遠(yuǎn)遠(yuǎn)不夠。類的方法需要訪問那些沒有訪問權(quán)限的數(shù)據(jù)。我不停地創(chuàng)建各種邊界用例,把這個類弄得非常的脆弱、漏洞百出。更重要的是,當(dāng)我運行我的新的代碼的時候,單元測試總是通不過。
在接下來的幾個小時內(nèi),我在這樣的困境中越陷越深,直到后來,我?guī)缀踹B自己的代碼都看不懂了。我不停地查看我本地代碼和原始代碼的差異,想找出我做了哪些修改。我已經(jīng)搞不懂代碼是如何工作的了,也不知道我期望它怎么做。事情很快演變成我和電腦之間的一場戰(zhàn)爭。“只要編譯通過,你這該死的,編譯!”
就這樣直到現(xiàn)在,下午5點了——還有一個小時我就要回家了。我?guī)缀醴艞壛嗽诮裉焱瓿蛇@項功能的打算。“不可能完成了”我想,“只是清理這些混亂的代碼就要花費我一個小時!”
我從電腦桌旁站起來,情緒低落,低著頭,前往洗手間。我坐在馬桶上,深吸了一口氣——那就是我靈光乍現(xiàn)的時刻!
thinker on the toilet
靈感的寶座
在馬桶上的一瞬間,?我什么都明白了。代碼飛速的閃現(xiàn)在我腦海中。我可以看見那個類,以及它所有的功能和用例。我可以清楚地看到在哪里添加代碼。我全都能看見!
我方便完后(回去工作之前先洗手?。┡芑仉娔X桌前開始敲代碼。代碼從我的大腦中奔騰而出,我手指上的速度完全跟不上這種速度。當(dāng)我用力敲擊鍵打,鍵盤都開始扛不住了。計算機(jī)和我不再是敵人了——我們是最親近的同盟,為了一個共同的目標(biāo)而努力。
30分鐘過后,代碼編譯成功了。所有的單元測試都通過了。我遍歷完新功能的需求列表,其中的每一項都按預(yù)期運行著?!拔易龅搅瞬豢赡艿氖?,我完成了!”
當(dāng)我從編程的高興勁兒中靜下來,我領(lǐng)悟到一個簡單的真理:我編程最有效率的時候不是在鍵盤面前,而是在馬桶上。
后退一步
現(xiàn)在,我并不是在說馬桶有某種構(gòu)建代碼的魔力(當(dāng)然我確信它們是偉大的發(fā)明)。不過,我想要說的是如果從你的電腦前退一步,從一個更高的角度看待問題,即使是最復(fù)雜瑣碎的任務(wù)也會容易10倍。無論是去一趟洗手間,還是去公園走走,或者僅僅是在你的辦公室坐一會兒,只要暫時離開你的電腦屏幕,都能夠清醒你的頭腦,讓你更全面地看問題。
許多程序員不愿意離開他們的電腦桌。他們覺得離開IDE時間會浪費掉,或者他們會被瞧不起?!八麨槭裁床辉诠ぷ鲘徫簧??!準(zhǔn)備著降職吧。”他們的經(jīng)理會說。
我認(rèn)為這個邏輯完全錯誤,并且只會適得其反。程序員的職責(zé)并不是坐在電腦桌前,或者盯著屏幕,甚至也不是寫代碼。這些僅僅是通往最終目的的基本步驟:為最終用戶開發(fā)好的功能。如果離開你的電腦桌可以使你更快速高效地開發(fā)那樣的功能,那這正是你應(yīng)該做的。
總之:別忘記在敲代碼的時候上洗手間一趟。 原文來源:brianslam |
|