写点什么

编程已死,AI 当立?教授公开“唱反调”:AI 还帮不了程序员

  • 2023-06-07
    北京
  • 本文字数:2315 字

    阅读完需:约 8 分钟

编程已死,AI当立?教授公开“唱反调”:AI 还帮不了程序员

GitHub CopilotChatGPT 等 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)。



AI 选手先是对问题做出了描述:



这个问题实际可以出现在任意数量的元素上,而不仅仅是两个。但想要证明一个程序不正确,举出一个反例就足够了(但要证明它是正确的,则需要证明其适用于所有示例)。Meyer 只问了程序是否正确,并没提具体要怎么修复,但 ChatGPT 还是热心给出了如下建议:



这里的评论部分确实很有帮助:



ChatGPT 说得没错,逻辑很通。但在认真查看建议的替换代码之后,Meyer 发现了某些可疑的部分。于是,Meyer 进一步提问:



在尝试修复 Meyer 的错误时,ChatGPT 输出了另一个同样有错的版本,只不过错得跟 Meyer 不一样。值得一提的是,ChatGPT 每次都试着给出新的版本——在纠正之前错误的同时,却又带来了新问题。


Meyer 还发现,ChatGPT 特别擅长道歉:



ChatGPT 一直在自说自话,积极向 Meyer 推荐它认为经过修正的解决方案:



到这里,Meyer 甚至不打算尝试最新版本正不正确。有经验的程序员朋友都知道,揪住一个案例不断添加特定修复,绝不是生成正确程序的最佳途径。


于是 Meyer 也选择继续保持礼貌:



精彩的来了:ChatGPT 决定向 Meyer 介绍循环不变量的概念!



Meyer 从未明示或暗示称“需要一种更系统的方法来验证算法的正确性”,他只是想知道 ChatGPT 要如何证明它推荐的答案是对的,但绝对没有使用“系统的”或者“验证”这类字眼。之所以出现这一幕,可能是基于大型语料库的统计推理给了 ChatGPT 信心,让它认定用户肯定会质疑输出代码的正确性,然后要求以系统方法给出验证。


Meyer 继续追问了下去:



ChatGPT 随后给出了很好的答案,甚至包括 ACM 计算调查当中收录的循环不变量调查内容。而且它仍然是先夸一句再解释问题,非常客气:



到这里,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

2023-06-07 14:0052965

评论 1 条评论

发布
用户头像
不是还有测试吗?
2023-06-08 11:24 · 江苏
回复
没有更多了
发现更多内容

SAP 不同 ABAP 系统里同一 Customizing activity 的显示差异分析

汪子熙

CRM SAP ERP abap 定制化

到底哪种类型的错误信息会阻止business transaction的保存

汪子熙

CRM SAP abap

一个查看 SAP UI5 控件所有公有方法的小技巧

汪子熙

JavaScript SAP SAP UI5

架构实战营作业4

大肚皮狒狒

千万级学生管理系统的考试试卷存储方案

颜培攀

架构实战营

Inner Join, Left Outer Join和Association的区别

汪子熙

SAP abap ST05

使用DOM Breakpoints找到修改属性的Javascript代码

汪子熙

JavaScript html chrome

架构实战营 模块四:学习总结

👈

架构实战营

【架构实战营】第 4 模块作业

swordman

架构实战营

学生考试系统存储设计

王硕

架构训练营

SAP CDS view注解解析 - @Environment.systemField

汪子熙

SAP abap

架构实战营 模块四:课后作业

👈

架构实战营

数据科学指南#基础篇 Matplotlib 入门

Lev

Python 数据科学 matplotlib data-science

美团二面:Redis与MySQL双写一致性如何保证?

捡田螺的小男孩

数据库 面试 一致性 缓存;

Go 并发编程-goroutine 初体验

Rayjun

Go 语言 goroutine

找出 SAP OData service出错根源的小技巧

汪子熙

SAP Fiori SAP UI5 OData

Authorization object在哪些ABAP代码里使用到

汪子熙

CRM SAP abap Netweaver

利用Chrome的Heap Snapshot功能分析一个时间段内的内存占用率

汪子熙

JavaScript chrome

Java Elasticsearch 使用

Java elasticsearch

C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践

汪子熙

Cloud CRM SAP C4C

SAP Fiori Launchpad Tile点击后跳转的调试技巧

汪子熙

JavaScript SAP Fiori SAP UI5

架构师实战营:模块四 千万级学生管理系统的考试试卷存储方案

ifc177

#架构实战营

SAP Fiori 应用 Footerbar 区域按钮的高亮显示逻辑

汪子熙

JavaScript SAP Fiori SAP UI5

让秋招飞,Java岗高频面试题盘点,站着就把offer给拿了

北游学Java

Java 面试 秋招

python-运算函数-sum

Geek_6370d5

Kafka-详细笔记

ninetyhe

分布式 高并发系统设计 消息系统 Kafk

模块四-千万级学生管理系统试卷存储方案

华仔架构训练营

☕【Java技术之旅】从底层角度去认识线程的原理

码界西柚

Java 线程 Thread 线程协作 5月日更

如何在SAP CRM WebClient UI里创建HANA Live Report

汪子熙

CRM SAP WebClient UI

如何将BSP应用配置成Fiori Launchpad上的一个tile

汪子熙

SAP abap Fiori SAP UI5 bsp

另一种方式实现事务码SE16里的结果集修改

汪子熙

JavaScript SAP Fiori

编程已死,AI当立?教授公开“唱反调”:AI 还帮不了程序员_AI&大模型_凌敏_InfoQ精选文章