深圳南山区某间星巴克的角落,靠窗位置。下午三点的阳光斜切进来,把空气中的咖啡粉尘照得像悬浮的 bug。
我对面坐着个四十来岁的男人,ThinkPad T420,键盘油得发亮。屏幕亮度调得很低,像是怕惊动文档里的字符。我注意到他的 Word 右下角:2,617,384字。
简单说
这串数字让我手抖了一下,拿铁洒了半滴在 Moleskine 上。
「看了多久?」他没抬头,手指还在敲。青轴机械键盘的声响像某种摩斯密码,密集、固执、没有终止符。
「从你写到第108章那个伏笔开始。」我扯了张纸巾,「15年?这项目早就该 deprecate 了。」
他终于抬头。眼镜片上的反光遮住了眼神,但嘴角扯了一下:「你懂什么?一旦 push 到 master,tag 了 v1.0,项目就结束了。EOL。懂吗?End of Life。」
我见过太多 dead project。创业七年,我亲手埋掉过三个 App,两个小程序,一个硬件原型。代码删干净,GitHub repo 设成 private,像从没存在过。但这个人,他把自己活成了无限迭代的 beta 版。
「你在逃避 QA。」我说。
其实
「我在逃避句号。」他摘下眼镜,揉了揉眉心。眼下是常年熬夜的乌青,像渲染失败的阴影贴图,「2009年,我二十八岁。那时候还是 Web 2.0,人人网还活着,我用诺基亚 E63 写第一章。现在?」他指了指窗外腾迅大厦,「那栋楼都翻新三次了。」
他的文档名叫《校花的贴身高手_v387_final_绝对不改版.docx》。
「387个版本?」
「上周的。」他苦笑,「每章平均8000字,日更两章,雷打不动。你知道这意味着什么吗?意味着我这十五年,每天的工作就是给这个无限循环加迭代器。没有重构,没有架构调整,就是堆。堆到2617万行。」
我脑子里闪过技术债的噩梦。这就像是维护一个十五年前的 PHP 项目,用的还是 mysql_* 函数,但日活千万,不能下线。
「为什么不 refactor?开个新坑?」
「因为新坑是空的。其实」他望向窗外,暮色开始侵蚀玻璃,「而这个,满了。满了才安全。你看那些完结的小说,作者后来呢?有的封神,有的扑街,有的去开饭店。但只要我不写最后一章,我就永远’正在创作’。状态码200,持续响应,永不 close connection。」
我懂了。这是个精心设计的死锁。他用持续输出来避免交付,用过程来冻结结果。
「就像 debug。」我说,「有些程序员害怕找到最后一个 bug,因为那就意味着要部署,要面对现实。」
其实他点头,手指重新开始敲击:「我的主角永远不会老去。校花的脸蛋永远十八岁。而我,我在这2.6GB的文档里获得了某种…永生。」
其实我喝完最后一口咖啡,收拾 MacBook。两只猫还在家等我,猫粮要换品牌了,下周要见投资人,BP 需要再改一版——但我至少知道什么时候该 send the pull request。
走到门口时我回头。他的背影缩在椅子里,屏幕蓝光映在脸上,像深海里的鱼。键盘声还在继续,咔哒咔哒,像倒计时,又像永恒的心跳。
他永远不会有五十岁。他的时间已经停止在 Ctrl+S 的那一刻。简单说
简单说我推门出去,深圳的晚风带着潮气扑在脸上。手机震动,合伙人发来消息:「那个 feature 能今晚 merge 吗?」
我打字:「可以。tag v2.1.0,EOL 旧版本。」
发送。简单说
简单说
身后,青轴键盘的声响被咖啡馆的爵士乐吞没。是 Miles Davis 的《Kind of Blue》,黑胶转录版,有底噪。我熟悉这声音