上世纪80年代,我成年了,在家为Commodore VIC-20和Apple等个人电脑编程。我在大学里继续学习计算机科学(CS),并最终在伯克利获得博士学位,我的大部分专业培训都植根于我所谓的“经典”CS:编程、算法、数据结构、系统、编程语言。在经典计算机科学中,最终目标是将一个想法简化为由人类源代码用Java、c++或Python等语言编写的程序。classic cs中的每一个思想——无论多么复杂或复杂,从数据库连接算法到令人难以置信的迟钝的Paxos共识协议——都可以表示为人类可读、可理解的程序。
上世纪90年代初,当我还在上大学的时候,我们还处于AI寒冬的深处,AI作为一个领域同样被经典算法所主导。我在康奈尔大学的第一份研究工作是和Dan Huttenlocher一起工作,他是计算机视觉领域的领导者(现在是麻省理工学院施瓦茨曼计算学院的院长)。在Huttenlocher 1995年左右的博士级计算机视觉课程中,我们从未讨论过任何类似深度学习或神经网络的东西——所有的都是经典算法,如Canny边缘检测、光流和豪斯多夫距离。深度学习还处于起步阶段,还没有被认为是主流AI,更不用说主流CS了。
当然,这是30年前的事情了,从那时起发生了很多变化,但有一件事没有真正改变,那就是CS是作为一门以数据结构、算法和编程为核心的学科来教授的。如果再过30年,甚至10年,我们还在以这种方式对待计算机科学,我会感到惊讶。事实上,我认为计算机科学作为一个领域正在经历一场相当大的剧变,我们中很少有人真正做好了准备。
编程将被淘汰。我相信“写程序”的传统观念正在走向消亡,事实上,除了非常专业的应用程序之外,我们所知道的大多数软件都将被人工智能系统所取代训练有素的而不是编程。在需要“简单”程序的情况下(毕竟,并不是所有事情都需要在gpu集群上运行数千亿个参数的模型),这些程序本身将由人工智能生成,而不是手工编码。
我不认为这个想法很疯狂。毫无疑问,最早的计算机科学先驱,从电气工程(相对)原始的洞穴中脱颖而出,尖锐地认为所有未来的计算机科学家都需要对半导体、二进制算术和微处理器设计有深刻的理解才能理解软件。快进到今天,我敢打赌99%的编写软件的人几乎不知道CPU是如何工作的,更不用说晶体管设计的物理原理了。进一步说,我相信未来的计算机科学家将远离“软件”的经典定义,他们将很难逆转链表或实现快速排序。(我不确定我记得如何实现快速排序自己。)
像CoPilot这样的AI编码助手只是触及了我所描述的内容的表面。在我看来很明显当然未来所有的程序最终都将由人工智能来编写,人类充其量只能扮演监督角色。任何怀疑这一预测的人只需看看人工智能内容生成的其他方面(如图像生成)正在取得的非常迅速的进展。DALL-E v1和仅在15个月后宣布的DALL-E v2在质量和复杂性上的差异是惊人的。如果说我在过去几年的人工智能工作中学到了什么,那就是它确实存在非常人们很容易低估日益庞大的人工智能模型的力量。几个月前还像是科幻小说的事情正在迅速成为现实。
所以我不仅仅是在谈论像Github的CoPilot取代程序员这样的事情。1我说的是用训练模型取代编写程序的整个概念。在未来,计算机科学专业的学生将不需要学习诸如如何向二叉树添加节点或c++代码这样的普通技能。这种教育将会过时,就像教工程专业的学生如何使用计算尺一样。
未来的工程师只需敲击几下键盘,就能启动一个包含四亿亿亿参数的模型实例,这个模型已经对人类知识的全部范围进行了编码(然后是部分),并随时准备执行机器要求的任何任务。让机器做我们想做的事情的大部分脑力工作将是提出正确的示例、正确的训练数据和正确的方法来评估训练过程。能够通过少次学习进行泛化的适当强大的模型只需要执行任务的几个好例子。在大多数情况下,大规模的、人为管理的数据集将不再是必要的,大多数人“训练”AI模型将不会在PyTorch中运行梯度下降循环或类似的东西。他们将以身作则,机器将完成其余的工作。
在这门新的计算机科学中——如果我们还称之为计算机科学的话——机器将如此强大,并且已经知道如何做很多事情,这一领域将看起来不像一个工程领域,而更像一个教育领域;也就是说,如何最好地教育机器就像如何在学校里最好地教育孩子的科学一样。然而,与(人类)孩子不同的是,这些人工智能系统将驾驶我们的飞机,运行我们的电网,甚至可能统治整个国家。我认为,当我们的注意力转向教授智能机器而不是直接编程时,绝大多数经典CS就变得无关紧要了。从传统意义上讲,编程实际上将会消亡。
我认为计算机科学作为一个领域正处于一个相当大的动荡之中,我们中很少有人真正做好了准备。
这一切是如何改变我们对计算机科学领域的看法的?新的原子计算单元不再是实现冯·诺依曼机器的处理器、内存和I/O系统,而是一个大规模的、预先训练过的、高度自适应的AI模型。这对我们思考计算的方式来说是一个巨大的转变——不再是一个可预测的、静态的、受指令集、类型系统和可判定性概念控制的过程。基于人工智能的计算早已跨越了静态分析和形式证明的界限。我们正在迅速走向这样一个世界,在这个世界里,计算的基本构件是喜怒无常的、神秘的、自适应的代理。
这一转变被一个事实所强调没有人真正理解大型人工智能模型是如何工作的。人们在发表研究论文3.,4,5实际上发现新的行为现有的大型模型,即使这些系统是由人类“设计”的。大型人工智能模型能够做一些它们没有接受过明确训练的事情,这应该会把尼克·博斯特罗姆(Nick Bostrom)吓得魂飞魄灭2还有人(有理由)担心超级智能AI横行霸道。除了实证研究,我们目前没有办法确定当前人工智能系统的局限性。至于未来更大更复杂的人工智能模型——祝你好运!
对于任何读过现代机器学习论文的人来说,焦点从程序到模型的转变应该是显而易见的。这些论文几乎没有提到创新背后的代码或系统;人工智能系统的构建模块是更高层次的抽象,如注意力层、标记器和数据集。即使是20年前的时间旅行者也很难理解三句话在(75页!)GPT-3纸3.描述为模型构建的实际软件:“我们使用与GPT-2相同的模型和架构,包括其中描述的修改初始化、预归一化和可逆标记化,除了我们在变压器的层中使用交替密集和局部带状稀疏注意模式,类似于稀疏变压器。为了研究ML性能对模型大小的依赖关系,我们训练了8种不同大小的模型,从1.25亿个参数到1750亿个参数,范围超过三个数量级,最后一个是我们称之为GPT-3的模型。先前的工作表明,在足够的训练数据下,验证损失的缩放应该近似于一个平滑的幂律作为大小的函数;许多不同规模的训练模型使我们能够测试这一假设的验证损失和下游语言任务。”
计算基础定义的这种转变带来了巨大的机遇,也带来了巨大的风险。然而,我认为现在是时候接受这是一个很有可能的未来,并相应地发展我们的思维,而不是只是坐在这里等待流星撞击。
数字请在独家报道中观看作者对这部作品的讨论通信视频。//www.eqigeno.com/videos/end-of-programming
1.伯杰,e,对付副驾驶。SIGPLANPL的观点博客,2022;https://bit.ly/3XbJv5J
2.博斯特罗姆,N。超级智能:路径、危险、策略。牛津大学出版社,2014年。
3.布朗,T.等。语言模型是很少的学习者。2020;https://bit.ly/3Eh1DT5
4.小岛等人。大型语言模型是零概率推理器。2022;https://bit.ly/3Ohmlqo
5.奈,等人。展示您的工作:使用语言模型进行中间计算的便签本。2021;https://bit.ly/3TLnfMY
数字图书馆是由计算机协会出版的。版权所有©2023 ACM, Inc.
同意。但即使是“让机器做我们想做的事情的大部分智力工作,也将是关于提出正确的示例、正确的训练数据和正确的方法来评估训练过程”,也可能超出了所需的范围。为什么未来的系统不会在很大程度上实现自动化呢?
而且这听起来更像是工程学而不是计算机科学。也许未来的计算机科学研究人员将专注于通过分析神经网络的小子集的行为来弄清楚这些系统是如何工作的。
记住Ed yourdon在1992年的预测(见https://en.m.wikipedia.org/wiki/Decline_and_Fall_of_the_American_Programmer)。马特·沃尔什的预测可能准确,也可能不准确,但时间框架并不总是明确的。
我不认为人工智能意味着编程的终结,但我确实认为它将改变我们教授计算机科学的方式。
很明显,我们需要教授各种新技能,比如即时工程和数据注释的理论和实践。我们还需要教授如何使用人工智能来构建更复杂的系统。就像今天的计算机科学学生不需要知道如何实现像Python这样的语言,但需要知道如何使用它一样,未来的计算机科学学生将需要知道如何有效地使用人工智能,这肯定会在正规教育中得到改善。
同样明显的是,计算机科学部门将需要站在社会技术问题的前沿,包括理解和抵消人工智能系统中的系统性偏见,改善对这些系统的访问,并确保所有人共享人工智能的好处。这些可能看起来像是软社会科学问题,但在过去的十年中,我们已经了解到,如果没有计算机科学的坚实基础,根本不可能解决这些问题。
在利用私人数据的同时,改善网络安全和开发尊重隐私的方法是需要继续加强教育和研究的另外两个领域。是的,网络安全捍卫者利用人工智能,但攻击者也是如此:我们将需要人类与人工智能团队的结合来领先于攻击者。在隐私方面,人工智能似乎不太可能开发出全新的技术或法律方法来保护隐私,但我们肯定需要它们来应对技术挑战。
我相信人工智能只会增加对计算机科学毕业生的需求。
Simson加芬克尔
当FORTRAN被引入时,作者声称它将“实际上消除编码”。干的?不,但它改变了"编码"这个词的含义。人工智能工具同样会改变“编程”的方式。这就是“编程”的“终结”吗?这是极不可能的。
(参见https://www.softwarepreservation.org/projects/FORTRAN/BackusEtAl-Preliminary%20Report-1954.pdf—“由于FORTRAN实际上应该消除编码和调试,因此解决问题的成本应该比没有这样一个系统所需的成本少一半。”)
我同意人工智能模型可以很好地取代人类,成为简单和复杂软件组件的作者。然而,我认为现在编写实际代码只是我作为软件工程师日常工作的一小部分。实际上,大部分时间都花在了讨论(并找到)正确的需求(或故事)、设计架构、编写文档以及思考如何保持代码库的可维护性上。因此,我认为“让机器做我们想做的事情的大部分脑力工作将是提出正确的示例、正确的训练数据和正确的方法来评估训练过程”可能是非常正确的,但我想说,这已经是我作为软件工程师所做的很大一部分工作了——尽管可能是以不同的形式。
我完全同意程序员的日子确实屈指可数。然而,在JavaScript聊天机器人从语音到文本输出中抓取值和神经网络(承诺)成为上下文的真正仲裁者之间,还有另一种选择。这是一个在Exidy Sorcerer上学习Basic的人,在20世纪80年代读了计算机本科,并在40年的低级程序员职业生涯中获得了博士学位。你还记得在经典计算机科学中,编程思想是如何不可避免地导致上下文无关语言的吗?
另一种方法是使用语音(当然是一种承载信息的媒介)作为图灵完备机制,通过嵌入一个正交布尔信号(好,。或Sorry,)来充当条件句,并通过递归创建循环。这遵循了奥格登和理查兹在1923年应用的c·s·皮尔斯的符号逻辑,以及20世纪50年代的语用语言学。关于它如何工作的更多细节,请参见:
https://www.researchgate.net/publication/365243696_Happy_100th_Anniversary_Semiotic_Triangle
然而,这解决了软件工程的老问题:需要编写工件。即使上面的文章提到写一个程序和神经网络需要几个按键,这是如此容易!意义创造的归纳过程可以通过声音来描述或编程,通过话语所暗示的内容。这也是简单的科学,并且可以通过开放实验得到证明:一个简单的演示,目前有504个单元测试示例,可以在https://bitbucket.org/martinwheatman/enguage/src/develop/上找到(在github上也有类似的位置!)
从巴贝奇分析机的想法到图灵通用机的想法花了100年。也许奥格登和理查兹在1923年出版《意义的意义》是合适的?它就在这里,就是现在。享受。
使用ChatGPT帮助我为一个复杂的项目编写代码,而不仅仅是一些玩具CS介绍示例,我发现在许多情况下,ChatGPT提供了一些超出其他资源(如StackOverflow)的惊人的强大支持。但是,正如其他人所发现的那样,它也可以得出完全错误的答案,并且充满信心地这样做。在某些情况下,我花了很长时间来调试。我的观点是:
1)新技能。过去的CS能力模型主要关注学生回答问题的能力。在后gpt时代,能力可能需要被重新定义为提出问题的能力。由ChatGPT生成的答案的质量在某种程度上与提出的问题的质量成正比。并提出有意义的后续问题。有效地使用ChatGPT等工具发展了一种现代形式的辩证法。这是一件好事。进入劳动力市场并在团队中工作,过去的学生必须能够掌握这种辩证法,以便与人类同事以及人工智能合作。从长远来看,这种能力可能比了解某种算法或特定编程语言的一些细节更重要。
2) CS大学教育的转变。在实际项目中,专业程序员已经发现了现有的AI编程支持系统(如Copilot和ChatGPT)所增加的价值。这个值只会随着时间的推移而上升。在(不仅仅是CS)教育中隐藏或禁止这些系统是没有意义的。这些系统提供了我们还没有完全理解的新功能可见性。我们现有的CS技能评估机制在后gpt时代将不会很好地发挥作用。不管你喜不喜欢,学生们都会使用这些新工具,但与基于谷歌/ stackoverflow的方法相比,没有反剽窃工具来支持教育工作者。前路坎坷。转向更以项目为导向、更高层次的技能可能会有所帮助。项目组合,而不是低水平的编码考试。 If you want to become an architect you would not be judged how well you can hammer in a nail either.
3)在K-12教育中转向解释性编程。也许“编程的终结”将会出现在K-12教育中,只要编程只是被认为是计算机科学教育管道的招聘机制。直到今天,编程在K-12教育中仍然不受欢迎,主要是因为它没有为与学校相关的非cs科目提供可衡量的好处。在后gpt时代,以职业为导向的K-12课程将变得更难推销。相比之下,解释性编程()是关于使用编程来通过构建有趣的工件来开发对其他学科(如STEM、音乐和艺术)中强大思想的理解。作为思维工具的编程是关于用计算机思考的。这种编程是不会结束的。它就要开始了。
从业人员的经验与评价
“我是一个相当不错的程序员。好到我已经以此为职业了,而且我的任何代码都(可能)不会进入每日WTF。但是有些编程概念我一直很难理解,因为坦率地说,文档很迟钝,很难解析,真的不值得我花时间。
例如,维基百科上关于单子的条目实在是令人讨厌。我在elisp编程一点,所以试图理解单子主要是为了满足一些好奇心,但一些关于文章只是不点击与我,我不得不通过它真的很慢。
我请ChatGPT用简单的术语向我解释,它做得很好。它甚至提供了一个JavaScript示例。然后我要求它在elisp中提供一个示例,它也这样做了。我不太关心代码的正确性,只要它总体上没问题,而且它似乎已经完成了一项不错的工作。
我还要求它记录一些我一直认为描述得很糟糕的elisp函数(emacs的文档可能真的会出错),它确实做得很好。
我并不是傲慢地说这些模型总有一天不会生成很多好的、可用的代码,但我真的认为这种整理大量数据并将其归结为可以理解的东西的能力可以填补大量文档中的空白。我的工作中最漫长、最乏味的部分通常可以归结为研究我所需要的特定引擎功能,或者某种奇怪的平台特性。对于像虚幻这样的公开引擎,这将大大提高我的工作效率。”
我并不排除传统编程有一天可能会被AI取代的想法,但我认为还有比这篇文章所表明的更大的困难要克服。在我看来,程序员有两个主要工作:
1 .程序设计(包括需求收集和代码编写)
确保程序按预期工作(不仅包括测试,还包括出现问题时的故障排除)
即使我们断言人工智能有一天可以为分配给它的任何任务编写干净、高效的代码,而很少或根本不需要编程,但这其中的第二项任务仍然需要完整完成。我认为从认识论的角度来看,这样做一定程度上需要人力投入;将需要一个具有必要领域知识的人来验证程序是否按预期运行。
也许不是编程的终结,而是我们今天所知道的编程。从编码转向“真正的”软件工程,以更经济、更快、更高水平的生产力和质量解决问题和构建解决方案,同时产生强大的开发人员体验。
我们在这个行业已经有50多年的历史了,这对我们来说简直就是天上掉下来的馅饼,但在这个时候,当这成为现实的时候,仍然在这个行业里是非常令人振奋和兴奋的。这是一篇很好的文章,打开了新的可能性的大门,并培养了成长的心态。