程序员的高潮
英文原文:Coder’s High——Programming is just like drugs, except the dealer pays you.
编程就像嗑药,交易者支付你薪水除外
这些天我写作多于写代码,但是关于编程我失去的一件东西就是程序员的高潮:那些时间里,连续数个小时,我将视野锁定在电脑屏幕上,专注起来,通 过同事和我正在建立的实际结构变成了一台人机混合的拼接体。当我开始盯着屏幕,思考和敲键盘时,饥饿、口渴、困倦、甚至痛苦都消退了,直到我达到疲劳的极 限,被它压垮。
这对我也是有好处的。写代码对我的心灵有抚平、镇静的效果,我猜想如果你掌握了思考,它对你也是有用的。神经学家 James H. Austin 的研究作品《禅和大脑》 提到一个人的专注是如何进入“最清晰的虚无,完全脱离了物理本身的空间”。我不清楚程序员是否都到达过这个境界,但是他们有能力与世界脱离而只关注工作。 我和一个朋友在一个同事后面大声讲话,而她正沉浸在编码当中,她不仅不受打扰,她还不知道我们在她后面,对她自己的名字也没有反应。这是对于感知反应的某 种严肃的压制。
有一些程序员,他们可以连续十多个小时保持这种入迷。我从来没有这种耐力,但是有无数个像游戏程序员 John Harris 的例子,他因 Steven Levy 在 1984 年的神秘大作《Hackers》 而名声鹊起。Harris 在 80 年代早期致力于雅利达 8 位机上的 Drogger,他说,“我的手像粘到了键盘上。”有一天下午 3 点以后他开始编程,沉浸在了工作中。等他再次从屏幕上抬起头,他吃惊地发现灯已经关掉了,因为他认为他已经工作到深夜了。实际上,已经是第二天早上了。
关于这种类似“涨潮”状态的完全专注,已经有很多讨论了。我坚信它们不都一模一样,对于我来说,程序员的高潮本质上不同于我所体验过的。书、电 影、游戏、甚至写作有时候也会让我专注到那种程度,但那是不同的感受。它不是真实的,不是着迷的,不是完美的。当然,它没有完美的承诺(尤其是它没有写 作),因为这种着迷把你带入了一个完美的、有序的算法和代码的世界,这个世界的最终结果从来都不是匹配的——用户已经非常了解了。
我从没听过一个大师描述这种符合标准的着迷。或许它们根本无法用语言表达,但是有创造力的着迷更像是药物诱发的恍惚,在这种状态下,事情当时好 像是清晰的,但通常是模糊的炽热之梦——对于每一个“忽必烈汗”【注1】,就有一千首因这些炽热之梦而产生的诗歌和绘画,除了创作人员,对于每个人都缺乏 意义。代码可能有 bug,随后可能需要彻底大修,但是它编译了,它就可以运行(或多或少),着迷之外与着迷之中是一样的。在一个低级的写作着迷之后,我通常说,“这需要一 些认真的编辑。”在一次编码入迷之后,我会说,“真棒!这必定很有生产力!”
我曾经听过的来自于一个不写代码的人对于程序员高潮的最接近的描述是源于一个象棋选手。他描述了在他的精力集中的最清楚时刻,他突然能够看到整 个比赛在他面前摊开了,包括所有策略的可能性以及很多优势和劣势。它就像精神层面的图画或电影,因为它比线性方式展示的信息要多得多。它好像是线性的,他 的意识的知觉属性被分解了,最终他一次能够访问大脑的大量并行处理。(当然最令人沮丧的时刻是当我意识到我不得不在五个文件中五个地方修改代码时,而不得 不等待我的手指一次修改一处。)我也听到过数学家用类似的方式描述思考和领悟的时刻,他们着迷的深度能够达到一个点,就是整个逻辑系统至少呈现在了他们面 前,足以让他们最终把两到三个小块组合在一起,并产生一个新视角。
但是编码通过将着迷链接到一个进行中的生产过程和目标为指导的成就来调节着迷。或许那是最扣人心弦的品质之一。不仅仅你拥有完全专注的短暂高 潮,而且它还伴随着一系列的令人激动的探索智力,其中一个探索在捕捉着完美。“编码”不仅仅是坐下来,大量生产代码。数量庞大,但是它也连带着不计其数的 测试和调试,你把代码接通它的节奏,看看哪里中断了,然后找到出错的线索。有时候你在这个周期的这个或那个阶段花了很长时间,不过,尤其是当你快要完成 时,周期收紧了,变得更加让人上瘾。你受到了这个收紧的代码、编译、测试和调试反馈周期的促进,每个阶段都强烈要求下个阶段不要延期。你写了一个功能,你 想看看是否好使。测试,中断了。它中断了,你想修复它。你修复了,然后,你想构建下一个。如此往复后,也许会有一段完美的代码在远处向你招手。
最好情况下,我在一定程度上能够从键盘上带走这种着迷。有一次,我全情投入一小段狡猾的服务器代码,在梦里我定位到了代码里的一个种类条件(一 个非常低级的 bug)。在梦里我感到了恐慌,我强迫自己醒来并做了检查。我梦中的大脑是正确的;这个 bug 是真实的。(我想象得出代码天才每1~2 周会遇到一次,但它对于我而言只会出现一次。)
沉浸在代码的虚拟世界之后,真实世界相对变得令人讨厌了。代码或许用费解的行为让你烦恼、对你嘲讽,但总是公平的;总是有一些说明。总有美丽和优雅,至少在狡猾的命令和糟糕的维护把垃圾放在你代码之前是这样的。二战时,数学家 Godfrey Harold Hardy 写道, “当世界疯狂的时候,数学家或许在数学领域找到一个无敌的安慰剂。”无论计算机的实际应用如何,编码也会是非常地遥远。数据和计算把真实世界里的真实的人 联系起来的信号总是很少。数据的意思对于其他人来说是一种物质;你只能告诉计算机如何处理,而不管它是伟哥的垃圾邮件,还是 James Joyce 写的《Ulysses》。你总是能够忽略内容,内容是好的,因为前者比后者要多得多。
那么为什么我不再做全职编码了?我仍然时常问自己问题。精疲力尽是一个简单的理由,也是健康的理由(这表明进化没有使人类连续数小时可以坐在计 算机前面),高潮的程度也在衰落,专注不再如此多了。但它仍然和以前一样强大,持续的构建和测试周期也开始提升,更多地像是一遍又一遍地把一个鹅卵石推到山顶。尽管如此,当我面对搜索“le mot juste”列的最后一行徒劳地拷问我的大脑时,我看着我的程序员朋友,在专注的着迷中敲着代码,我感到了对往事的怀念,还有嫉妒。