編程已死?AI還代替不了程序員
本文來自微信公眾號:InfoQ (ID:infoqchina),編譯:核子可樂、凌敏,原文標題:《編程已死,AI 當立?教授公開“唱反調”:AI 還幫不了程序員》,頭圖來自:unsplash
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 信心,讓它認定用戶肯定會質疑輸出代碼的正確性,然后要求以系統方法給出驗證。
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 編程工具能夠克服這些障礙。但要讓它具備真正的編程能力,還得在規范和驗證方面做一番深入的探討和研究。
原文鏈接:
https://cacm.acm.org/blogs/blog-cacm/273577-ai-does-not-help-programmers/fulltext
本文來自微信公眾號:InfoQ (ID:infoqchina),編譯:核子可樂、凌敏
關鍵詞:
2023-06-08 16:14:50
2023-06-08 16:02:57
2023-06-08 15:51:36
2023-06-08 15:46:24
2023-06-08 15:36:53
2023-06-08 15:35:09
2023-06-08 15:34:51
2023-06-08 15:16:54
2023-06-08 15:11:59
2023-06-08 15:00:13
2023-06-08 14:58:57
2023-06-08 14:49:12
2023-06-08 14:47:23
2023-06-08 14:46:11
2023-06-08 14:40:03
2023-06-08 14:37:46
2023-06-08 14:26:00
2023-06-08 14:22:38
2023-06-08 14:15:56
2023-06-08 13:02:44
2023-06-08 12:47:23
2023-06-08 12:35:31
2023-06-08 12:26:57
2023-06-08 11:58:33
2023-06-08 11:57:10
2023-06-08 11:55:25
2023-06-08 11:51:31
2023-06-08 11:35:16
2023-06-08 11:02:35
2023-06-08 10:52:39
2023-06-08 10:51:53
2023-06-08 10:50:26
2023-06-08 10:39:46
2023-06-08 10:35:54
2023-06-08 10:34:36
2023-06-08 10:34:35
2023-06-08 10:09:33
2023-06-08 09:56:48
2023-06-08 09:56:46
2023-06-08 09:56:36
2023-06-08 09:55:13
2023-06-08 09:53:34
2023-06-08 09:52:46
2023-06-08 09:49:02
2023-06-08 09:47:38
2023-06-08 09:45:42
2023-06-08 09:40:24
2023-06-08 09:31:33
2023-06-08 08:53:29
2023-06-08 08:44:03
2023-06-08 08:43:25
2023-06-08 08:34:52
2023-06-08 08:24:09
2023-06-08 08:00:26
2023-06-08 07:58:16
2023-06-08 07:57:00
2023-06-08 07:44:50
2023-06-08 07:19:58
2023-06-08 07:12:53
2023-06-08 06:59:48
2023-06-08 06:58:05
2023-06-08 06:56:12
2023-06-08 06:50:44
2023-06-08 06:49:26
2023-06-08 06:49:03
2023-06-08 06:48:45
2023-06-08 06:44:32
2023-06-08 06:36:22
2023-06-08 06:34:05
2023-06-08 06:28:12
2023-06-08 06:14:57
2023-06-08 06:06:03
2023-06-08 05:48:00
2023-06-08 05:19:19
2023-06-08 05:18:01
2023-06-08 04:51:49
2023-06-08 04:38:55
2023-06-08 04:30:26
2023-06-08 04:28:51
2023-06-08 04:25:09
2023-06-08 04:24:14
2023-06-08 04:15:46
2023-06-08 03:42:28
2023-06-08 03:35:59
2023-06-08 03:30:00
2023-06-08 03:15:45
2023-06-08 03:07:04
2023-06-08 02:59:26
2023-06-08 02:22:01
2023-06-08 02:19:58
2023-06-08 02:02:22
2023-06-08 02:01:54
2023-06-08 02:00:44
2023-06-08 02:00:27
2023-06-08 01:47:59
2023-06-08 01:45:52
2023-06-08 01:23:59
2023-06-08 01:05:17
2023-06-08 00:52:38
相關新聞