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 通过一系列文章讨论过如何解决虚构出来的二进制搜索问题,虽然内容看起来都不错,每篇文章也都提出了自己的解答版本,但其实大部分都是错的。
以此为素材,Meyer 把这些文章提交给了 ChatGPT(版本 4)。
AI 选手先是对问题做出了描述:
这个问题实际可以出现在任意数量的元素上,而不仅仅是两个。但想要证明一个程序不正确,举出一个反例就足够了(但要证明它是正确的,则需要证明其适用于所有示例)。Meyer 只问了程序是否正确,并没提具体要怎么修复,但 ChatGPT 还是热心给出了如下建议:
这里的评论部分确实很有帮助:
ChatGPT 说得没错,逻辑很通。但在认真查看建议的替换代码之后,Meyer 发现了某些可疑的部分。于是,Meyer 进一步提问:
在尝试修复 Meyer 的错误时,ChatGPT 输出了另一个同样有错的版本,只不过错得跟 Meyer 不一样。值得一提的是,ChatGPT 每次都试着给出新的版本——在纠正之前错误的同时,却又带来了新问题。
Meyer 还发现,ChatGPT 特别擅长道歉:
ChatGPT 一直在自说自话,积极向 Meyer 推荐它认为经过修正的解决方案:
到这里,Meyer 甚至不打算尝试最新版本正不正确。有经验的程序员朋友都知道,揪住一个案例不断添加特定修复,绝不是生成正确程序的最佳途径。
于是 Meyer 也选择继续保持礼貌:
精彩的来了:ChatGPT 决定向 Meyer 介绍循环不变量的概念!
Meyer 从未明示或暗示称“需要一种更系统的方法来验证算法的正确性”,他只是想知道 ChatGPT 要如何证明它推荐的答案是对的,但绝对没有使用“系统的”或者“验证”这类字眼。之所以出现这一幕,可能是基于大型语料库的统计推理给了 ChatGPT 信心,让它认定用户肯定会质疑输出代码的正确性,然后要求以系统方法给出验证。
领取专属 10元无门槛券
私享最新 技术干货