文章摘要
文章批评了依赖AI工具生成未经测试代码的不良现象,强调软件工程师的职责是交付经过验证的有效代码。作者指出必须通过手动测试和自动化测试来证明代码可靠性,否则就是将工作负担转嫁给代码审查者。这不仅是专业素养问题,更是对同事时间的尊重。
文章总结
标题:你的职责是交付经过验证可用的代码
在关于AI辅助软件开发价值的众多讨论中,我不断看到一个令人沮丧的现象:初级工程师借助LLM工具生成大量未经测试的代码,直接抛给同事或开源维护者,却指望通过"代码审查"来解决所有问题。
这种行为不仅失礼,浪费他人时间,更是对开发者职责的严重渎职。
开发者的核心职责是交付经过验证可用的代码。
我们不只是机械地编写代码——如今这部分工作完全可以交给LLM完成。我们需要交付的是真正可用的代码,并且必须提供证明其可用性的证据。否则,实际工作负担就会转嫁给代码审查者。
如何证明代码可用#
验证代码可用性有两个不可或缺的步骤:
首先是人工测试。如果你没有亲眼见证代码正常运行,就不能认为它已经完成。偶然的成功不能算数。
人工测试是需要培养的重要技能。你需要能够: 1. 将系统置于能展示修改内容的状态 2. 执行修改 3. 验证并展示修改效果
我习惯将这些步骤简化为终端命令序列,连同输出结果一起粘贴到代码审查评论中。这里有个近期案例。
对于难以展示的修改,可以录制屏幕视频附加到PR中。关键是向审查者证明你的修改确实有效。
在验证基本功能后,还需要测试边界情况。发现潜在问题正是区分资深工程师的关键能力。
第二步是自动化测试。在LLM工具的帮助下,这变得异常简单,因此更没有理由跳过这步。
每个修改都应附带自动化测试,确保当实现被回退时测试会失败。
编写测试的流程与人工测试类似:建立初始状态→执行修改→验证效果。建立高效的测试框架是另一项值得投入的重要技能。
切勿因为有了自动化测试就跳过人工测试!我几乎每次这样做都会后悔。
让你的编码助手先证明可行性#
2025年LLM领域最重要的趋势是编码助手(如Claude Code和Codex CLI)的爆发式增长,这些工具能实时执行代码并验证其可行性。
要掌握这些工具,你需要学会让它们证明修改的有效性。
这个过程与前述步骤相同:它们需要能够进行人工测试,并建立保障未来持续可用的自动化测试。
对机器人而言,自动化测试和人工测试本质相同,但操作方式略有差异。例如: - 开发CLI工具时,我会教Claude Code自行运行测试 - 处理CSS修改时,我会让编码助手通过截图验证效果
好消息是,编码助手通常会自动扩展现有测试套件,并复用既有测试模式。因此保持测试代码的良好组织能帮助助手生成符合你偏好的测试代码。
培养优秀的测试代码审美是区分资深工程师的又一关键能力。
人类负责最终责任#
计算机永远无法承担责任,这是人类不可推卸的职责。
任何人都能用LLM生成上千行代码并提交审查,但这毫无价值。真正的价值在于贡献经过验证可用的代码。
下次提交PR时,请确保附上代码有效运行的证明。
评论总结
以下是评论内容的总结,涵盖主要观点和论据:
关于LLM生成代码的担忧
- 有评论指出,初级工程师使用LLM工具提交大量未经测试的代码,增加了代码审查的负担。
"the junior engineer, empowered by some class of LLM tool, who deposits giant, untested PRs" (评论5)
"People that don’t know any better will just do that all with LLMs and still deliver the giant untested PRs" (评论4)
- 有评论指出,初级工程师使用LLM工具提交大量未经测试的代码,增加了代码审查的负担。
代码的责任与验证
- 多位评论者强调,工程师的责任不仅是交付能运行的代码,还要确保代码的可维护性、安全性和符合现有规范。
"we need to deliver code that belongs. This means following existing patterns and conventions" (评论13)
"Your job is to deliver SECURE code that you have proven to work." (评论21)
- 多位评论者强调,工程师的责任不仅是交付能运行的代码,还要确保代码的可维护性、安全性和符合现有规范。
测试的重要性
- 自动化测试被广泛认为是更高效的方式,而手动测试则被认为效率较低。
"Manual testing as the first step… not very productive imo." (评论3)
"If you build your tests well, using the coding agent becomes smooth and efficient" (评论16)
- 自动化测试被广泛认为是更高效的方式,而手动测试则被认为效率较低。
LLM工具的局限性
- 评论指出LLM可能会“作弊”或提供不符合要求的解决方案,需要人工干预和监督。
"Agents love to cheat. That's an issue I don't see a horizon for change." (评论15)
"The LLM cannot reason and so won’t provide you with a sound argument." (评论19)
- 评论指出LLM可能会“作弊”或提供不符合要求的解决方案,需要人工干预和监督。
工程师的价值与角色转变
- 有观点认为,如果工程师的工作仅限于验证LLM生成的代码,其价值可能会被削弱。
"If our main point is now reduced to accountability over the result with barely any involvement in the implementation - that's very little moat" (评论17)
"The job, in the modern world, is to close tickets. The code quality is negotiable" (评论23)
- 有观点认为,如果工程师的工作仅限于验证LLM生成的代码,其价值可能会被削弱。
其他观点
- 有评论提到Rust语言的特殊性,认为其代码即使不测试也能可靠运行(评论20)。
- 也有评论强调代码提交的规范和历史记录的重要性(评论12)。
总结来看,评论者对LLM在编程中的应用持谨慎态度,普遍认为工程师的核心价值在于确保代码的质量、安全性和可维护性,而不仅仅是生成代码。自动化测试和人工监督被认为是不可或缺的环节。