你上一次真正「看清」自己写的代码是什么时候?不是盯着屏幕一行行扫,而是像回忆自己长大的房子一样,随时随地能在脑子里四处走动,摸清每个角落。

Paul Graham 曾把这种状态描述得非常直白:一个全身心投入的程序员,可以像数学家思考问题一样,把整个程序装在脑子里。数学家解难题,很少像小学生那样摊开纸笔一步步演算;他们会在脑中构想出问题空间,直到能把一切关系自由摆弄。顶级的编程也是如此——你把整个程序结构内化,然后随心所欲地操弄它。

打开网易新闻 查看精彩图片

这件事在项目初期尤其值钱。起步时最关键的,不是按某一种方法把问题解决了,而是你随时能改主意,甚至改变你要解决的问题本身。你的代码,本质上是你对正在探索的问题的理解。只有当代码被完整装入脑中,你才算真正理解了自己的问题。手上在写,脑子里却没全盘持有,那就是还没看透。

但这并不容易做到。哪怕是一个正在活跃开发的项目,每天刚开始工作时,也需要大约半小时才能把程序重新「加载」进大脑。如果你曾把项目搁置几个月,回来后很可能需要好几天才能找回当初的理解。更戏剧化一点说,在典型办公条件下,很多普通程序员其实从未进入过这种状态,也从未真正理解自己正在解决什么问题。

即便是最顶尖的程序员,也不可能时刻把整个项目都装在大脑里。但有几件事,能帮我们更频繁地进入那种状态。

第一,避开打断。打断对许多类型的工作都有害,但对编程尤其致命,因为程序员往往在细节处理的极限上运作。打断的危害不在于它有多长,而在于它把大脑搅得有多乱。出门买个三明治再回来,脑子里的代码往往还在;但遇到错误的打断,只需要30秒就能把脑中的一切抹得一干二净。更糟的是那些「计划中的打断」:如果你知道一小时后要开会,你压根就不会去碰任何有难度的工作。

第二,长时间连续工作。每次启动都有一个固定成本,因此少次长回合比多次短回合更有效率。当然,你也会因为疲劳而变笨。这不尽相同,Paul Graham 听说有人能连续攻关36小时,他自己最长只熬过18个小时,而且感觉12小时内的工作块效率最高。最佳节奏并不是身体的极限,拆分项目也有好处:有时你在休息后回到问题前,会发现潜意识已经悄悄把答案放在那儿等你了。

第三,使用简洁的语言。更强大的编程语言能让程序大幅缩短。程序越短,就越容易被整体装入大脑。而这或许是整个链条上最容易被忽略的一环。