在马桶上编程

现在是下午5点,我已经在同一处代码耗了几个小时了,为了完成一个功能的实现琢磨每一行代码。这是一个备受折磨的过程。有时候,代码会自然而然的从大脑中流到我的指尖上,这次却不然。

我一直负责增加新的功能到一个类。“简单”,我想,“我先写出这个类,搞清楚如何扩展它应该不是难事。”于是,美味的午餐之后,我坐下来开始编码。

事情开始很顺利——我有了一个模糊的想法,关于新的功能如何来适应这个类。但是,随着我的实现越加深入,我就越加意识到我模糊的想法远远不够。类的方法需要访问那些没有访问权限的数据。我不停地创建各种边界用例,把这个类弄得非常的脆弱、漏洞百出。更重要的是,当我运行我的新的代码的时候,单元测试总是通不过。

在接下来的几个小时内,我在这样的困境中越陷越深,直到后来,我几乎连自己的代码都看不懂了。我不停地查看我本地代码和原始代码的差异,想找出我做了哪些修改。我已经搞不懂代码是如何工作的了,也不知道我期望它怎么做。事情很快演变成我和电脑之间的一场战争。“只要编译通过,你这该死的,编译!”

就这样直到现在,下午5点了——还有一个小时我就要回家了。我几乎放弃了在今天完成这项功能的打算。“不可能完成了”我想,“只是清理这些混乱的代码就要花费我一个小时!”

我从电脑桌旁站起来,情绪低落,低着头,前往洗手间。我坐在马桶上,深吸了一口气——那就是我灵光乍现的时刻!

thinker on the toilet

灵感的宝座

在马桶上的一瞬间,?我什么都明白了。代码飞速的闪现在我脑海中。我可以看见那个类,以及它所有的功能和用例。我可以清楚地看到在哪里添加代码。我全都能看见!

我方便完后(回去工作之前先洗手!)跑回电脑桌前开始敲代码。代码从我的大脑中奔腾而出,我手指上的速度完全跟不上这种速度。当我用力敲击键打,键盘都开始扛不住了。计算机和我不再是敌人了——我们是最亲近的同盟,为了一个共同的目标而努力。

30分钟过后,代码编译成功了。所有的单元测试都通过了。我遍历完新功能的需求列表,其中的每一项都按预期运行着。“我做到了不可能的事,我完成了!”

当我从编程的高兴劲儿中静下来,我领悟到一个简单的真理:我编程最有效率的时候不是在键盘面前,而是在马桶上。

后退一步

现在,我并不是在说马桶有某种构建代码的魔力(当然我确信它们是伟大的发明)。不过,我想要说的是如果从你的电脑前退一步,从一个更高的角度看待问题,即使是最复杂琐碎的任务也会容易10倍。无论是去一趟洗手间,还是去公园走走,或者仅仅是在你的办公室坐一会儿,只要暂时离开你的电脑屏幕,都能够清醒你的头脑,让你更全面地看问题。

许多程序员不愿意离开他们的电脑桌。他们觉得离开IDE时间会浪费掉,或者他们会被瞧不起。“他为什么不在工作岗位上?!准备着降职吧。”他们的经理会说。

我认为这个逻辑完全错误,并且只会适得其反。程序员的职责并不是坐在电脑桌前,或者盯着屏幕,甚至也不是写代码。这些仅仅是通往最终目的的基本步骤:为最终用户开发好的功能。如果离开你的电脑桌可以使你更快速高效地开发那样的功能,那这正是你应该做的。

总之:别忘记在敲代码的时候上洗手间一趟。

1 收藏 2 评论

关于作者:冯钧

(新浪微博:@长安逢君) 个人主页 · 我的文章 · 1

相关文章

可能感兴趣的话题



直接登录
最新评论
  • bombless   2014/06/02

    我上班的时候即使没事也要盯着电脑屏幕以免被其他部门的同事认为在偷懒。真是悲哀。

  • 说的太对了,不过我灵感乍现的时候是在公交车上和刷牙的时候。

跳到底部
返回顶部