乐于分享
好东西不私藏

AI时代对抗软件规模与复杂度的战争:救命、治病、养生(下篇)

AI时代对抗软件规模与复杂度的战争:救命、治病、养生(下篇)
写在前面:2023年我写了一篇《对抗软件规模与复杂度的战争:救命、治病、养生(上篇)》,当时原计划写下篇的,后来因为工作繁忙一直搁置。今天AI来了,我觉得很有必要重新站出来,把搅浑的水变得清澈。

AI时代:三段论的重心迁移

十多年前我在美国受Google邀请参加一个软件工程会议,Google的PPT第一页画了一幅图:别人眼中的Google是飞机大炮火箭,而Googler眼中的Google,却是老牛拉车,步履蹒跚。为什么?因为Googler看透了软件研发的本质,软件研发的本质属于“手工业”。虽然个人英雄主义的石器时代已经结束,但群体协作时代本质上依然没有摆脱手工业的基本属性。
软件规模的增长必然伴随着复杂度更快的增长,就像身高增长一倍,体重可能增长五倍。更根本的是,软件是生长出来的,而不是设计出来的,背后的原因是因为软件的设计活动与制造活动彼此交融,无法分开。
面对这种复杂度,我当时提出了一个三层治理框架:救命(应急处置)—治病(架构治理)—养生(日常预防)。这套框架的威力,恰恰在于它足够抽象,抽象到能够容纳一个它诞生时并不存在的变量:AI。
如今,当代码生产的速率从人的速率跃迁到模型的速率,三段论的结论并没有失效,但它的重心发生了系统性的迁移。迁移的根本原因只有一个:治理的对象变了。过去三段论治理的是写代码的人,AI时代它必须同时治理生成代码的模型,以及这两者耦合而成的人机协同体。治理对象变了,每一个层次的内涵都要重写。

救命:可解释性真空与新的故障类型

应急处置是一切治理的底线,而它依赖一个从来不被言明的前提:代码的作者在场
一个P0事故爆发时,你可以找到写下这段代码的人,问他当时为什么要这么写,据此重建意图、缩小怀疑范围;你可以翻出设计文档和ADR,找到当初埋下的取舍;更朴素地,代码的坏味道本身就是一张地图,它把可疑代码主动标记出来,替你完成最艰难的第一步定位。
AI时代,这三个前提同时失效了。那个按下Tab键接受补全的人,并不持有生成代码的心智模型;那段生成的代码背后没有设计意图,只有一串被最大化的token概率;而它的格式工整、命名规范、注释齐全,恰好把坏味道这张最古老的地图涂成了统一的灰色。结果是应急处置最昂贵的定位环节被显著拉长:从前你花十分钟就能圈定可疑模块,现在你可能要花几小时,因为没有任何一个人类真正理解这段代码。我把这称作故障的可解释性真空,不是没人愿意解释,而是解释这个故障所需要的心智模型,在代码诞生那一刻就没有存在过。
可解释性真空之外,AI还带来了一个全新的故障类型:Coding Agent的配置漂移。过去的故障几乎都源于代码变了,通常是某个代码提交引入了一个bug。而AI时代,故障可以源于“约束代码生成的东西变了”,提示词模板被顺手改了一句、上下文库被喂进了错误的知识、某个模型版本静默升级后生成风格发生了偏移。这类故障的诡异之处在于:让代码被生成出来的那套配置成为了关键。于是“回滚”的对象第一次从“代码”扩展到了“模型版本、提示词版本、上下文快照”等。
但这枚硬币有另一面。AI制造了更多的火灾,同时也提供了更强的灭火器:它读日志的速度远超人类,能在分钟级关联多个服务的异常;它能并行生成根因假设清单;它能辅助判断该回滚到哪一个版本。一个清醒的结论是:AI让救命这件事变得更快,却没有让救命这件事变得多余。恰恰相反,可解释性真空让每一次救命都更依赖那些“确定性裁判”,比如各类测试和质量门禁,也就是在事故发生前留下的、可被自动验证的痕迹。没有这些痕迹,AI的灭火器面对一段无人理解的代码,也只是高级的猜测。

