来自资深开发者的理性反思,质疑AI编程工具的实际价值。399个赞450条讨论,代表了开发者社区的重要声音,有助于理性评估AI工具而非盲目跟风。
发布于 2025-06-14T15:39:52Z,分类:
总有人问我是否使用生成式 AI 工具编程,以及我对这些工具有什么看法。因此,我决定把自己的想法写下来。以后再有人问起,我就可以直接把这篇文章发给他们,不必每次都重复回答。
从标题中你已经知道,这并不是一篇支持 AI 的博客文章。但它也不是一篇反对 AI 的文章,至少我认为不是。AI 的拥护者和批评者已经写了大量文章,所以我觉得没必要再写一篇同类内容。虽然我对这个话题显然并非中立,但在本文中,我只会从纯技术角度分享自己使用这些工具的个人体验。
说到底,GenAI 工具不适合我的首要原因,也是最重要的原因,就是它们并不能让我变快。事情就这么简单。
让 GenAI 编程工具替我写代码并不难。使用 coding Agent 最方便,因为它可以在我做其他事情时直接修改我的文件。原则上,这一切听起来都很棒。
问题在于,我最终要对这些代码负责,所以不能不加判断地把它们添加到项目中,然后祈祷一切顺利。只有经过彻底审查,并确认自己充分理解之后,我才能把 AI 生成的代码合并到自己的项目中。我必须确信,未来自己有能力修改或扩展这段代码;否则,我就不能使用它。
遗憾的是,审查代码其实比大多数人想象的更困难。审查一段不是我写的代码,所需时间至少与我亲自编写它相同,甚至可能更久。我们这个行业里有一句广为人知的话,大意是:“读代码比写代码更难。”我记得最早将其正式表达出来的应该是 Joel Spolsky(Stack Overflow 和 Trello 的创建者),出自他的文章《Things You Should Never Do, Part I》。
你或许会认为,AI 编写的代码可以被视为一个黑盒。只要代码能够按预期运行,你大概可以说服自己,无须审查也能放心使用,从而获得一定的生产力提升。但我认为这极其不负责任,因为如果代码将来出现故障,AI 不会承担任何责任。无论是否使用 AI,我始终都是自己所产出代码的责任人。在我看来,承担如此巨大的风险简直是疯了。
对于我的某些工作来说,这一点更加重要,因为这些工作需要签署合同,并伴随着相应的法律义务和款项支付。如果别人是以专业人士的身份雇用我,那我就必须真正表现得像一个专业人士,别无选择。AI 工具既不能帮我赚到更多钱,也不能让我用更少的时间完成工作。要实现这些目标,我唯一能做的就是降低工作质量并引入风险,而我不愿意这么做。
我听到有人说,GenAI 编程工具对他们来说是一种倍增器或赋能工具。提出这种说法的人,基本都表示使用 GenAI 后,他们能够更快地工作,并处理更加困难的问题。遗憾的是,这些说法完全建立在当事人的自我感受之上,并没有确凿的数据作为支撑。我想,或许确实有些人审查代码的效率比我高,但坦白说,我对此表示怀疑。我认为实际发生的情况是:这些人只是粗略抽查 AI 生成的代码,或者干脆完全跳过审查阶段,从而节省了时间。而正如我前面所说,这对我而言是绝对无法接受的。
我还经常听到另一种观点:当你需要使用自己不熟悉的语言或技术编写代码时,生成式 AI 会很有帮助。对我来说,这种说法同样没有多少道理。作为软件工程师,我最享受的事情就是学习新知识,所以不了解某项技术从来没有成为我的障碍。学习这件事练得越多,就会变得越容易、越高效!最近,我因为不同项目的需要,陆续学习了 Rust、Go、TypeScript、WASM、Java 和 C#。即使把这种学习工作交给 AI 能够节省时间,我也不会这么做。更何况它实际上并不能节省时间,因为正如前面反复强调的那样,我必须对自己产出的代码负责。抱歉,这一点我说得有些重复了。
前几天,我向一位朋友阐述了以上所有观点。他问我:既然如此,为什么我还乐于接受其他人向我的项目提交开源贡献?那些不也是并非由我亲自编写的代码吗?为什么人类编写的代码可以接受,AI 生成的代码却不行?
有一个事实或许会让一些人感到惊讶:用户提交的开源贡献其实同样无法帮我节省时间,因为我也认为自己必须对它们进行严格审查。但我很享受与那些对我的项目感兴趣,并愿意花时间报告 bug、提出新功能需求或提交代码改动的用户一起工作。最重要的是,这些互动能够带来新的想法,直接帮助我把工作做得更好。这正是我最喜欢开源工作的地方!
我的朋友仍然没有被说服。他建议我同时启动一大批 AI Agent,让它们为所有尚未解决的 bug 创建 PR。他说,这会彻底改变游戏规则。遗憾的是,出于前面解释过的原因,这样做不仅会花我的钱,很可能还会让我变得更慢。即使我们假设 AI 编程工具已经足够成熟——实际上并没有——能够在几乎不需要监督,甚至完全无须监督的情况下修复我项目中的问题,我依然会成为整个流程的瓶颈,因为所有代码在合并之前都必须经过我的审查。
AI 编程工具得到广泛普及还有一个令人遗憾的后果:现在有些用户会利用它们生成敷衍了事的 pull request。我已经收到过一些这样的提交。有趣的是,当我开始阅读那些未经真人编辑和打磨的 AI 生成代码时,心里会产生一种类似“恐怖谷”的感觉。遇到这类 pull request 时,我会针对提交内容中那些奇怪的部分向提交者提问,因为我认为,他们应当为自己希望我合并的代码负责。但他们很少回复。
许多 AI 拥护者表示,你应该把 AI 编程工具当成一个渴望取悦你的实习生。我觉得会这么说的人,恐怕从来没有和实习生一起工作过!
一开始,把工作委派给实习生会降低你的生产力,原因与我前面列出的完全相同。实习生需要大量手把手的指导,而且他们产出的所有代码都必须经过仔细审查,才能被接受。
但实习生会学习,并随着时间推移不断进步。你花在审查代码或向实习生提供反馈上的时间并没有被浪费,而是对未来的投资。实习生会吸收你分享的知识,并将其运用到你之后交给他们的新任务中。在整个实习期间,他们对密切监督的需求会逐渐降低。最终,实习生常常会被所在公司聘为全职员工,因为他们已经成长为能够独立做出有效贡献的人。
AI 工具最多只能像一个患有顺行性遗忘症的实习生,而这种实习生显然并不好用。每接到一个新任务,这位“AI 实习生”都会重置回起点,之前什么也没学会!
我希望通过本文,已经把自己在工作中应用 GenAI 编程工具时遇到的技术问题解释清楚了。
根据我的经验,使用 AI 编程并不存在所谓的免费午餐。我认为,那些声称 AI 能让自己工作得更快或生产力更高的人,其实是在有意识地放宽自己的质量标准,以换取这些收益。除此之外,还有一种可能:他们之所以这么说,只是因为向你销售 AI 能够让他们本人获益。
感谢访问我的博客!如果你喜欢这篇文章,可以考虑通过 Buy Me a Coffee 进行一笔小额的一次性捐赠,支持我的工作,也让我能继续靠咖啡保持清醒。谢谢!
如果你喜欢本博客上的 MicroPython 教程系列,或许也会喜欢我的《MicroPython for the Raspberry Pi Pico W》一书。
我是一名软件工程师和技术作者,目前居住在爱尔兰的德罗赫达。
生成式 AI 声明:对于与本博客或我的开源工作相关的写作、编程、图像创作及其他任何任务,我都不会使用 LLM、Agent 或任何其他生成式 AI 工具提供帮助。
你也可以在 Github、LinkedIn、Bluesky、Mastodon、Twitter、YouTube、Buy Me a Coffee 和 Patreon 上找到我。
感谢你的访问!
© 2012- Miguel Grinberg。保留所有权利。有问题吗?