我需要阅读AI生成的代码吗?

他们带着一种自豪和防御性的混合情绪这样说,就像人们过去吹嘘驾驶手动挡汽车一样。

这感觉像是工艺的声明:我是专业的。我知道是什么进入了我的构建。

但这实际上是合理的吗?

在过去的四十年里,阅读代码是编程的定义。我们花在阅读上的时间比写作还多。如果您不阅读代码,您就不知道它如何工作,如果您不知道它如何工作,当它坏了您就无法修复。源代码就是真相。

编程书籍封面

我个人必须用这本书学习。学习基本东西花了很长时间。

但像 Cursor 和 Claude Code 这样的工具不仅仅是更快的打字员。它们是一个新的抽象层。历史表明,每当我们获得一个新的抽象层时,合理的行为就是停止查看下面的层。

您不会阅读 C 编译器生成的汇编代码。您可能在 1980 年做过,只是为了确定。如果您今天正在调试高频交易引擎中的竞争条件,您可能仍然会做。但对于绝大多数软件,阅读编译器的输出不仅是不必要的;它是浪费时间。这是不合理的。

我现在问您。坚持阅读每一行 AI 代码的程序员是否表现得像 1990 年坚持检查机器代码的工程师?他们是否正在坚守一种正在迅速过时的控制模型?

这是一个快速投票。

1、从文学到基础设施的转变

我的论点是是的,这是不合理的。

要理解为什么,我们必须看看代码实际上是什么。很长时间以来,代码是文学。它是由人类为人类编写的。我们写评论。我们争论风格指南。我们痴迷于变量名,因为我们要知道六个月后,另一个人(或我们的未来自我)必须解析该文本来构建系统的心理模型。

当您使用 LLM 生成一个函数时,代码不再是文学。它是基础设施。它是一个暂时的工件,您意图和机器执行之间的桥梁。

如果 AI 编写一个 React 组件来显示用户的个人资料,并且组件正常工作,测试通过,并且它在屏幕上看起来正确——useEffect 钩子内部的变量命名略有非标准有关系吗?它使用了 for 循环而不是 .map() 有关系吗?

该代码的读者不再是人类。读者是浏览器。人类的角色已经从作者转变为架构师。架构师不检查每一块砖。他们检查蓝图和结构完整性。

2、经济论证

软件工程的主要约束一直是一个人类可以键入的击键数量和一个人类可以在头脑中保存的行数。这就是为什么我们有"10x 工程师"神话;有些人只是处理文本更快。

AI 删除了打字约束。它以令牌预测的速度生成代码,这比人类思想快几个数量级。如果您坚持阅读每一行,您是在自愿地重新引入工具设计要消除的瓶颈。您正在将 AI 限制到人类阅读的速度。

这破坏了杠杆。使用 Claude 或 Cursor 的全部意义在于您可以以思想的速度移动。您说"让侧边栏变蓝"或"重构它以使用 reducer",它就发生了。如果您随后停下来检查 reducer 的实现细节,您并没有真正使用该工具。您只是在使用一个非常花哨的自动完成。

合理的经济行为是将代码视为一个黑盒,只在它发出声音时打开它。我的观点是,您应该产生更多的输出,因为这是更高级别的抽象允许您做的事情。

3、对黑盒的恐惧

当然,反驳论是显而易见的:“但是 AI 会犯错误!”

是的,它确实会。它会产生幻觉。它导入不存在的库。它编写微妙的逻辑错误,通过语法检查但在生产中失败。

阅读每一行的人认为眼睛是发现这些错误的最佳工具。但这是导致人们手动检查电子表格而不是编写公式的同样的谬误。人眼实际上在发现 AI 代码中的错误方面非常糟糕。

为什么?因为 AI 代码看起来不像糟糕的人工代码。糟糕的人工代码是杂乱的;它有拼写错误,它徘徊。AI 代码看起来很自信。它看起来很完美。它遵循所有模式。AI 代码中的错误是结构的、逻辑的或上下文的——这种错误是浏览文本时最难发现的。

阅读代码给您一种虚假的安全感。您看到一个标准的 API 调用,您的大脑会填补其余部分。"哦,它在调用 Stripe API,这看起来正确。"您错过了它传递了错误的货币代码,因为变量名 curr 是模糊的。

