Holding a Program in One’s Head
头脑中的程序
2007年8月
一位优秀程序员全神贯注地编写自己的代码时,能把整个程序记在脑中,就像数学家把正在攻克的问题记在脑中一样。数学家不是像小学生被教导的那样在纸上演算来解答问题。他们更多地在头脑中完成工作:他们努力理解问题空间,直到能像在记忆中漫步自己长大的房子那样在其中自由穿行。最好的编程状态也是如此。你把整个程序记在脑中,可以随心所欲地操控它。
这在项目启动阶段尤为宝贵,因为最初最重要的是能够改变你正在做的事情。不仅仅是换一种方式解决同一个问题,而是改变你正在解决的问题本身。
你的代码就是你对所探索问题的理解。因此,只有当你把代码装进头脑中时,你才真正理解了问题。
把程序装进头脑并不容易。如果你离开一个项目几个月,回来后可能需要几天时间才能真正重新理解它。即使你正在积极地编写一个程序,每天开工时也可能需要半小时才能把它加载到脑海中。这还是最好的情况。在典型办公室环境下工作的普通程序员从未进入过这种状态。或者更夸张地说,在典型办公室环境下工作的普通程序员从未真正理解他们正在解决的问题。
即使是最优秀的程序员,也不总能把自己正在编写的整个程序加载到头脑中。但你可以做以下几件事来帮助自己:
避免分心。 分心对许多类型的工作都有害,但对编程尤其有害,因为程序员往往在细节处理能力的极限边缘工作。
分心的危险程度不取决于持续时间,而取决于它对大脑的扰乱程度。程序员可以离开办公室去买个三明治,而不会丢失头脑中的代码。但错误类型的干扰可以在30秒内清空你的大脑。
奇怪的是,有预定的分心可能比无预定的更糟糕。如果你知道一小时后有个会议,你甚至不会开始做困难的事情。
长时间连续工作。 由于每次开始处理程序都有固定的加载成本,分几次长时间工作比许多次短时间工作更高效。当然,会有某个时刻因为疲劳而变得迟钝。这因人而异。我听说过有人连续编程36小时,但我的极限大约是18小时,而且我最好的工作块不超过12小时。
最佳状态并不是你能身体力行的极限。中断项目既有代价也有好处。有时候,当你休息后回到一个问题时,你会发现你的潜意识已经为你留下了一个答案。
使用简洁的语言。 更强大的编程语言能使程序更短。而程序员在思考程序时,至少部分是以他们正在使用的语言来思考的。语言越简洁,程序越短,就越容易加载并保持在头脑中。
你可以通过一种称为自底向上编程的风格来放大强大语言的效果:分层编写程序,下层作为上层的编程语言。如果做得正确,你只需把最上层保持