第001章

毕业名单

林默是在周三下午三点十七分,被公司体面地判了死刑。

会议室的玻璃墙擦得很亮,亮到他能看见自己的脸。

三十二岁,黑眼圈,衬衫领口有一道洗不掉的旧折痕。上午刚修完一个线上报警,中午只吃了半份盖饭,下午就被行政叫到十七楼,说陈总找他聊聊。

聊聊。

这两个字在公司里通常有两种意思。

一种是加薪。

另一种,是让你体面地滚。

林默推门进去的时候,人已经坐齐了。

陈启明坐在主位,西装扣子扣得一丝不乱,桌上放着一杯还冒热气的美式。HR 坐在他左手边,面前摊着一份文件,文件最上面那行字很醒目。

《组织结构优化沟通确认书》。

林默看了一眼,心里反倒安静下来。

原来不是找他背锅。

是找他离职。

“坐。”陈启明抬了抬手,语气温和,“别紧张,就是一次正常沟通。”

林默坐下。

椅子有点凉。

陈启明先叹了口气。

这个动作他做得很熟练,像在正式宣判前,给自己披上一层不得已的善良。

“林默,你在公司五年了吧?”

“五年零三个月。”

“嗯。”陈启明点点头,“时间不短。你的稳定性,公司一直是认可的。”

稳定性。

不是能力。

不是贡献。

不是价值。

是稳定性。

林默低头看着桌面的纹路,没有接话。

陈启明继续说:“但你也知道,现在大环境不好。公司接下来要做组织升级,业务线会更聚焦,人员结构也要更年轻、更敏捷。”

更年轻。

更敏捷。

林默听懂了。

三十二岁,在他们嘴里已经不是工程师,而是一段需要被优化的成本。

HR 接过话:“公司会按照法律规定给到 N+1,社保这个月正常缴,离职证明也会配合开具。你这边如果没有异议,我们今天先把沟通流程走完。”

林默问:“什么时候交接?”

HR 愣了一下。

大概她准备了安抚、解释、谈判、争执,甚至准备了对方情绪失控时的应急话术。

但她没准备好对方这么快问交接。

陈启明笑了笑:“这也是我们一直欣赏你的地方,职业。”

林默抬头看他。

陈启明的笑意很淡,甚至称得上真诚。可正因为真诚,才更让人觉得刺眼。

他们不是在赶走一个人。

他们是在处理一个流程。

“交接不用太久。”陈启明说,“你负责的支付中台老模块,文档之前不是都补过吗?让小周接一下就行。现在很多事情也都 AI 化了,年轻人上手很快。”

林默点了点头。

小周去年校招进来,昨天还在问他分布式锁为什么会偶发失效。

上手很快。

也许吧。

陈启明端起咖啡,抿了一口,像是终于说到了真正想说的话。

“林默,我个人还是希望你把心态放平。你这几年做得不差,但也要客观看待平台的作用。很多时候,不是个人成就了平台,是平台成就了个人。”

会议室很安静。

空调风从头顶吹下来,落在林默后颈上。

他忽然想起三年前的一个凌晨。

支付链路雪崩,值班群里一片混乱,陈启明那天在外地出差,电话里只说了一句:“你先顶住。”

他顶了七个小时。

从日志里捞出异常请求,从缓存击穿一路追到第三方回调重放,最后临时加限流、补幂等、切灰度,把损失压在可控范围内。

第二天复盘会上,陈启明说:“这次能稳住,说明我们部门的体系建设是有效的。”

体系。

平台。

稳定性。

这些词总是很大,大到可以轻易盖住一个人的名字。

林默没有反驳。

他只是问:“我的私人资料,今天可以带走吗?”

“当然。”HR 立刻说,“个人物品都可以带走。公司资料就不行,这个你也理解。”

“理解。”

陈启明身体往后一靠,语气更软了一点。

“你技术底子还是有的,出去也能找机会。只是现在市场不比以前,别太挑。说句实在话,人离开平台以后,很多东西就要重新证明了。”

林默看着他。

几秒后,他说:“谢谢陈总提醒。”

陈启明似乎对这个回答很满意。

他喜欢懂事的人。

尤其喜欢被打掉尊严之后,还能保持懂事的人。

二十分钟后,流程走完。

文件签字。

电脑权限回收。

工作群移除倒计时。

邮箱冻结倒计时。

所有东西都很快,快得像公司早就排练过很多次。

林默从会议室出来,外面的工位区还是一片键盘声。

有人抬头看了他一眼,又很快低下头。

也有人装作没看见。

成年人的职场善意,很多时候就是不围观别人的难堪。

