零点一元 第 14 / 14 章

第十三章 · 第 181 天

Day 175。北京西郊,慈安临终关怀医院,七楼七床。下午四点。

陈守仁老人躺在床上,77 岁,肺癌晚期。

他床头摆着一台 ThinkPad T420——上世纪某年代的旧机型,键盘已经磨得发白。屏幕上开着两个窗口——左边一个 agent observability 仪表盘,显示当前调用模型 Lyra-Curator,本月已用 token 432 万,折合 0.43 元;右边一个文本编辑器,标题栏写"陈守仁 · 1985-2026 · 代码遗产 · 第七次草稿"。

Lyra-Curator 是一个去年下半年才上线的行业专用 agent,专门服务"代码遗产"这一新兴方向——它的工作流程很简单:把一个开发者一生的 commit 历史拉进来,逐个 commit 询问开发者本人"是否保留 / 是否注明出处 / 是否撤回"。它的训练语料据说包含了过去三十年所有已 archived 的 GitHub repo 加上若干本计算机出版业的口述史。它不会代替开发者做决定,它只问。

林行坐在床边的椅子上。他穿志愿者制服。他面前的小桌上摊着一个笔记本——他自己的——上面记着他过去六个晚上和陈守仁老人的对话摘要。

陈守仁已经讲到第六晚。

"林行,"老人说,"今天我想讲我第一次被 cc 的事。"

林行点头。

"那是 1989 年。"老人说,"我刚 40 岁。我在芬兰一个大学的邮件列表里贴了一段补丁——是给 GNU make 的——我当时不知道接收的人是谁。三天之后,有一封回邮,cc 了大概八个人,其中一个签名只有四个字母:LINUS。"

林行知道这四个字母是谁。

"我那时候没意识到。"老人说,"我以为只是某个芬兰研究生。我回他一句'thanks for the review',就过去了。后来过了三年我才知道——那是 Linus Torvalds。"

"你后悔吗。" 林行问。

"后悔什么。" 老人笑了一下,"后悔没多说几句?——不后悔。我那时候说的就是该说的。技术评审里,'thanks for the review'是最重的一句话。多了反而轻。"

林行把这一段记在笔记本上。

老人闭上眼,休息了大概一分钟。Lyra-Curator 弹出一个对话框——

是否保留 commit 7a3f29c?(1991 年 3 月 · 47 行 · GNU make 补丁) 检测到该段代码与公开 K&R 教材第 4 章范例重合 73%。建议:删除或注明引用。

老人睁眼,看了三秒。"删掉。" 他说,"那一段我当年抄了 K&R。我没注明。我那时候不懂。今天补不上,就删掉。"

Lyra-Curator 删掉了。屏幕上显示:剩余待审 commits: 1,847

林行问:"老师,您这一辈子写过多少行代码?"

老人想了想:"大概 80 万行。"

"现在选下来,有多少。" 林行问。

"两万一千。" 老人说,"里面有四千行,是我自己写的。剩下的一万七,是我给别人 review 过的——我留着,因为 review 的过程比代码本身更值得记住。"

林行把这一句也记下来。

老人闭眼又躺了一会儿。然后他睁眼,声音有点喘。

"林行,你以前是工程师。" 他说,"你跟我说一件事——你 review 别人代码的时候,最重要的是什么。"

林行想了一下。"耐心。"他说,"我以前以为是技术,后来我以为是经验。我现在觉得是耐心。耐心是一种相信对方比表面看起来想得更多的能力。"

老人笑了一下。"你这一句,很像 Linus 1989 年那一封 cc。"

林行没说话。

"我那一封 cc 我后来翻出来过。" 老人说,"Linus 当时写了七行。第一行说'this is a good patch'。第二行到第六行是他对那七行补丁的逐行评论,他每一行都说'我看见了你为什么这么写'。第七行是'thanks for thinking about this'——感谢我想过这件事,而不是感谢我交了这件事。"

林行那一刻把笔记本合上。他这一夜不再记。他想用耳朵听完这一段。

老人接着说:"那七行评论改变了我。我那一年 40 岁,在国内做开源算异类,我以为我做的事没人看。Linus 那七行让我明白——有人比我更早就看见我为什么这么写。这一辈子,我后来 review 别人的 PR,都试着学他那七行。我做不到他那么好,但我每次都试。"

