
某家银行的核心系统里有一个字段,长度是 17 位,多一位少一位都会让月末对账出错。没有人记得为什么是 17。注释在 1994 年的一次迁移里丢了,能解释的人去年退休了。
这样的字段在全国的金融、电力、铁路、社保系统里有几百万个。它们构成了一个很少被讨论的事实:现代社会的关键基础设施,跑在一批没人完全读得懂的代码上。
趋势:从「重写」变成「翻译」
过去二十年,替换老系统的标准做法是重写:把业务重新梳理一遍,用新语言重新实现。周期以年计,失败率极高,很多项目做到一半被叫停。重写的难点从来不是写新代码,是把二十年的隐性规则重新发现一遍。
2020 年 4 月,美国新泽西州的失业申报系统在几周内被几十万份申请压垮,州政府公开招募会 COBOL 的程序员来改。那一次让很多人第一次意识到,老语言不是历史遗迹,是在运行的基础设施。
此后几年,厂商开始推出「翻译」路线:不重新设计,直接做语句级迁移,让新代码在行为上等价于旧代码。这条路绕开了最难的环节——理解,它只要结果一致。
到 2026 年,这条路已经能跑通。一批模型可以在几个月内处理过去要几年的代码量,配套的等价性测试工具也成熟了。迁移的瓶颈从「人力」变成了「验证」。
顺便说一句存量规模。常被引用的数字是「全球仍有 2000 亿行以上的 COBOL 在运行」,这个数字来自不同机构的估算,口径差异很大,按未确认处理。但无论取哪个版本,量级都足以支撑一个行业。
第一代:知道「为什么」的人
他们大多五十五岁以上,在这套系统上待了二十到三十年。他们读代码的方式和别人不同——看到一段奇怪的判断,能想起 1987 年某次审计之后加的临时规则。
这些知识从来没有被完整写下来。它藏在变量名里、藏在没人敢删的死代码里、藏在「这里不能动」的口头传承里。它不被记录,是因为当年没人认为需要记录。
AI 迁移对这批人的影响是双面的。一方面,他们终于不用再手改一行行代码;另一方面,他们成了这套系统唯一的人形备份,而备份是不需要留到迁移完成的。项目结束那天,他们的价值会一次性归零。
更微妙的是,他们中的很多人并不反对。他们清楚这套系统迟早要换,也乐见它被换掉。代价不是被强迫,是被顺利地替代。
第二代:把「为什么」压成「是什么」的人
这一代是三四十岁的迁移工程师。他们的工作方式是:拿旧系统的输入输出做基准,让模型生成新实现,然后跑对比测试,差异清零就算完成。他们的 KPI 是等价率,不是理解度。
这套方法在工程上是对的。等价性测试能覆盖绝大多数行为,剩下的一小部分被标记为「已知差异」,写进文档,然后被忘掉。那 0.3% 的差异,通常在三年后的某次对账里才会现形。
他们确实解决了上一代人解决不了的问题,也顺手删掉了系统里唯一一份「理由」的载体。旧代码虽然难读,但它的每一处怪异都有痕迹;新代码干净、规范、一致,因此什么也看不出来。整洁本身就是一种信息损失。
这一代人的代价不在当下,在他们四十多岁的时候。他们既不像上一代那样懂业务的历史,也不像下一代那样从出生就与 AI 协作。他们是唯一亲手抹掉证据的一代,也是唯一知道自己抹掉了什么的一代。
第三代:只读译文的人
2030 年之后入职的人,看到的是一套干净的 Java 或 Go 服务,注释齐全,测试覆盖率 85%。他们看到的不是历史,是历史的译文。
译文读起来合理。合理的代码有一个特点:它看起来每处都有理由,实际上很多处只是「模型当年这么写的」。当一个系统的每一行都有解释,它反而失去了可疑之处。
这一代人遇到的第一个真问题,会出现在需要判断「这段逻辑是不是错的」的时候。他们能验证「行为是否与旧系统一致」,但没法验证「旧系统的行为本身是否正确」。基准是上一代给的,而上一代已经不在了。
| 三代人 | 他们知道什么 | 失去了什么 |
|---|---|---|
| 维护者(55 岁以上) | 每一处怪异写法的来由 | 系统被替换后,知识一次性失效 |
| 迁移者(30–45 岁) | 如何证明新旧行为等价 | 只保留行为,不保留理由 |
| 接收者(2030 后入职) | 如何在新系统上加功能 | 没有基准,无从判断底层对错 |
一个不太好接受的推论
我们一直把「可维护性」定义为「有人能读懂」。AI 迁移之后,这个定义会变成「有人能验证」。读懂需要理由,验证只需要基准;而基准来自一个正在消失的过去。
推论是这样的:软件行业会逐渐失去它的考古层。考古层的意思是,你能通过不同年代的代码叠加,读出一个组织在什么时候为什么改变过主意。翻译会把所有层次压平成一层当前状态。压平之后,系统只能向前演进,无法向后追问。
这不一定导致灾难。大多数系统本来也不需要考古,它们只需要继续运行。但有一类系统例外——金融清算、电网调度、空管、社保核算。这类系统的正确性,依赖于对历史决策的理解,而不只是对当前行为的复制。它们是最需要翻译的,也是最不该被翻译的。
更难以接受的版本是:这件事已经没有选择。第一代在自然退休,第二代在按项目交付,第三代还没有入职。不是 AI 抢走了迁移的决定权,是时间表本来就排到了这里。
写在最后
技术进步常常被描述成「把难的事变容易」。老代码迁移是少数几个把难事变容易、同时把另一件更难的事变得不可见的例子。看不见的代价,通常比看得见的收益晚十年结算。
如果你所在的组织正在做这件事,有一件成本极低的事值得做:在迁移之前,让维护者把那几十个「不知道为什么但不能改」的地方讲一遍,录下来,存档。不是为了给 AI 用,是为了给十年后那个不敢改一行代码的人用。
一个系统最脆弱的地方,从来不是代码写得多差,是没有人知道它为什么这样写。翻译能让它跑得更久,但不会让它变得更清楚。
你手上的系统里,有没有一处「不知道为什么但不能改」的地方?知道答案的人还在吗?

评论 (0)