说的是实情,随便问一个程序员,问他什么时候工作最有状态,估计他很有可能说是深夜。有人稍微早一点,有人更晚。有一种流行的趋势是凌晨4点起床,在破晓之前这段时间里做一些事情。而另一些人喜欢凌晨4点才睡觉。
所有这些的主要目的是躲避打搅。但是你把自己反锁在屋里不就行了?为什么对夜晚情有独钟?
我想,这事归纳下来有3点:工人的时间表,疲倦的大脑和明亮的电脑屏幕。
Paul Graham 在2009年写了一篇关于 工人的时间表的文章——主要是说这个世界(主要)存在两种时间表。传统的管理者的时间表——一天的时间别分成了很多小时,一次十分钟的分心至多会浪费你1个小时的时间。
而另一种情况是程序员们所说的工人的时间表——生产东西的人的时间表。研究一个大型的抽象的系统,需要把整件事情装进大脑——这样的一些人类似于用珍贵的水晶玻璃搭建一间房子,一旦有人打搅你,整个结构都会滑落,摔成无数的碎片。
这就是为什么被打扰的程序员会如此的生气。
因为这是一种巨大的精力上的投资,在没有几个小时不被打搅的环境中的酝酿,你不可能开始工作。如果你好不容易在大脑中构建了整个要思考的事情的模型,而在半个小时后被人摧毁,这是很大的浪费。
事实上,在跟很多的企业创办人交谈后,你会发现,他们都感觉在白天根本无法做任何事情。持续不断的打扰、重要的事情需要注意、大量的邮件需要处理,环境不允许他们坐下来做事。于是他们大部分人都在夜晚,人们都入睡的时候去完成他们要做的事做完。
但是程序员仍然在晚上会困倦。程序员不是超人。程序员甚至在白天都会感到疲劳。为什么我们要把智力上最复杂的事情放到我们的大脑想去睡觉的时间段里去完成,而在我们的大脑最敏锐最清醒的时候去做相对简单的事? 因为疲倦让我们编写出最好的代码。
跟ballmer峰值相似,疲倦能使我们的精力更容易集中,因为你的大脑疲倦了,不得不集中精力!没有多余的脑能量来提供你去三心二意。
对我来说,如果喝了太多的茶或在错误的时间喝了提神饮料,我反而干不了什么事。我会过度兴奋,一会查看微博,一会看看新闻,不知道自己该做什么。 你会认为我应该更有效率的工作——精力充沛,大脑超频。但正好相反,我东一榔头西一耙子,根本无法在一件事情上定神2分钟。而反过来,当我稍微有点疲倦时,我却能把屁股安稳的放到椅子上开始编程。在大脑稍微有点疲倦的情况下,我能连续编程数小时,毫不考虑微博或Facebook。好像这互联网根本不存在。
我感觉大部分程序员都是跟我的感觉是一样的。对于日常工作中80%的任务,我们的脑能力都是过剩的——除非你需要写的是在当前程序运行的环境中让它增速10的算法。即使你开发的是最高级的机器学习想象功能,其中大部分的工作也只是简单的整理数据和以一种合适的方式表现输出结果。
当你的大脑不是满负荷运转时,它总是想找点事情做。疲乏会让你迟钝,手头的工作就已经够你消化了。这一点非常的简单。在晚上老是盯着明亮的光源,你的睡眠周期会推迟。你忘了该是睡觉的时候了,直到凌晨3点。然后你早上11点才能起来,当晚上再次到来时你不再感到困倦,因为你11点才起床!
反复这样的作息规律,你的身体会进入另外一个时区。更有趣的是,这种周期不会一直推迟下去,一旦你进入了这种3点或4点才去睡觉的生理平衡状态,你会一直留在这种状态里。 也许这是一种警讯在起作用,社会在告诉我们,如果我们在下午2点吃早餐,会被认为是很邋遢的人。
最后
总结一下,程序员喜欢在晚上工作,是因为这时没有何时应该停止工作的限制,这让人感到更放松,你的大脑不再思考让你分心的事情,明亮的屏幕使人清醒。