跳到正文
Hacker News· plun9·· 2 天前AI 评分38

前 Meta 工程师:AI 写代码正在制造脆弱的代码库

AI usage generates a fragile codebase

AI 导读

一位前 Meta 工程师认为,重度依赖 AI 生成代码会让代码库变得脆弱。他列举了四个原因:AI 写出的测试流于表面、代码过度复杂、开发者对代码库理解变浅,以及 AI 产出速度过快导致评审质量下降。他还指出这类代码库的事故会逐渐增多、故障恢复更慢,且错误往往只有真实用户才能发现。

正文 · AI 翻译

我只能推测我在5月被Meta裁员的原因,但我怀疑其中一个原因是我在将AI/LLM作为编码工具采用方面比一些同事更抗拒一些。别误会,我在那里的最后几个月里至少90%的代码是用AI生成的,这是获得体面评级的最低要求。但AI并没有让我的代码量提升10倍,甚至连2倍都没有。

我注重代码质量。我看到一些高度依赖AI的同事推送的代码,发现那是脆弱的代码。有许多微妙的问题会在长期导致技术债务,甚至一些非常优秀的程序员也忽视了一些显而易见的问题。例如,我看到我团队中最好的程序员之一试图合并使用JavaScript事件实现鼠标悬停CSS效果的代码,而不是使用:hover选择器,这是一种完全不可扩展的编写鼠标悬停效果的方式。

现在我受雇于另一家大型科技公司,我已经完全转向100%使用AI生成代码,因为这是如今的期望。尽管如此,我看到很多人开始意识到,这并不是持续开发大规模SaaS产品的可持续方式。AI倾向于很好地解决能够适应其上下文窗口的问题,但它完全无视那些在相对较小的框架内无法理解的长期问题。

在这篇文章中,我将列出AI使用导致代码库脆弱的四种方式,这些代码库无法适应高可用性和高可扩展性SaaS应用的需求。

顺便说一句,本文的每一个字都是人类写的。尽管下面的图片是由AI生成的,但本文不是AI垃圾。

A worried robot places another piece of code into a codebase portrayed as a wobbly house of cards.

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 开发。

来源:Hacker News · evanxmerz.com