林默回到自己的工位。

他的电脑屏幕还亮着,右下角弹着一条监控告警,是上午那个接口的延迟曲线又开始抬头。

他盯着看了两秒,手指习惯性地想去点开日志。

然后停住。

已经不是他的事了。

他把公司电脑合上,拿出纸箱,开始收东西。

东西不多。

一个用了五年的机械键盘。

一只掉漆的保温杯。

两本写满字的硬皮笔记本。

一块移动硬盘。

还有几张便利贴。

便利贴上写着他以前随手记的东西。

“所有临时方案,都会活到没人敢删。”

“报警不是噪音,是系统在求救。”

“交接文档不是给聪明人看的,是给凌晨三点的人看的。”

他把便利贴一张张撕下来,夹进笔记本里。

旁边的小周终于忍不住滑着椅子过来,声音压得很低:“默哥,你真要走啊?”

“嗯。”

“怎么这么突然?支付那块不一直是你在撑吗?”

林默笑了笑:“以后你撑。”

小周脸色一白:“别啊,我还好多地方没搞明白。那个清结算补偿任务,上次你说有个坑,文档在哪来着?”

林默从抽屉里拿出一本旧笔记,翻到夹着黄色标签的那页。

“公司文档里有一版。这个是我自己记的,不能给你带走,但我可以现在跟你讲一遍。”

小周愣住:“现在?”

“现在。”

林默看了一眼时间。

四点零八分。

距离他的账号被彻底回收,还有五十二分钟。

于是他站在工位旁边,用最短的话,把那个清结算补偿任务从业务入口、异常分支、历史事故、监控指标到回滚方式讲了一遍。

小周越听脸越白。

“这东西没人告诉过我啊。”

林默说:“所以现在告诉你。”

“那你之前怎么不写到正式文档里?”

林默沉默了一下。

写过。

写在一个没人点开的文档链接里。

写在一次复盘纪要的附件里。

写在他凌晨两点发到群里的长消息里。

写在陈启明嫌“太细了,管理层不看”的那版材料里。

但这些话没有意义。

他只说:“以后你自己也记一份。”

小周用力点头。

不远处,有人轻轻咳了一声。

陈启明站在过道口,身后跟着行政。

他看了看林默,又看了看小周手里的本子,笑容不变:“林默,私人笔记可以带走,但涉及公司业务细节的内容,还是要注意边界。”

小周连忙把手缩回去。

林默合上笔记本。

“我在口头交接,没有复制资料。”

陈启明走近两步,声音不高,却足够周围几排工位听见。

“我不是不信任你。只是这个阶段比较敏感,大家都要专业一点。毕竟你也知道,公司的东西,不能因为个人情绪带出去。”

个人情绪。

林默看着手里的纸箱。

里面是他的键盘,他的杯子,他的笔记,他五年里用一个个深夜换来的经验。

到了陈启明嘴里,忽然都变成了需要被防范的东西。

周围的键盘声慢了下来。

有几个人假装看屏幕,耳朵却已经竖起。

林默知道,只要他现在多说一句,明天公司里就会有新的版本。

林默被裁时情绪失控。

林默想带走公司资料。

林默和领导当场吵起来。

他太懂这种叙事了。

一个人只要失去了位置,连解释都会变成证据。

所以他只是把笔记本放进纸箱。

“我知道边界。”

陈启明点点头:“那就好。”

五点整,林默的账号被踢下线。

屏幕弹出一行灰色提示。

“当前用户无访问权限。”

同一秒,手机屏幕亮了一下。

企业微信的最后一条预览还没来得及被抹掉。

小周:“默哥,清结算告警又抬了,那个跨日兜底要先停吗?”

下一秒,提示消失。

“你已被移出‘支付中台值班群’。”

他盯着那行字看了三秒,关掉显示器。

离开公司时,前台姑娘还是像往常一样说:“林工,慢走。”

说完她才意识到不对,表情僵了一下。

林默冲她点点头。

“嗯,慢走。”

电梯一路往下。

十七楼。

十五楼。

十二楼。

八楼。

每一层都有人进来出去,胸前挂着工牌,手里拿着咖啡,嘴里聊着需求、排期、评审、上线。

没有人知道他刚刚失去了一份工作。

也没有人在意。

城市不会因为一个后端程序员被裁而慢下来。

地铁也不会。

林默抱着纸箱挤上晚高峰,箱角抵着肋骨。手机震了一下,是母亲发来的消息。

“晚上吃饭了吗?最近别总熬夜。”

林默看着那行字,过了很久,回了两个字。

“吃了。”

