即使AI代码能运行,我仍会拒绝它
速览
文章探讨了开发者在面对AI生成的代码时的复杂心态。即使代码能够正常运行,开发者仍可能因为可读性、安全性或架构合理性等问题而拒绝接受。这一现象反映了在AI辅助编程时代,人类对代码质量和长期维护成本的重视。
AI 深度解读
当 AI 代码能运行,我依然选择拒绝
背景
随着 AI 编码助手(Coding Agents)和大型语言模型(LLM)在软件开发中的普及,代码生成的速度正在以前所未有的速度提升。然而,这种效率的提升并没有线性地转化为生产力的增长,反而将软件工程的瓶颈从“实现”转移到了“审查”。
在 Hacker News 上引发热议的一篇帖子指出,真正的挑战不再仅仅是审查同事或他们的 AI 代理提交的 Pull Request (PR),而是审查自己在使用编码代理完成工作后生成的 git diff。作者作为一名资深开发者,分享了自己在使用 AI 辅助编程时的真实体验:即便 AI 生成的代码能够完美运行并通过 CI 测试,他依然会频繁地拒绝这些代码,并选择推倒重来。
核心内容
作者深入剖析了为何在 AI 时代,人工审查变得比编码本身更加艰难,以及他坚持“拒绝 AI 代码”背后的深层逻辑。
认知过载与上下文缺失
在传统的开发流程中,面对一个任务,开发者通常会经历探索代码库、思考多种解决方案、进行实验,最后才进入实现阶段。这个过程可能需要数天来整合所有的上下文信息(Context)。当最终提交 PR 时,开发者对自己所做的每一个更改都有极高的信心,也能轻松向同事解释其背后的逻辑。
然而,在使用编码代理后,这种“先思考后实现”的过程被压缩甚至跳过。即使作者遵循最佳实践——例如先使用“规划模式”(Plan Mode),将大任务分解为阶段,并推送微小的变更——在审查那些自己未曾亲自思考过的代码时,他依然感到严重的认知过载(Cognitive Overload)。
人的因素优于模型因素
作者承认,即便借助 AI,完成大型任务依然需要数天时间。更常见的情况是,他会拒绝 AI 生成的所有更改,然后重新开始。
关键在于,第一次会话与第二次会话之间的差异,往往不在于使用的 LLM 模型本身,而在于屏幕背后的人。通过花费更多时间来巩固对问题的理解,开发者能够主动引导代理走向更好的解决方案,而不是被动地被代理所驱动。
拒绝 AI 代码的五个具体场景
作者列出了他拒绝 AI 生成代码的五个核心原因,这些标准反映了软件工程中对可维护性和可理解性的追求:
- 无法用自己的话解释方法:如果开发者无法清晰地向他人阐述代码背后的思路,说明其并未真正理解该实现。
- 代码变更幅度大于问题本身:AI 往往倾向于过度工程化,导致 diff 的大小超出了实际解决问题的需求。
- 过早引入抽象:在证明抽象确实有必要之前,AI 就引入了新的抽象层,增加了系统的复杂度。
- 本地运行正常但增加推理难度:代码可能在本地环境中工作,但它使得整个系统的逻辑更难被人类理解和推理(Reason about)。
- 盲信输出而非基于理解:当开发者对 AI 输出的信任程度超过了自己对代码的理解时,这是一种危险信号。
人工审查的必要性
作者指出,工程师过快接受 AI 生成的更改并不罕见。因此,他倡导在 AI 自动审查的基础上,必须保留强制的人工审查(Required Human Review)。
现实情况是,能让 CI(持续集成)变绿的代码,仍然可能是一个糟糕的解决方案。软件工程的本质始终在于实现适当的、可扩展的、可扩展的(Adequate, Scalable, and Extensible)解决方案,而不仅仅是能运行的代码。
尽管编码代理令人印象深刻,但它们目前仍需要一位优秀的工程师来引导它们走向正确的方向。AI 可以作为强大的辅助工具,但尚不具备以可持续的方式完全自主完成高质量工程任务的能力。
关键要点
- 瓶颈转移:随着 AI 编码速度加快,软件工程的瓶颈已从“编写代码”转移至“审查代码”,尤其是审查自己生成的代码。
- 认知负荷:跳过“探索-思考-实验”的传统过程直接生成代码,会导致开发者在审查时面临巨大的认知负荷,因为缺乏对上下文的深度整合。
- 主导权在人:高质量的 AI 辅助编程依赖于开发者对问题的深入理解和主动引导,而非依赖模型本身的智能。
- 拒绝标准:
- 无法用自然语言解释代码逻辑。
- 解决方案过度复杂,超出问题需求。
- 过早引入不必要的抽象。
- 牺牲系统的可推理性以换取局部功能正常。
- 因信任 AI 而放弃个人的技术判断。
- 工程本质:代码能运行且通过 CI 测试并不等于好代码。工程的核心在于构建可维护、可扩展的系统,这依然需要人类工程师的主导。
- 人机协作模式:当前的编码代理是“副驾驶”而非“自动驾驶”。它们需要优秀工程师的持续引导,尚无法完全自主地可持续地交付高质量工程成果。
意义与影响
这篇文章揭示了当前 AI 辅助编程(AI-Augmented Programming)领域的一个核心矛盾:生成效率的提升并未自动带来代码质量的提升,反而可能降低代码的可维护性和团队的知识共享效率。
- 对开发流程的重塑:传统的“编码-提交”流程正在演变为“规划-引导-审查-重构”的新流程。开发者需要花费更多时间在“规划模式”和问题分解上,而不是急于让 AI 生成代码。
- 代码审查(Code Review)的价值回归:在 AI 时代,代码审查的重要性不降反升。审查的重点从“语法正确性”和“基本逻辑”转向了“架构合理性”、“抽象必要性”和“系统可理解性”。
- 工程师能力的重新定义:未来的高级工程师核心竞争力将不再是“手写代码的速度”,而是“定义问题”、“评估方案”和“引导 AI 工具”的能力。无法理解 AI 生成代码背后的逻辑,将成为新的职业风险。
- 对技术债务的警示:盲目接受 AI 生成的“能运行”的代码,可能会导致隐性技术债务的快速积累。这些代码虽然通过了自动化测试,但可能破坏了系统的整体结构和可读性,增加长期维护成本。
总之,这篇文章提醒技术社区:AI 是强大的杠杆,但杠杆需要支点。这个支点就是人类工程师对软件工程的深刻理解和对质量的严格把控。