验证 AI 代码的合理方法不是阅读它,而是运行它。您验证行为,而不是文本。您编写一个测试用例。您要求 AI 生成一个测试用例。您查看日志。您检查 UI。去看 Claude Code 团队如何构建软件,这很迷人,他们使用了大量的测试用例。

在这个新世界中,“测试"取代了"阅读”。如果您有好的测试,您不需要阅读实现。如果您没有好的测试,阅读实现只是猜测。

4、理解的侵蚀

这里有一个更深层次的恐惧,不是关于错误。它是关于理解。如果我不阅读代码,我不知道我的软件如何工作。如果我不知道它如何工作,我还是程序员吗?

这是最难咽下的药丸。几十年来,"知道它如何工作"意味着从下往上了解堆栈。我们尊重知道垃圾收集器在做什么的灰胡子。

但我们已经放弃了很多。您知道您的引擎如何解析您的 CSS 吗?您知道您的数据库如何优化您的 SQL 查询吗?可能不。您信任该抽象。

我们只是将信任线向前一步。您将在系统的系统级别而不是在语法级别了解您的系统如何工作。您将了解数据流、状态管理、API 边界。您不会关心连接它们的样板文件。

这感觉像是一种损失。感觉我们正在变得更笨。但实际上,它释放我们去思考更大的事情。当您不用担心语法错误或循环中的差一错误时,您可以担心您首先是否在构建正确的功能。您可以专注于用户,而不是机器。

5、信任电池

这并不意味着您从不阅读代码。

当您与初级工程师合作时,您会审查他们的第一个 pull request 的每一行。在他们的第十个,您会略读它。在他们的第 100 个,您只检查截图和测试结果。您与他们建立了一个"信任电池"。

我们目前处于 AI 的早期阶段。信任电池很低。我们正在检查工作,因为模型在某些特定方面仍然令人惊讶地愚蠢。但模型比人类直觉提高得更快。

Claude 4.5 比 Claude 3.5 更好。Opus 比 Sonnet 更好。随着错误率下降,验证的成本保持静态(阅读代码花费相同的时间),但验证的价值下降(您发现的错误更少)。

有一个交叉点,其中阅读的成本超过您捕获的错误的价值。对于许多例行任务——编写样板文件、生成测试、转换文件格式——我们已经过了那个点。

合理的程序员识别哪些任务是"高风险"并阅读该代码。对于"低风险"任务,他们按回车键并继续。不合理的程序员将所有代码视为同样可疑。

6、无限代码库的未来?

然而,有一个即将到来的问题。如果我们停止阅读代码,我们将生成更多的代码。我们正进入无限代码库的时代。

当代码昂贵编写且昂贵阅读时,我们将它保持小。我们重视优雅和简洁。我们删除死代码。

当代码免费编写且我们不费心阅读它时,代码库将爆炸。这有点像现在正在发生的事情。

这听起来像噩梦,但只有当您打算手动维护它时。如果 AI 是维护者,代码库的大小就不那么重要了。AI 有无限的耐心。它可以快速浏览代码库并比我们更快地修复东西。

我们可能正在走向一个未来,其中代码库实际上是"二进制"的——一个巨大的、不可理解的大块逻辑,我们只通过高级指令与之交互。我们将不再阅读它,就像我们不再阅读 Microsoft Excel 的编译二进制一样。我渴望听到您是否同意我这一点。这似乎是我们要去的地方的一个奇怪的结论。

7、那么,阅读每一行的人是不合理的吗?

如果他们这样做是为了学习?不。阅读代码仍然是学习模式的好方法。如果他们这样做是为了使命关键的安全逻辑?当然不,但请不要告诉我每一行都是使命关键的,那是荒谬的。

但如果他们这样做是因为他们觉得他们应该?如果他们这样做是因为那是"好的程序员"所做的?那么是的。他们的行为是不合理的。

他们重视控制的感觉而不是输出的现实。他们正在为一个不再存在的世界进行优化。就像您不再需要在汽车上换挡一样。

我相信新的形式的"编程"涉及放手。因此,今天意义上不会有"程序员"。他们将是其他东西。也许"系统指南"。也许只是"建设者"。

这感觉很草率。这感觉很懒。但每一次生产力飞跃感觉都像这样,然后它成为标准。


原文链接:我需要阅读AI生成的代码吗? - 汇智网

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