LLM 带来了「编程末日」?哥本哈根大学计算机教授称“永远不会”
5 小时前 / 阅读约8分钟
来源:IT之家
LLM 会把编程淘汰吗?近日,哥本哈根大学的计算机教授,通过分析计算理论中的定理所施加的基本限制,得出结论:距离编程的终结还远得很。

LLM 会把编程淘汰吗?近日,哥本哈根大学的计算机教授,通过分析计算理论中的定理所施加的基本限制,得出结论:距离编程的终结还远得很。

LLM 的发展会把编程淘汰吗?

哥本哈根大学计算机教授 Hans Hüttel 表示:永远不会。

文章地址:https://cacm.acm.org/ opinion / on-program-synthesis-and-large-language-models/

尽管今天的人工智能已经发展到了一个新的高度,尤其是大语言模型在文本生成等方面的能力,令人印象深刻。

但计算社区中的一些人似乎走得有点远了,他们声称「编程将成为过去」。

2023 年 1 月的 Communications 专栏中,Matt Welsh 提出了这样的观点:「编程将过时,—— 编写程序的传统想法正在走向灭绝,事实上,除了非常专业的应用程序之外,大多数软件将被经过训练的 AI 系统所取代」。

「在需要简单程序的情况下(毕竟不是所有程序都需要在 GPU 集群上运行几千亿个参数的模型),这些程序本身将由 AI 生成,而不是手动编码」。

在 Hans Hüttel 看来,这太过分了。

Welsh 的观点包含两个说法。首先,未来大多数不「简单」的软件将采用 AI 系统的形式。其次,任何不属于此形式的软件都将自动生成。

这似乎是个相当笼统的主张,结果就是:既然不需要编程,就不需要研究编程或程序的属性。计算机科学终于可以消失了!

客观来讲,Welsh 提出的第一个主张不太好反驳。毕竟这个「简单」的定义究竟是什么?(按照引文观点,任何不采用 AI 系统形式的软件都很简单)

当前的操作系统、游戏引擎和 SaaS 平台等系统软件算是「简单软件」吗?这些能不能被 AI 取代仍是存疑的。

Welsh 提出的第二个主张涉及程序代码的生成。在早期的一篇评论文章中,Daniel Yellin 从软件开发实践的角度讨论了使用 LLM 的情况。

而在本文中,Hans Hüttel 教授重点关注计算理论中的定理所施加的基本限制,以及这个规范如何影响代码的生成。最终结论是:距离编程的终结还远得很。

最热门的编程语言

还记得大神 Andrej Karpathy 在推特上的名言:「最热门的新编程语言是英语」。

这个想法并不是诞生自当下 LLM 几乎全能的现状,「以自然语言编程」的想法至少可以追溯到 2020 年 7 月。当 GPT-3 出现时,Osama Qarem 写道:「Using GPT-3 will still be programming」,「它将使用以英语作为语法的语言进行编码」。

考虑实际情况这也十分符合:人类口语不太简洁、不太清晰,更容易产生误解。人们在与 GPT-3 交谈时需要练习正确的名词、形容词、动词等,以获得他们想要的结果。这代表你需要学会根据 GPT-3 的理解来「调试」你的英语句子。

消灭编程这件事如果再往前追溯,在 1954 年的 FORTRAN 报告中,作者声称「FORTRAN 应该几乎消除编码和调试」,—— 正如我们所知,这并没有发生。

之后,FORTRAN 的主要作者 John Backus 继续设计了一系列有影响力的编程语言,并赢得了 1977 年的图灵奖。

在 FORTRAN 报告的十年后(1966 年),Jean Sammet 在 Communications 上写道,英语应该是未来的编程语言,—— 这事也没有发生,并且另一位图灵奖得主 Edsger W. Dijkstra 认为这个想法是「愚蠢」的。

这件事情今天会发生吗?看过了太多的 ChatGPT 等大模型带来的惊艳示范,几句话就能快速构建项目,生成看起来非常不错的代码。

人们可能会想,在这个时代,我们终于见证了编程的终结和英语(或者说一般的自然语言)作为创建程序的主要语言。

但是,从规范生成程序代码并不是这么简单的事情。如果我们关心生成代码的正确性,考虑计算复杂性理论上非常精确的意义,那么即便是「简单」的程序也会相当棘手。

生成正确的代码很困难

从规范生成正确的程序代码,在计算机科学中是是一个核心问题。这是程序综合的问题,Gulwani 曾表示:

「程序综合是从底层编程语言中,自动查找满足以某种形式约束表达的用户意图的程序。与使用语法导向的翻译将高级代码转换为低级机器表示的典型编译器不同,程序合成器通常在程序空间上执行某种形式的搜索,以生成与各种约束(例如,输入输出示例、自然语言、部分程序和断言)一致的程序」。

关于各种形式的综合问题已经有很多研究,我们知道这件事很难,这个「困难」是指计算复杂性理论意义上的计算困难。

1979 年,Richard Statman 证明了,在简单类型的 λ 演算中是否存在具有给定类型 τ 项的问题是 PSPACE 完备(PSPACE-complete)的。

对于此类问题的决策算法,其确切资源需求是计算复杂性理论中的一个开放问题。

但是,普遍的共识是,PSPACE 完备问题的决策算法在运行时间上将随输入大小呈指数级增长。

也就是说,对于大小为 n 的规范 S,算法将需要 2 的 n 次幂个步骤来生成满足 S 的程序。

因此,即使对于中等大小的输入,PSPACE-complete 问题的算法也可能非常慢。

可以使用一种称为完全量化布尔公式(fully quantified Boolean formulae,QBF)的一阶逻辑形式作为规范语言,并询问给定的公式是否能够建模。

如果对象是生成程序,那么就是对程序进行建模。然而,这个问题也是 PSPACE 完备的。所以结论是,对于具有一定复杂度的程序,其合成算法很可能需要不合理的资源。

「编程末日」尚未来临

于是,计算机科学并没有放弃程序合成的研究也就不足为奇了。Gulwani 曾对现有的程序综合方法进行了全面调查,而所有这些方法都有局限性。

一些程序综合方法是近似的,无法构建满足完整规范的程序,比如静态程序分析工具,而且这些工具一般只考虑特定的程序属性。

另一些方法则需要大量内存或大量时间才能构建程序,比如使用 SMT 求解器的方法和基于类型的开发形式(例如基于 Hindley-Milner 类型系统的方法)。

还有一些方法只能在合理的资源限制或狭窄的问题域中进行综合,比如用于生成编译器和解释器的工具(正则表达式和属性语法的使用允许、开发人员指定解释器或编译器的预期行为)。

所有这些方法从未被誉为「编程终结」的标志,更不用说计算机科学的终结了!

所以,期望 ChatGPT 等类似的力量超越这些限制是不合理的。

事实上,任何在编程环境中使用过此类 AI 软件的人都会看到,有时 AI 可以生成看起来正确合理的代码,而有时则会产出无意义的程序。

这种行为并非巧合,因为 LLM 是在现有代码上训练的。这意味着,无论生成什么代码,都将反映聊天机器人在训练阶段所接触的编码风格。

所以,自然语言在软件开发中的真正使用,在于软件开发人员和软件的最终用户之间发生的探索性对话。LLM 可能会促进这种对话,但取代编程还遥遥无期。

参考资料:

  • https://cacm.acm.org/opinion/on-program-synthesis-and-large-language-models/

本文来自微信公众号:新智元(ID:AI_era)