5点钟了。这段代码我已经研究了好几个小时,半天写出一行。这真是一种折磨。有些天里,代码会不由自主的从脑子里溜到我的指尖。可今天不是。
我的任务是往一个类里添加一个新功能。“Easy”,我想。“我写的这个类,现在去扩展它,怎么也不应该太难。”于是,在饱饱的午餐后,我就开始坐下来编程。
开 始一切都很顺利——我有个不错的主意,知道如何将这个新功能放进这个类里。然而,越往细里分析,我开始发现我的妙主意并不是那么好。这个功能需要的数据在 这里无法获取到。我尝试了各种激进的方法,使得这个类混乱不堪,bug横生。修改后的代码的单元测试几乎没有成功通过过。
接下来的几个小时 里我感觉就像是在兔子洞里越掉越深,最后完全认不出自己写的代码。我反复的对比修改后的代码和修改前的原始代码,试图能清楚什么地方出了问题。我的脑子已 经无法理解这段代码为什么能运行起来。已经不知道我要把它改成什么样。情况很快变成了我和计算机之间的一场拳击。“编译呀,该死的,赶快编译!”
于是到了现在,5点钟了——一个小时后就是下班时间。我几乎放弃今天完成这个功能的计划。“不可能了,”我想。“光把这些乱糟糟的代码理清楚就需要1个小时。”
我沮丧的站起来,耷拉着头,慢慢往卫生间走去。我坐在马桶上,深呼吸——就在这时,灵感来了!
灵感女神的宝座
忽然间,我想清楚了一切。代码一下子在涌进了我的脑海。我想清楚了这个类,它的所有功能,它的使用场景。我想清楚了如何把我的功能代码加进去。我想清楚了一切!
解决完生理问题后(洗了手),我跑回办公桌前,开始一阵狂敲代码。我敲键盘的速度赶不上那些不断涌进我脑海的代码的速度。在我的手指的重敲下,键盘看起来要散架。电脑和我不再是敌人,我们是最亲密的战友,是为了一个共同的目标走到一起来。
30分钟后,代码编译成功。所有的单元测试都顺利通过。我完整的按着新功能的需求跑了一遍,所有功能点都按预期运行。“我搞定了这无法完成的任务,我成功了!”
当编码的兴奋劲慢慢消退后,我意识到了一个无法回避的事实:我最高效的编程不是坐在计算机前,而是蹲在马桶上。
退一步海阔天空(From Your Code)
现在,我并不是说马桶具有神奇的代码设计的魔法(虽然我承认它是一个伟大的发明)。然而,我要说的是,不论你是要完成多么重大或多么微不足道的编程任务,从电脑前走开,从一个更高的层面思考问题,你的效率至少会提高10倍。不论是去卫生间,还是去公园走一走,或在办公室休息区休息一会儿,远离你的电脑屏幕,这能清醒你的大脑,让你推开树木看到森林。
很多程序员舍不得离开他们的电脑桌。他们认为时间没有花在IDE上都是浪费,担心被别人说不努力工作。“为什么你不在工位上编码!?等着扣薪水吧,”项目经理会这样说。
我 认为,这种逻辑是愚蠢的,是反效率的。程序员不是雇来坐在桌边的,或雇来盯着屏幕的,甚至雇来写代码的。这些只是程序员达到他们最终目的的过程,而真正的 目标是:为最终用户开发功能。如果我们要是能在远离电脑桌的情况下可以更快速更高效的开发出这些功能,那何乐而不为呢?
总之,在编程时别忘了充分利用马桶。
[英文原文:Programming on the Toilet ]