一位前 Meta 工程师报告称,虽然 AI 工具可以生成代码库的绝大部分内容,但它们经常产生“脆弱”的代码,未能考虑到长期的可扩展性和高可用性。这种向 AI 驱动开发的转变正日益成为企业的期望,然而它可能正在创造一个“恶化”(enshittification)循环,即软件被优化为机器逻辑,而非人类用户或可维护性。

代码库脆弱性的机制

AI 模型往往倾向于解决符合其即时上下文窗口的问题,经常忽略长期的架构影响。这导致了四种主要的脆弱性:浅层测试、过度复杂、人类理解力下降,以及超出人类审查能力的快速代码产出速度。

例如,AI 代理可能会为简单的 get/set 方法编写大量测试,却未能覆盖复杂的端到端场景。这会创造一种虚假的安全感,因为即使关键用户路径仍未经过测试,行级覆盖率指标依然很高。

“AI 往往能很好地解决能够放入其上下文窗口内的问题,但它完全意识不到那些无法在相对较小的框架中理解的长期问题。”

— AI usage generates a fragile codebase

对维护和事故响应的影响

高度依赖 AI 的代码库可能会随着时间的推移经历生产事故的增加。由于团队中的人类开发者可能对底层算法和数据结构的理解较浅,识别故障的根本原因变得更加困难。

当生产问题发生时,开发者必须在复杂且测试不足的领域中摸索。这种熟悉度的缺乏延长了缓解事故所需的时间,可能导致 SaaS 提供商面临更大的财务和运营损失。

人类触感 vs. 机器逻辑

作者认为,由 AI 为 AI 制作的软件缺乏高质量产品所需的“人类触感”。虽然 AI 可以生成功能性的代码,但它可能无法根据人类用户实际如何与产品交互,或人类开发者如何需要维护它来定制体验。

这种权衡涉及在 AI 生成速度与人类设计的架构韧性之间的选择。对于高质量软件,作者建议人类的视角仍然至关重要,以确保产品具有魅力、令人愉悦且结构稳健。

Hacker News 读者的反应

  • 亲身经验: 一位在七个月内管理过 500,000 行移动应用代码库的评论者认为,AI 生成代码的脆弱性在实践中并不重要,而且随着模型的进步,维护实际上变得更容易了。 评论 ↗
  • 亲身经验: 另一位用户分享说他们的经验与文章的观点相反,指出 LLM 生成代码的冗长和僵化充当了一种强制性的规范,从而减少了生产中的 Bug。 评论 ↗
  • 质疑: 几位评论者建议,对 AI 生成脆弱性的担忧可能被夸大了,他们指出,无论使用什么工具,大规模的人类编写代码库也不可避免地会退化为“意大利面式代码”。 评论 ↗
  • 替代方案: 一位评论者建议,使用静态类型语言和函数式编程可以确保代码强度,因为它们将测试限制在仅那些类型系统无法验证的事项上。 评论 ↗

以上为 Hacker News 讨论中观点的摘要,并非经过核实的事实。 阅读完整讨论 ↗