老人停了一下。

"你今天问我'最重要的是什么',我答你——"老人说,"是看见对方为什么这么写。这一句,是 Linus 教我的。我现在告诉你。"

林行点头。他没说"谢谢",因为老人讲的事比"谢谢"重。

他在心里默念:"thanks for thinking about this."


第六晚九点二十一分。老人忽然睁眼,声音比平时低半档。

"林行,"他说,"今天你帮我问一个问题。"

"您说。"林行说。

老人想了大概十七秒。然后他说:

"代码会被记住吗。"

林行没立刻答。他想起 Day 0 那一夜,他把 last-real-code.md 这个文件保存的那一刻;他想起 Day 1 Claude Code 那句"祝薛野下一份代码也能被人看见";他想起 Day 70 Manus 朗读 stripe-go README 最后那行 thanks。

他答:"会的。"

老人闭眼。

然后他又睁开眼,问最后一个问题:

"代码遗产法案……过了吗?"

林行说:"还没。但我会等到它过。"

老人那一刻,几乎是笑着的。他没说话。他闭上眼,把右手从被子里伸出来,放在 ThinkPad 的键盘边缘上——那个位置,左手食指能按到 'F' 键的位置。这是他四十年来,无数次起手敲代码前的姿势。

林行看着那只手,没动。

老人睡着了。


Day 181 早晨六点零八分。陈守仁老人去世。

护士长白阿姨打电话叫林行到的时候,林行已经在医院后院的长椅上坐了一个晚上——他昨晚没回家。他守着病房窗户外面的一棵老海棠,从凌晨两点坐到天亮。海棠开得正盛,粉白的花在凌晨四点的灯光下看上去像一张不动的照片。

妻子知道,妻子今天给他发的早安微信只有四个字:"在你那。"

林行进病房,默立两分钟。然后他走到 ThinkPad 前,把右边那个文本编辑器打开。剩余待审 commits: 0

屏幕底部 Lyra-Curator 的 agent observability 仪表盘还在工作——它显示老人在最后一夜调用了 11 次 Lyra-Curator,每一次都是几行代码的"删除"或"保留"判断,每一次的延迟都在 200 毫秒以内,每一次的成本都精确到 0.0001 元。仪表盘最底下是一行总计:"陈守仁 · 一生代码遗产 · 已完成审定。"

林行把那行字读了三遍。

然后他把 ThinkPad 慢慢合上。他没拔电源——他想让它再亮着一会儿,因为这台机器陪了老人四十年。

老人的右手还放在键盘边缘 'F' 键的位置。林行用左手轻轻把那只手从键盘上挪下来,放回被子里。手很凉,但骨节还很硬——像一个一辈子用键盘的人,最后留给这世界的最后一份触感证据

林行打开一个新的文件,文件名 obituary.md,他用过去六十天练讣告的方式,写了大概 22 分钟。

他没用任何 V5 类工具起草。他用自己的右手食指和中指,一行一行打字。他打字的方式很慢——大约每分钟 80 字——他知道自己慢,但他这一刻想慢。

讣告全文不到三百字。他没列老人的学历、没列发表论文、没列贡献过的开源项目清单——这些 Lyra-Curator 已经替老人选过一遍。讣告里他只写老人讲过的几件具体的事:1989 年的那封 cc;1991 年那段被老人主动删除的 K&R 引用;老人这一夜亲手敲下的最后 11 次"保留 / 删除"判断;还有老人临终前的那个问题——"代码会被记住吗"。

写完,他读了三遍。

他给讣告落款。落款的格式他想了很久。

他想过用"敬挽"。他想过用"沉痛悼念"。他想过完全不落款,留白。他最终都没用。

最后他在最末尾加了一行:

代码语:final commit。

他保存。

他把这份讣告发给陈老师远在国外的女儿——女儿三年前出国,这次没赶回来——同时抄送给医院、抄送给陈老师指定的两个开源基金会、抄送给衡安(陆衡上个月加入了那两个基金会的董事)。

他还抄送了一个人:沈知微。他想让他妻子看一眼这份讣告。