治病:最强的理解工具,也是最危险的理解工具

治病最昂贵的成本,从来不是写新代码,而是理解旧代码,理解一段十年陈的、被反复补丁的代码到底在做什么。这个成本高到让无数架构治理项目死在第一步。
AI时代,这个成本第一次出现了断崖式的下降:它能“读懂”一段没有文档的遗留模块并给出结构化解释;它能反向抽取限界上下文,从混乱的代码里“看”出自然的边界;它还能安全地执行大规模机械重构,比如重命名、抽取、死代码清理,这些确定性的、可被自动验证的重构,AI做得又快又稳。
但这里藏着一个极易被忽视的陷阱:AI的“理解”是统计性的,不是因果性的。它“读懂”一段代码的方式,是预测最可能被用来解释这段代码的下一个token,而不是追溯这段代码为什么被写成这样。这两者在绝大多数时候不可区分,直到它们突然可区分的那一刻:当它面对一段确实有bug的遗留代码,它可能给出一个听起来完全合理、却从根本上错误的解释,而且是以极高的置信度给出的。你无法从语气里分辨它在“解释”还是在“编造”。
因此,AI时代的“治病”必须建立一个新的分工原则:让AI做“可验证的理解”,让人做“不可验证的判断”。抽边界、清死代码、生成文档草稿,这些产出的对错可以被确定性裁判并立即验证,那就可以放心交给AI;而“这个业务规则为什么要这么写”、“这个重构是否改变了运行时语义”、“这个异常的兼容逻辑是不是某个已经离职的人留下的补丁”,这些判断没有可被自动验证的答案,必须留在人的手里。
这个分工原则,本质上是把“确定性裁判”的逻辑移植到治病环节:AI的每一次“理解”,都必须能通过一个确定性的裁判来证伪,否则它就只是穿着解释外衣的猜测。

养生:治理对象从“人的习惯”扩展到“模型的约束”

这是AI时代三段论最根本的变化,也是整个框架重心迁移的落点。
过去,养生治理的对象是人。它对抗的是人的三种天性:遗忘、懒惰、侥幸,人会忘记写测试,会懒得做代码审查,会心存侥幸地跳过安全检查。养生的全部努力,就是设计一套让正确的事“自然发生”的机制,去抵消这三种天性
AI时代,代码生产的主体除了人,还有模型。而模型呈现出一种令人不安的对称性:它不遗忘、不懒惰、不侥幸,却也不理解、不负责、不判断。它不会忘记写测试,因为它根本不知道“测试”是什么;它不会偷懒,但也没有任何一行代码是“它的责任”;它不会侥幸跳过安全检查,但它也不知道“安全检查”在保护什么。人因为“知道却做不到”而需要被治理,模型因为“能做到却不知道”而需要被治理。养生的对象,就这样从单数变成了复数。
这个迁移落到实践上,就是养生工作出现了一个全新的、独立的预算项:驾驭系统的维护。维护约束AI的规则(提示词模板、代码规范、上下文库),维护验证AI的裁判(测试套件、类型系统、静态分析、CI质量门),维护喂养AI的知识(架构模型、领域语言、设计决策)。而这一批“养生对象”有一个共同的特征:它们本身也是会腐化的代码。自然语言规则会迅速腐化,规则越多,相互矛盾的概率越大。于是AI时代的养生暴露出一个递归的难题:你用来约束AI的东西,本身也需要被约束、被治理、被养生。养生的结构从扁平的“人→代码”,变成了多层的“人→规则→AI→代码”,每一层都在腐化,每一层都需要独立的养生机制。
这个递归结构引出一个全新的健康度指标,我把它称为驾驭债如果说技术债是“代码欠下的债”,驾驭债就是“约束AI的那套规则欠下的债”。提示词模板里那句早已过时却无人清理的规则、上下文库里那条与最新架构冲突却仍在喂养AI的知识、那个只对旧模型版本有效却仍挂在CI上的检查,这些都是驾驭债。一个组织在AI时代的养生水平,可以用一个简单的问题来判断:它的驾驭债,是在被主动偿还,还是在被无意识地累积?
最后,回到精力分配。AI时代,那个“80%养生、15%治病、5%救命”的比例需要一个修正:养生的份额不是80%,而应当更高。原因不在于治病和救命变难了,恰恰在于它们变便宜了,因为AI诊断、AI辅助重构、AI应急分析把治病和救命的一部分工作自动化了。这制造了一个危险的剪刀差:AI让治病和救命更便宜,同时让养生更贵,因为驾驭系统本身需要持续的维护投入。便宜的治病和救命,会鼓励你更敢于欠债;更贵的养生,会诱惑你更不愿意投资。两头一夹,养生就成了最容易被砍掉的预算项,而它恰恰是AI时代唯一能阻止复杂度失控的那一层。
AI时代复杂度治理的失守,几乎从不发生在救火现场,也不发生在重构过程,而发生在那个“暂停养生”的决定里。

