现在是下午五点。我已在这段代码上工作了好几个小时,一次一行地琢磨着具体实现方案。这个过程非常痛苦。有时候,代码会从我的大脑中自然地滑落到我的指尖上,可是今天不是这样。

我的任务是为这个类增加一个新的功能。我认为这简直太『容易』了。『这个类就是我写的,因此,想出一个扩展它的办法应该毫无难度。』 就这样,在我享用完美味的午餐之后,便坐了下来开始着手编程。

刚开始一切进展顺利 - 对于新的功能如何融入这个类,我已有一个大致思路。然而,随着实现工作的越加具体和深入,我发觉自己原本模糊的思路越来越不完善。函数想要访问的数据根本无法获取。我早先设计的一个左右边界测试,也使得这个类变得相当脆弱且极易出错。当我在此基础上增添新的功能时,单元测试总是失败。

在接下来的几个小时里,我就像是掉进了一个深不可测的兔子洞里,甚至到最后,我几乎连自己编写的代码都无法辨识。我在本地代码与原始代码之间来回切换,试图找出它们之间的差异以及我究竟修改了哪些地方。在我的大脑中,这些代码的运行机制,或者说,我希望代码如何运行的基本心理模型早已不复存在。事情似乎已经堕落为我与计算机之间的战争。『赶快编译,该死的,编译!』

现在已是下午五点 - 仅剩一个小时就要回家了。我今天的工作只剩下这个亟待完成的功能。『我什么思路都没有,』 我这样想,『我只有一个小时的时间用来理清这一堆混乱不堪的代码。』

我沮丧绝望地从我的桌子旁边站了起来,头低垂着,朝着卫生间方向走去。我坐在马桶上,深深地吸了一口气 - 忽然之间,我的灵感来啦!

灵感的宝座

就在那一瞬间,我把所有事情都搞清楚了。代码飞快地掠过我的大脑,我可以看到这个类、它的全部功能及其所有用例。我已经清楚地知道新功能的代码应该放在何处。对我来说,所有这些再清晰不过了!

完事后(回到座位前,不要忘记洗手!),我迅速回到自己的座位上开始敲击代码。我的手指已经不能跟上代码闪现在我大脑中的速度。键盘在我手指的强力敲击之下,开始出现结构性松动。我和我的计算机已经不再互为敌人 - 我们是亲密的伙伴,我们正朝着一个共同目标一起努力。

三十分钟后,代码成功完成了编译。单元测试全部顺利通过。我把这项新功能的需求特性逐一运行了一遍,每一项都符合要求。『我完成了这个不可能完成的任务,我已经搞定了!』

当我从编程高潮回到正常状态时,我有了一个唯一必然的结论:我经历过的最高效的编程体验不是发生在键盘前,而是在马桶上

回顾与反思

现在我不打算说,马桶真有架构代码的神奇魔力(尽管我的确认为它就是一项伟大的发明)。可是,我想说的是,如果你和你的计算机稍微分开一会儿,并且从一个更高的层次开始思考,绝大多数琐碎的编程任务将会变得超乎寻常的容易。无论是去趟卫生间,还是在公园里散步,或者只是在办公室的厨房里稍事休息,几乎任何一项远离计算机的活动,都会让你的大脑重新焕发活力,使你再次重见森林。

许多程序员就是不愿意离开他们的桌子。他们觉得,除 IDE 之外的任何时间花费都是浪费,或者担心招致其他人的轻视和误解。他们的管理者们可能会说,『他为什么不坐下来工作呢?难道想要被降级。』

依我看,这种逻辑不仅完全颠倒,而且适得其反。给程序员支付薪水,不是为了让他们坐在一张桌子旁边,目不转睛地盯着屏幕,或者不停地编写代码。程序员的真正目标是给最终用户创建功能,而通向这一目标有很多途径。如果离开你的桌子,能够让你的功能创建活动变得更加快速有效,那么,这就是你应该做的事情。

总而言之,当你编程的时候,不要忘了使用卫生间。


作者:Brian.S.Lam,视频游戏爱好者、软件工程师 & 超低产博客作者。

原文:Programming on the Toilet

感谢: Qingniu 帮助审阅并完成校对。