发送之前,他停了三秒。他犹豫了一下,在抄送栏又加了一个人——姜禾。他没解释为什么。他只是加了。

发送。

发送之后他坐在床边的椅子上没动,大概有六分钟。窗外北京春天的早晨光线开始一点点变厚——从凌晨四点的薄白,转到早晨六点的淡金。海棠的花瓣在风里有一两片开始往下掉。

他这一刻想起一个十二年前的早晨——他和沈知微刚结婚不久,他们租在五道口一个老房子里。那天早上他下楼买豆浆,扫码 3 块 8,系统提示他有一张优惠券,实付 3 块 7。他没用——他懒——他回家把这件事跟沈知微说,沈知微正煎蛋,她头也没回,说"一毛钱在我们家是什么"。当时他没接话。

今天他想接话。他在心里替十二年前那个早晨的自己,慢慢答了一句:

一毛钱是一次决定,看是谁的家。


林行走出医院的时候是早上七点零四分。北京春天的清晨光线很薄,空气里有一点早樱花瓣被昨晚的雨打下来后的甜。他在医院门口的路边长椅坐下,把手机摸出来。

他打开备忘录。

Day 0、Day 14、Day 21、Day 35、Day 70、Day 90、Day 110、Day 130——一条一条往下翻。最末是空白的 Day 181。

他在 Day 181 那条下面打字:

水位线之外,也下雨。但是是不一样的雨。

他保存。

他把手机收起来。他没立刻起身。他坐在长椅上又坐了大概十分钟。

七点二十一分,他的手机震了一下。微信。是姜禾。

姜禾的消息只有两行:

林老师,你那篇讣告我读了。 我从你的 skill 里学到东西。

林行盯着这两行看了一会儿。

他没立刻回。他想起姜禾在咖啡馆那天把那杯耶加雪菲推给他的样子。他想起 798 后台那一杯热水。他想起他妻子早饭桌上嚼着煎蛋说"水位线"的样子。他想起陈守仁老人的右手食指搭在键盘边缘的位置。

他回:

姜老师,我从你的 skill 里也学到东西。 我妻子让我谢谢你那杯热水。我没告诉她那是你递的——她不用知道。她只知道有人当晚递了一杯热水给我。

他发送。锁屏。


他起身,沿着医院门口的辅路走。一辆早班的洒水车从他身边开过,车头喷出来的水雾在他左肩上湿了一小片。他没擦。

他想起六个月前在公司楼下那个雨夜,他走出大堂时也是肩膀湿了。那一夜的水是凉的,带着初冬的硬度。今天的水是软的,带着春天的甜。

走到地铁口,他停了一下。

他把手机摸出来,翻到 Day 0 那条——"Day 0。"——他看了三秒。然后他往下翻,翻过 Day 14、Day 21、Day 35、Day 70、Day 90、Day 110、Day 130,翻到 Day 181。他在 Day 181 那条下面又新加了一行:

——但不是同一种雨,也不是同一个人。

他保存。

他想起六个月前,沈知微在 Day 0 那条下面替他加的那一行:"一毛钱是一次决定,看是谁的家。" 这一行,他这六个月里读过无数遍。他从来没解释过,妻子也从来没问。

他这一刻在心里替这一行注释了一句:

这是水位线之下的人,替水位线之上的人留的。

他把手机塞回口袋。

他走下台阶。

身后,北京春天早上七点半的天光,慢慢从浅灰转成淡金。他没有回头。

他知道他不需要回头。

地铁来了。门开了一秒,又关上。林行进了车厢。车厢里有一个老人——大约八十岁——坐在门旁的位子上,膝上摆着一台用了很多年的旧 ThinkPad。他在用屏幕上一个文本编辑器,一个字一个字慢慢打字。林行没去看他打的是什么。林行只是看见,老人的右手食指,搭在键盘的 'F' 键边上。

林行选了一个离老人三个座位的地方坐下。

地铁启动。轨道发出那种从初冬听到春天的声音——金属和橡胶之间,熟悉的、不变的频率。

林行闭上眼。

他后来想,那是他这一生听过的、最像水位线本身的声音——不是水的声音,也不是水之外的声音,是水正在做决定的声音。

(第十三章 · 完) (全书 · 完)