我只能推测自己在 5 月被 Meta 裁员的原因,但我怀疑其中一个原因是我在把 AI/LLM 当作编码工具采用方面,比一些同事稍微更抗拒一些。别误会,我在那里的最后几个月里,至少 90% 的代码是用 AI 生成的,这是拿到体面绩效评级的最低要求。但 AI 并没有让我的代码量提升 10 倍,甚至连 2 倍都没有。
我关注的是代码质量。我看到一些高度依赖 AI 的同事提交的代码,发现那是脆弱的代码。其中有许多微妙的问题,长期来看会导致技术债务,甚至一些非常优秀的程序员也忽略了一些显而易见的问题。例如,我看到我团队里最优秀的程序员之一试图合并一段代码,那段代码用 JavaScript 事件来实现鼠标悬停的 CSS 效果,而不是用 :hover 选择器,这是一种完全不可扩展的鼠标悬停写法。
现在我受雇于另一家大型科技公司,我已经完全转向 100% 用 AI 生成代码,因为这是如今的期望。尽管如此,我能看到很多人开始意识到,这并不是持续开发大型 SaaS 产品的可持续方式。AI 往往能很好地解决那些能放进其上下文窗口的问题,但它完全无视那些无法在如此相对狭小的范围内被理解的长期问题。
在这篇文章中,我将列出 AI 的使用会导致代码库脆弱的四种方式,这样的代码库无法承受高可用、高可扩展的 SaaS 应用的需求。
顺便说一句,这篇文章的每一个字都是人写的。尽管下面这张图是 AI 生成的,但这篇文章不是 AI 垃圾。

AI 让代码库变得脆弱的四种方式
以下是我见过的 AI 生成脆弱代码库最常见的四种方式。
1. AI 写肤浅的测试
现代 LLM 最明显的失败之一,是它们倾向于编写过于简单的自动化测试用例,无法覆盖对人类真正重要的事情。我经常看到 AI 智能体编写大量针对 get/set 方法的测试,这些测试微不足道,通常并不需要太多测试。当 AI 编写端到端测试时,它们往往只覆盖代码库中已经覆盖的用例。换句话说,AI 编写的测试只覆盖某一类用户,或者只覆盖表层交互。这在测试覆盖率中造成了巨大的缺口,而开发者对此毫无察觉,因为这些缺口不会被行级覆盖率指标捕捉到。
2. AI 编写过于复杂的代码
AI 还倾向于编写过于复杂的代码。明明一个辅助方法就足够,它却经常使用两三个。它试图遵循 DRY 等编码准则,却矫枉过正,没有意识到这种僵化带来的额外复杂性会让人类开发者更难调试或理解代码。
3. 对 AI 的依赖降低了人类的理解
这就是 AI 代码库的第三个问题:人类不理解它们。一家公司越久依赖 AI 智能体生成代码,理解代码库的开发者就越少。这意味着开发者无法做那些构建健壮代码库所必需的事情。他们对数据结构和算法的理解不够深入,无法看出某个拉取请求是否引入了一个与既有结构不兼容的新抽象。
4. AI 推进速度过快,难以维持高质量标准
AI 的推进速度太快,人类开发者难以维持高质量标准。每个拉取请求都比上一个来得更快,而审查时间却更短。这导致开发者草草浏览代码,遗漏关键细节,从而造成长期技术债务。测试缺口、变量命名不当等小质量问题在代码库中不断累积,直到它变成一团意大利面条式的代码。
代码库脆弱的四个迹象
如果你不确定编码智能体是否在损害你的代码库,那么可以留意以下 AI 生成代码库脆弱性的症状。
1. AI 生成的代码库事故更多
当你把部门切换到智能体编程后,事故数量是不是开始慢慢上升了?起初,当我们都用智能体生成大量代码时,似乎和传统编程没什么不同。PR 来了、被合并了,一切看起来都没问题。但是哦,月底来了一个 p0,接着下个月又出了两个 SEV。再下个月更多。现在,经过一两年的智能体编程,似乎每个周末都会发生事故。AI 编程智能体就是影响客户的事故变多的原因。
2. AI 代码库中事故恢复耗时更长
不仅事故更多,而且事故缓解所需的时间也更长。事实是,你团队里的真人开发者现在对代码库的理解更浅了。如果你的编程智能体找不到客户面临的问题,那么人类就得在一个高度复杂且测试不足的代码库中翻找。他们本质上是在进入陌生领域,所以要花更长时间才能弄清楚出了什么问题。因此,公司因解决时间更长的事故而损失越来越多的钱。
3. AI 生成的代码库会产生只有用户才能看到的错误
当人类不花时间在代码上时,他们就看不到所有的使用场景。他们无法理解真实人类是如何使用代码的,因为他们没有确保 AI 正确地埋点分析并捕获所有错误。因此,代码库中开始出现看不见的错误。错误未被捕获,只有真实世界用户才能看到,而不是自动化测试或开发者手动测试中所测试的那类用户。
4. AI 导致糟糕的用户体验
这就引出了 AI 代码库的终极问题:它们不是为人而造的。AI 代码库是由 AI 为 AI 打造的软件。它们既没有针对人类用户使用产品的方式进行定制,也没有针对人类开发者维护产品的方式进行定制。用户体验和开发者体验双双退化,形成恶性循环,走向"劣化"。
为人打造的产品需要人的温度
事实是,一个产品要满足人类客户,就必须由人的视角来指导。没人喜欢在餐厅从机器上点餐。在网上买衣服,合身程度总是比线下试穿差。SaaS 产品也是如此。任何时候你把 SaaS 产品交到机器手里,你都在失去对用户和开发者都宝贵的人的温度。这对只靠价格竞争的最便宜产品或许行得通,但高质量的软件产品将继续保有人 的温度。最好的、最贵的产品将由人类开发者为人类用户量身打造。它们会令人愉悦、讨人喜欢。它们不会脆弱,因为它们不会主要由 AI 开发。