实际上他没有。

回到出租屋时,天已经黑透。

一室一厅,四十来平,墙角有点返潮。桌上放着一台旧台式机,是他大学毕业后自己攒的,后来换了公司电脑,这台机器就成了私人仓库。

代码备份。

学习笔记。

读书摘录。

事故复盘。

半成品工具。

还有一些他曾经以为会有用,但一直没机会用上的东西。

林默把纸箱放到桌边,开灯,洗了把脸。

镜子里的人看上去很平静。

平静得像今天只是普通加班回来。

可他知道不是。

从今天开始,房租、社保、存款、简历、面试、年龄,全都会变成具体的数字,一天一天压过来。

他坐到电脑前,把移动硬盘插上。

旧机器风扇响了起来,声音有点哑,像一个很久没说话的人,终于被迫清了清嗓子。

屏幕亮起。

林默打开自己的私人目录。

五年。

三百多个故障记录。

七十多份项目复盘。

二十几个没写完的小工具。

还有一个叫 old-ai-assistant 的文件夹。

他愣了一下。

这个文件夹他有印象。

两年前大模型刚火的时候,他跟风写过一个本地助手壳子,接过几个开源模型,想让它帮自己整理代码和笔记。后来效果太差,就扔在角落里吃灰。

林默点进去。

里面的文件日期停在一年多前。

他自嘲地笑了笑。

“连你也没做完。”

他正准备关掉窗口,屏幕右下角忽然跳出一条系统提示。

一个陌生进程正在启动。

进程名很短。

zhuzhao.local

林默的手停在鼠标上。

他不记得自己写过这个名字。

下一秒,黑色终端窗口自动弹出。

光标闪了三下。

一行字慢慢浮现出来。

“检测到长期工程记忆库。”

林默坐直了。

第二行字接着出现。

“是否开始整理你被浪费的五年?”

下一章:旧电脑里的声音

第002章

旧电脑里的声音

“是否开始整理你被浪费的五年?”

林默盯着屏幕,看了足足十秒。

出租屋里很安静。

窗外是晚高峰残留下来的车流声,楼上有人拖动椅子,墙角的旧冰箱低低震了一下。除此之外,只有旧台式机风扇转动的声音。

那行字停在黑色终端里。

白色。

冷静。

像一句问候。

也像一句冒犯。

林默没有立刻按回车。

他先拔掉了网线。

然后关掉 Wi-Fi。

再打开系统监控,看进程、端口、网络连接。

没有外联。

没有异常上传。

CPU 占用百分之二十七,内存占用一点四个 G。进程路径指向他刚才打开的 old-ai-assistant 文件夹,最后修改时间却是三分钟前。

林默皱起眉。

他不怕电脑坏。

他怕的是,自己今天刚离职,私人硬盘里那些笔记和代码,转头就被什么乱七八糟的东西传出去。

一个被裁程序员,最不能丢的不是工作。

是边界。

他敲下一行字。

“你是什么?”

终端安静了两秒。

光标闪烁。

随后,一大段回答刷了出来。

“我是基于本地长期工程记忆库生成的交互式索引助手,当前可访问范围包括:代码归档、项目笔记、事故复盘、脚本目录、学习摘录、部分桌面文本缓存。当前无外部网络连接。当前无远程执行权限。当前无自我复制权限。”

林默看完,第一反应不是震惊。

是松了一口气。

至少它知道自己没有联网。

第二反应是头疼。

这语气太像他两年前写的那个半成品助手。

又啰嗦,又死板,还带着一股技术文档味。

他继续问:“刚才那句话是什么意思?什么叫被浪费的五年?”

这一次,回答更快。

“根据已索引材料,过去五年内,你产出了可复用工程经验,但其组织内显性回报偏低。”

下面列出四行。

“事故复盘:312 条。”

“交接笔记:74 份。”

“风险清单模板:19 份。”

“半成品自动化工具:23 个。”

最后一行是结论。

“这些材料没有形成产品、服务、影响力、议价权,因此被判定为低外部化资产。”

林默盯着“低外部化资产”六个字,沉默了一会儿。

这话很难听。

但更难听的是,它好像没说错。

他写过那么多复盘。

熬过那么多夜。

救过那么多火。

最后在公司系统里留下来的,只是几行绩效评语。

稳定。

负责。

配合度高。

像给一颗螺丝写墓志铭。

林默往后一靠,椅背发出轻微的响声。

他问:“你读过我的所有文件?”

“没有。”

“为什么?”

“索引失败:部分文件命名混乱,部分内容为图片,部分压缩包损坏,部分 Markdown front matter 不规范,部分笔记中存在大量情绪性表达,难以结构化。”