人文反思:可持续不仅是一种选择,它是唯一存活下来的方式

“救命—治病—养生”这套框架不只是在说软件。它在说一切处于长期演进中的复杂系统。人体的慢性病管理,地球的生态系统压力,一个文明面对不可逆资源损耗时的选择。
所有这些系统的统治者都面对同一组诱惑:在危机的即时压力下,优先救火,把全身力气压在延长当前生存时间上。至于是不是在每一次救火中把小病拖成大病、把可以被治愈的问题拖成不可逆的内伤,这些无法在眼前被量化的代价,系统性地被拖延到“下一次”。而下一次来的时候,代价是以当前全部剩余资源的指数级规模计价的。
技术债务治理三段论框架在软件领域之所以有如此强的解释力,是因为它第一次给所有面对复杂系统的人提供了一种诚实面对“我们无时无刻不在欠债”的方式,不是在说“别欠债”,而是在说“欠了的,按时还”
给工程师:识别你当前所处的三段论层级。如果你发现你的日常80%是在救火,恭喜你,你的职业倦怠感将会在可预见的几个月内达到一个高峰。你的脱困路径不在此刻的简历上,在于你花两个小时,把今年最让你痛苦的一次救火经历写成一份带根因分析的复盘,把这份分析中的每一条行动项找人评审,把它推入下一个sprint的计划,并且找到一个愿意保护“做正确的事所需时间”的管理者做你的同盟。这是个人从救火到养生的路径。
给管理者:你的团队日常中“重构”被提及的频率是一个实时诊断指标。频率太高,治病不足。频率接近于零,要么你的系统完美(一般不太可能),要么养生已经缺席。理想状态是:重构融入了日常,不被单独命名、不被单独统计,就像你不会在日报中写“今天呼吸了”。而你作为管理者,维系这种状态不受业务高峰期的“暂停养生”冲动冲击,就是你所有职能中最有价值的一项。

AI帮我们拔高了能力上限,却在规模、效率、质量三个维度上同时制造了新的挑战。当84%的开发者正在使用或计划使用AI编码工具,当95%的生成式AI试点未能进入生产,我们需要的不是更快地写代码,而是更清醒地治理复杂度。救命、治病、养生,在AI时代不是过时的旧框架,而是唯一经得起检验的新答案。

推荐阅读
对抗软件规模与复杂度的战争:救命、治病、养生(上篇)
AI 时代:技术债的滞后审判,比你想象中来得更快
如何用大模型搞垮一个团队?
2024-2034,软件工程的“雪崩日”及其文明涟漪