![编程已死,AI当立?教授公开“唱反调”:AI 还帮不了程序员](https://static001.infoq.cn/resource/image/c0/be/c00282ee2a514c502c9dd068bb910fbe.jpeg)
GitHub Copilot、ChatGPT 等 AI 产品的火爆出圈,让更多人看到 AI 在编程方面展现出的极强能力。一时间,关于“AI 取代程序员”、“AI 当立、编程已死”的言论不绝于耳。
前段时间,前哈佛大学计算机科学教授、谷歌工程主管 Matt Welsh 在芝加哥计算机协会的一个虚拟会议上表示,ChatGPT 和 GitHub Copilot 预示着编程终结的开始。Welsh 断言,生成式 AI 将在 3 年内终结编程。
但也有一些人对此持反对意见。近日,Constructor Institute 教授、Eiffel Software 首席技术官 Bertrand Meyer 在 ACM 上发表文章公开“唱反调”,他认真研究了一番 ChatGPT 到底是怎么编程的,最终得出结论:AI 还帮不了程序员。
ChatGPT 编程实验
前段时间,Meyer 通过一系列文章讨论过如何解决虚构出来的二进制搜索问题,虽然内容看起来都不错,每篇文章也都提出了自己的解答版本,但其实大部分都是错的。(延伸阅读:https://bertrandmeyer.com/2020/03/26/getting-program-right-nine-episodes/)
以此为素材,Meyer 把这些文章提交给了 ChatGPT(版本 4)。
![](https://static001.geekbang.org/infoq/01/01f93fd85371f85ff2875b127c57f77d.png)
AI 选手先是对问题做出了描述:
![](https://static001.geekbang.org/infoq/f1/f1fc6dfe5dee02b30a9df84bfbaa94eb.png)
这个问题实际可以出现在任意数量的元素上,而不仅仅是两个。但想要证明一个程序不正确,举出一个反例就足够了(但要证明它是正确的,则需要证明其适用于所有示例)。Meyer 只问了程序是否正确,并没提具体要怎么修复,但 ChatGPT 还是热心给出了如下建议:
![](https://static001.geekbang.org/infoq/b1/b192e3721f8a53a43f047b8b579e5d39.png)
这里的评论部分确实很有帮助:
![](https://static001.geekbang.org/infoq/d9/d9ae6c0d790d9ab5927f52f5de3804cc.png)
ChatGPT 说得没错,逻辑很通。但在认真查看建议的替换代码之后,Meyer 发现了某些可疑的部分。于是,Meyer 进一步提问:
![](https://static001.geekbang.org/infoq/24/24f01c6894d78da98c807b773277d56e.png)
在尝试修复 Meyer 的错误时,ChatGPT 输出了另一个同样有错的版本,只不过错得跟 Meyer 不一样。值得一提的是,ChatGPT 每次都试着给出新的版本——在纠正之前错误的同时,却又带来了新问题。
Meyer 还发现,ChatGPT 特别擅长道歉:
![](https://static001.geekbang.org/infoq/3b/3b765bea47429bb36f76e9c96a59a71e.png)
ChatGPT 一直在自说自话,积极向 Meyer 推荐它认为经过修正的解决方案:
![](https://static001.geekbang.org/infoq/66/6655b37b7b01edb974a3fcf3a6648bf7.png)
到这里,Meyer 甚至不打算尝试最新版本正不正确。有经验的程序员朋友都知道,揪住一个案例不断添加特定修复,绝不是生成正确程序的最佳途径。
于是 Meyer 也选择继续保持礼貌:
![](https://static001.geekbang.org/infoq/5c/5c70e17b78e7eecccfc40cfc57ae4f91.png)
精彩的来了:ChatGPT 决定向 Meyer 介绍循环不变量的概念!
![](https://static001.geekbang.org/infoq/7f/7f537627cc40808c40cdca0b1f6a94b2.png)
Meyer 从未明示或暗示称“需要一种更系统的方法来验证算法的正确性”,他只是想知道 ChatGPT 要如何证明它推荐的答案是对的,但绝对没有使用“系统的”或者“验证”这类字眼。之所以出现这一幕,可能是基于大型语料库的统计推理给了 ChatGPT 信心,让它认定用户肯定会质疑输出代码的正确性,然后要求以系统方法给出验证。
Meyer 继续追问了下去:
![](https://static001.geekbang.org/infoq/56/56f5da5d8a21deb6ade1d8c20a1a2e96.png)
ChatGPT 随后给出了很好的答案,甚至包括 ACM 计算调查当中收录的循环不变量调查内容。而且它仍然是先夸一句再解释问题,非常客气:
![](https://static001.geekbang.org/infoq/0e/0e1d33e1765e326b99eee2878404aa0a.png)
到这里,Meyer 不打算再继续追问了。
作为一名程序员,Meyer 知道如何解决问题,但和大多数程序员一样,他自己也会经常犯错误。他希望 AI 编程助手可以监督自己,提醒他注意陷阱并在犯错时给予纠正。换言之,他希望 AI 能成为高效有用的结对编程伙伴。但实验结果并非如此:AI 编程工具就像个自大的研究生,聪明且博览群书,也始终保持着礼貌并愿意道歉。可回头来看,它仍然草率且不够可靠,所谓的帮助对 Meyer 来说毫无用处。
现代 AI 成果并不能生成正确的程序
Meyer 认为,当前生成式 AI 工具确实能够在某些领域出色地完成工作,甚至胜过大部分人类的水平:相关结果来得很快、令人信服,乍看之下甚至不亚于顶级专家,原则上也没什么大问题。比如生成营销手册,或者是粗略翻译网站内容之类,它的翻译效果相当不错,此外还有医学影像分析等等。
但编程的要求完全不同,它对产出程序的正确性有着严格要求。开发者可以容忍一定的错误,但其核心功能必须正确。如果客户下达的指令是买进 100 股微软股票,同时卖出 50 股亚马逊股票,那程序绝不应该执行相反的操作。专业程序员有时候会犯错,这时候就看 AI 助手能不能帮上一把了。
然而,现代 AI 成果并不能生成正确的程序:它产出的程序实际是从之前见过的大量原有程序中推理而成。这些程序看似靠谱,但却无法完全保障正确性。(这里所说的现代 AI,是将其与早期 AI 区分开来——后者试图通过专家系统等方法重现人类的逻辑思维,但在很大程度上已经失败。如今的 AI 完全通过统计推理实现基本功能。)
Meyer 表示,尽管 AI 助手时有惊艳发挥,但它们并不是逻辑的产物,而是玩弄文字的高手。大语言模型都拥有流畅的表达能力,非常擅长生成看起来没什么大错的文本。虽然这样的表现对于许多应用场景已经足够,但仍然不适合编程需求。
现在的 AI 能够帮助用户生成基础框架,以大致靠谱的效果给出答案。但也就止步于此了。以目前的技术水平来看,它还完全输出不了能够正常运行的程序。
但这对软件工程行业来说并不是坏事。Meyer 认为,面对种种“编程已死”的宣传,这次实验提醒我们不管人类程序员还是自动编程助手,都需要规范的约束,并且任何产出的备选程序都有待验证。在最初的惊艳过后,人们终将意识到这种一键式生成程序的能力并没有多大作用。考虑到它往往无法正确实现使用者想要的效果,草草上线的自动化功能也许反而有害。
写在最后
Meyer 并不是唱衰 AI 编程,他认为,审慎的态度或许能帮助我们构建出具备可靠能力的终极 AI 系统。
目前,AI 技术尚处于早期发展阶段,这些局限性也并不是永远跨越不了的障碍。也许在未来的某一天,生成式 AI 编程工具能够克服这些障碍。但要让它具备真正的编程能力,还得在规范和验证方面做一番深入的探讨和研究。
那么问题来了:你是否使用过 AI 编程工具?使用的是哪款工具?准确度如何?这些工具是否真的帮助到了你?欢迎在评论区写下你的使用体验。
原文链接:
https://cacm.acm.org/blogs/blog-cacm/273577-ai-does-not-help-programmers/fulltext
公众号推荐:
AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。
![](https://static001.geekbang.org/resource/image/b4/f4/b4b2dc5e41bda1a344a3179afd0049f4.png)
评论 1 条评论