林默眼角跳了一下。

“情绪性表达?”

终端很诚实。

“例如:‘这个需求谁提的谁半夜起来守。’”

林默:“……”

那是他三年前写在复盘草稿边上的一句话。

当时产品经理在上线前一天改需求,差点把支付链路干穿。他写完之后觉得不专业,又删掉了。

没想到这东西从某个缓存文件里被翻了出来。

他忽然有种很荒唐的感觉。

今天公司不要他了。

回到出租屋,第一个认真阅读他五年工作痕迹的,竟然是一个不知道从哪里醒来的本地程序。

林默揉了揉眉心。

“你能做什么?”

终端输出:

“当前能力包括:检索、摘要、聚类、风险提示、任务拆解、代码片段解释、文档生成。”

停顿半秒,又补了一行。

“当前不建议用于:人生重大决策、医疗诊断、法律意见、情感咨询、股票交易、命理预测。”

林默看着最后四个字。

“命理预测?”

“检测到目录中存在《紫微斗数入门.pdf》。”

林默闭了闭眼。

那是大学室友发给他的。

他从来没看过。

这个东西果然不聪明。

至少不够聪明。

他开始试探它。

“分析一下清结算补偿任务。”

终端沉默了四秒。

硬盘灯开始疯狂闪烁。

随后,它吐出一段总结。

“清结算补偿任务:用于在交易状态异常时进行补偿。核心风险:重复执行、状态不一致、第三方接口延迟。建议:增加幂等控制、补偿日志、监控报警。”

林默看完,摇了摇头。

这段话放到任何一个补偿任务上都成立。

也就是说,它等于没说。

他敲字:“太泛。这个任务真正的坑在哪里?”

终端停住。

“请提供反馈。”

林默盯着这四个字。

这是第一个让他觉得有意思的地方。

它不是假装懂。

它承认自己不知道。

林默从纸箱里拿出那本硬皮笔记,翻到黄色标签页。

清结算补偿任务真正的坑,不是幂等。

幂等只是表面。

真正的问题在于历史上有两套订单状态机:一套给老业务用,一套给新业务用。迁移时为了兼容,补偿任务里保留了一个“临时映射表”。后来所有人都忘了这张表的存在。

大多数情况下,它不出问题。

只有当第三方回调延迟、订单跨天、老业务走兜底通道,这三件事同时发生,补偿任务才会把一笔本该人工确认的订单推进到自动结算。

这种问题,单看代码不一定看得出来。

要看事故。

要看历史。

要看那些没人愿意读的交接记录。

林默把这一段简短输入进去。

终端显示:

“反馈已记录。”

“重新分析中。”

三秒后,新的回答出现。

“该任务核心风险不是重复执行,而是历史状态机兼容层被误认为稳定业务逻辑。风险触发条件具有组合性:第三方回调延迟 + 跨日订单 + 老业务兜底通道。建议输出交接文档时,优先标记‘历史兼容代码’、‘临时方案长期化’、‘无人负责但仍在运行的映射关系’。”

林默慢慢坐直。

这一次,不一样了。

它依旧不算聪明。

但它学得很快。

准确地说,它能把他刚才的反馈,立刻压进自己的分析框架里。

这不是全知。

这是一个很笨的学徒。

可如果这个学徒永远不困,永远不烦,永远能读完那些没人愿意读的东西呢?

林默的心跳忽然快了一点。

他问:“你为什么叫 zhuzhao?”

终端回答:

“进程名来源于本地变量名 zhuzhao。首次出现于 2023-11-04 的笔记:‘愿有一灯,烛照幽微。’”

林默愣住。

那是他写在一篇事故复盘开头的句子。

那次事故很小,只影响了三个用户。

但排查过程极其折磨。

所有监控都是绿的,所有日志都像没问题,只有一个客服截图里露出半行异常状态。林默顺着那半行状态追了两天,最后在一个没人维护的定时任务里找到了原因。

复盘的最后,他写:

愿有一灯,烛照幽微。

后来陈启明说这句话太文艺,不适合放进部门复盘,删掉了。

林默一直以为没人看过。

现在它从硬盘深处,被一个本地进程翻了出来。

林默看着屏幕,低声说:“那就叫烛照吧。”

终端没有立刻回应。

过了一会儿,屏幕上出现一行字。

“命名已确认:烛照。”

很机械。

甚至有点傻。

但林默不知道为什么,心里那块被压了一整天的东西,忽然松动了一点。

他想了想,问:“烛照,帮我改一份简历。”

“请提供目标岗位。”

