英文原文:programming on the toilet
现在是下午 5 点,我已经在同一处代码耗了几个小时了,为了完成一个功能的实现琢磨每一行代码。这是一个备受折磨的过程。有时候,代码会自然而然的从大脑中流到我的指尖上,这次却不然。
我一直负责增加新的功能到一个类。“简单”,我想,“我先写出这个类,搞清楚如何扩展它应该不是难事。”于是,美味的午餐之后,我坐下来开始编码。
事情开始很顺利——我有了一个模糊的想法,关于新的功能如何来适应这个类。但是,随着我的实现越加深入,我就越加意识到我模糊的想法远远不够。类的方法需要访问那些没有访问权限的数据。我不停地创建各种边界用例,把这个类弄得非常的脆弱、漏洞百出。更重要的是,当我运行我的新的代码的时候,单元测试总是通不过。
在接下来的几个小时内,我在这样的困境中越陷越深,直到后来,我几乎连自己的代码都看不懂了。我不停地查看我本地代码和原始代码的差异,想找出我做了哪些修改。我已经搞不懂代码是如何工作的了,也不知道我期望它怎么做。事情很快演变成我和电脑之间的一场战争。“只要编译通过,你这该死的,编译!”
就这样直到现在,下午 5 点了——还有一个小时我就要回家了。我几乎放弃了在今天完成这项功能的打算。“不可能完成了”我想,“只是清理这些混乱的代码就要花费我一个小时!”
我从电脑桌旁站起来,情绪低落,低着头,前往洗手间。我坐在马桶上,深吸了一口气——那就是我灵光乍现的时刻!
灵感的宝座
在马桶上的一瞬间, 我什么都明白了。代码飞速的闪现在我脑海中。我可以看见那个类,以及它所有的功能和用例。我可以清楚地看到在哪里添加代码。我全都能看见!
我方便完后(回去工作之前先洗手!)跑回电脑桌前开始敲代码。代码从我的大脑中奔腾而出,我手指上的速度完全跟不上这种速度。当我用力敲击键打,键盘都开始扛不住了。计算机和我不再是敌人了——我们是最亲近的同盟,为了一个共同的目标而努力。
30 分钟过后,代码编译成功了。所有的单元测试都通过了。我遍历完新功能的需求列表,其中的每一项都按预期运行着。“我做到了不可能的事,我完成了!”
当我从编程的高兴劲儿中静下来,我领悟到一个简单的真理:我编程最有效率的时候不是在键盘面前,而是在马桶上。
后退一步
现在,我并不是在说马桶有某种构建代码的魔力(当然我确信它们是伟大的发明)。不过,我想要说的是如果从你的电脑前退一步,从一个更高的角度看待问题,即使是最复杂琐碎的任务也会容易 10 倍。无论是去一趟洗手间,还是去公园走走,或者仅仅是在你的办公室坐一会儿,只要暂时离开你的电脑屏幕,都能够清醒你的头脑,让你更全面地看问题。
许多程序员不愿意离开他们的电脑桌。他们觉得离开 IDE 时间会浪费掉,或者他们会被瞧不起。“他为什么不在工作岗位上?!准备着降职吧。”他们的经理会说。
我认为这个逻辑完全错误,并且只会适得其反。程序员的职责并不是坐在电脑桌前,或者盯着屏幕,甚至也不是写代码。这些仅仅是通往最终目的的基本步骤:为最终用户开发好的功能。如果离开你的电脑桌可以使你更快速高效地开发那样的功能,那这正是你应该做的。
总之:别忘记在敲代码的时候上洗手间一趟。
翻译: 伯乐在线 - 冯钧
译文链接: http://blog.jobbole.com/66416/