“后端开发,偏 Java,五年以上。”

“正在生成。”

十几秒后,一份简历摘要出现在屏幕上。

第一句是:

“林默,具备较强稳定性,能够在组织要求下完成复杂系统维护工作。”

林默沉默。

稳定性。

又是稳定性。

他几乎被气笑了。

“删掉。”

“已删除。”

第二版:

“林默,长期承担支付中台历史包袱治理工作,擅长在缺少资源、缺少关注、缺少明确责任人的情况下保持系统不爆炸。”

林默这次真笑出了声。

这东西不会写简历。

但它很会说实话。

他把椅子往前挪了一点。

“换个问题。如果我现在要活下来,最快应该做什么?”

“寻找新工作。”

林默面无表情:“废话。”

终端立刻补充:

“更精确地说:如果目标是稳定现金流,寻找新工作是低风险路径。如果目标是提高议价权,单纯寻找新工作不足以改变你当前处境。”

林默没有打断。

屏幕继续输出。

“你当前最大问题不是没有经验,而是经验不可见、不可复制、不可交易。”

这句话出来的时候,林默的手停住了。

不可见。

不可复制。

不可交易。

他忽然想起下午会议室里,陈启明那句轻飘飘的话。

不是个人成就了平台,是平台成就了个人。

为什么这句话能伤到他?

因为从外面看,好像确实如此。

公司有系统,有客户,有业务,有工牌,有会议室,有年终奖,有绩效流程。

而他有什么?

几本没人读的笔记。

一块移动硬盘。

一堆不能写进简历细节里的事故。

一套只有在凌晨三点才显得值钱的判断力。

烛照继续输出:

“建议将经验转化为可交付物。”

“例如:代码仓库风险扫描报告、遗留系统交接文档、事故复盘模板、上线前检查清单。”

“当前最小可行方向:为小团队生成交接文档和风险清单。”

林默看着那几行字,屋子里安静得只剩风扇声。

他本能地想反驳。

这东西有人要吗?

这算产品吗?

谁会为交接文档付钱?

但另一个念头很快冒了出来。

下午小周那张发白的脸。

那个清结算补偿任务。

那些永远散落在群消息、复盘附件、私人笔记里的系统真相。

每家公司都有。

每个老项目都有。

每个新人接手时,都会踩一遍。

每次老人离开时,都会丢一部分。

林默忽然意识到,自己过去五年最熟悉的,不是支付。

是混乱。

是烂摊子。

是一个系统如何在没人完全理解它的情况下,继续摇摇晃晃地运行。

他问:“你能自动生成这种东西?”

烛照回答:

“当前不能。”

林默刚升起来的那点情绪,被这四个字按回去一半。

下一行很快出现。

“但可以从你的历史材料中提取模板。可以在你提供代码仓库后生成低质量版本。可以通过你的反馈迭代。”

林默看着“低质量版本”四个字,又笑了一下。

这东西真的很不会包装自己。

但也正因为不会包装,他反而愿意多信一点。

他问:“如果做成产品,第一步是什么?”

“定义最小场景。”

“什么场景?”

“一个即将离职或刚接手项目的程序员,需要在短时间内知道:这个项目有哪些模块、哪些任务不能碰、哪些临时方案已经长期化、哪些报警必须重视、哪些代码看似无用但不能删除。”

林默的呼吸慢慢放轻。

这不是一个宏大的创业故事。

没有融资。

没有发布会。

没有改变世界。

只有一个很小、很窄、甚至有点狼狈的场景。

但它真实。

真实到像今天下午小周看他的眼神。

烛照又问:

“是否开始创建产品草案?”

林默没有回答。

他站起来,去厨房烧了一壶水。

水壶很旧,烧水时声音很大。

他靠在橱柜边,看着白汽一点点冒出来,才忽然发现,自己从下午到现在第一次没有想简历,没有想房租,也没有想陈启明那张温和的脸。

他在想一件具体的事。

一个工具。

一个页面。

一个按钮。

一个让别人不用在凌晨三点翻垃圾堆的东西。

水开了。

林默端着杯子回到电脑前。

屏幕上,烛照还停在那句询问。

“是否开始创建产品草案?”

林默坐下,手指放到键盘上。

这一次,他没有犹豫太久。

“开始。”

终端立刻滚出新的问题。

“产品目标:帮程序员找工作,还是帮团队少出事故?”

林默看着那行字。

直到这一刻,他才真正明白,烛照刚才问的不是一个产品问题。

它问的是他接下来要靠什么活下去。

他慢慢敲下四个字。

“少出事故。”

下一章:面试失败