当前位置: 首页 > 科技观察

是成就还是削弱?AI代码生成工具与程序员的纠葛

时间:2023-03-17 17:38:14 科技观察

程序员注定要被取代吗?自从OpenAI的大规模语言模型GPT-3展示了其基于简单的书面指令创建HTML网站的惊人能力以来,这个问题就一直困扰着计算机编程社区。从那以后的几个月里,出现了更多的自动化编程助手,它们可以根据自然语言描述(口头或书面人类语言)编写简单但完整的计算机程序,并加快程序员的工作速度。人工智能将在多大程度上取代或增强程序员的工作?IEEESpectrum就此咨询了一些专家,坏消息是编程可能注定要被取代。但也有好消息,在可预见的未来,计算机编程和软件开发似乎仍将是一项高度人力参与的工作。与此同时,支持AI的自动代码生成允许在更短的时间内编写更多代码,从而越来越多地加速软件开发。AmazonAIServices副总裁VasiPhilomin表示,“我不相信AI会完全取代人类开发人员。AI工具可以将程序员从日常工作中解放出来,但计算机编程的创造性工作将继续存在。”如果有人想成为一名开发人员,但10年后,他们不一定需要学习编程语言。相反,他们需要了解创建计算机程序的语义、概念和逻辑序列,从而向更广泛的受众开放软件开发。计算机编程变得越来越智能和自动化当电子计算机编程开始于1940年代时,程序员使用数字机器代码编写。直到20世纪50年代中期,美国杰出的女计算机科学家GraceHopper和她在RemingtonRandCorporation的团队开发了FLOW-MATIC,它允许程序员使用有限的英语词汇编写程序。从那时起,编程语言变得更加高效,程序员的生产力也越来越高。由AI编写的代码处于更广泛变革的前沿,该变革使人们无需编码即可编写软件。现在有了像Akkio这样的无代码AI开发平台,人们可以通过简单的拖放和单击按钮功能来构建机器学习模型。微软的PowerPlatform平台包括一系列低代码产品,用户只需描述它们就可以生成简单的应用程序。6月,亚马逊推出了CodeWhisperer的预览版,这是一种基于机器学习的编程助手,类似于GitHub的Copilot。这两种工具都基于大型语言模型(LLM),这些模型已经在大量代码库上进行了训练。CodeWhisperer和Copilot都在程序员编写代码时提供自动完成建议,并根据简单的自然语言短语建议可执行指令。几天前,GitHub对2000名开发人员进行了一项调查,发现Copilot将一些编码任务的时间缩短了一半,并提高了开发人员对工作的整体满意度。超越代码完成并不容易,但如果你想超越自动完成,问题就是将意图传授给计算机。软件需求通常是模糊的,自然语言是出了名的不准确。英国人工智能初创公司Diffblue的联合创始人之一彼得·施拉梅尔(PeterSchrammel)表示,需要进行一些渐进式改进,以解决英语书写规范中的歧义。他们之间进行一些对话。为了解决这些问题,微软的研究人员最近提议添加一种反馈机制,例如基于LLM的代码生成,以便计算机在生成代码之前要求程序员澄清任何歧义。微软的交互系统,称为TiCoder,通过生成它所谓的“测试驱动的用户意图形式化”(TDUIF)来改进和形式化用户意图。TDUIF试图使用迭代反馈来判断程序员的算法意图,然后生成与程序员表达的意图一致的代码。下图显示了TDUIF的工作流程。论文地址:https://arxiv.org/abs/2208.05950根据相关论文,在MostlyBasicProgrammingProblems(MBPP)基准测试中,TiCoder将自动生成代码的准确率从48%提高到了85%。MBPP旨在评估机器生成的代码,包含大约1,000个由入门级程序员解决的众包Python编程问题。一个代码单元可以长达几百行,是程序中可以独立维护和执行的最小部分。一套单元测试通常由数十个单元测试组成,每个单元测试包含10到20行代码,用于检查单元是否按预期执行,以便在将单元堆叠在一起时,程序按预期运行。单元测试对于调试单个功能以及在手动更改代码时检测错误非常有用。此外,单元测试还可以作为一个代码单元的规范,用来指导程序员写出干净、没有错误的代码。虽然没有多少程序员追求真正的测试驱动开发,首先编写单元测试,但单元测试通常与单元一起编写。专家观点:人类程序员不会因为AI代码生成而丢掉饭碗根据2019年Diffblue开发者调查的结果,开发者将大约35%的时间花在编写质量控制测试上,而不是编写生产用代码,因此实现了这部分的自动化的工作可以显着提高生产力。同时,Copilot、CodeWhisperer等AI编程助手包可以作为编写单元测试的交互式自动补全工具。程序员获得编码建议并选择最有效的建议。今年2月,DeepMind进一步使用AlphaCode进行全自动代码生产。AlphaCode是一种大型语言模型,可以根据自然语言指令编写简单的计算机程序。它使用编码器-解码器Transformer架构,首先对问题的自然语言描述进行编码,然后将生成的向量解码为解决方案所需的代码。AlphaCode概述。来源:https://arxiv.org/pdf/2203.07814.pdf该模型首先在GitHub代码库上进行训练,直到可以生成看起来合理的代码。为了微调模型,DeepMind使用了15,000对自然语言问题描述和以往编程竞赛中的成功代码解决方案,创建了一个专门的输入输出示例数据集。一旦对AlphaCode进行了训练和微调,就可以对它以前没有遇到过的问题进行测试。最后一步是生成大量解决方案,然后使用过滤算法选择最佳解决方案。DeepMind深度学习团队负责人OriolVinyals认为,他们通过对语言模型进行近100万次采样,创造出了许多不同的程序。为了优化样本选择过程,DeepMind使用聚类算法对解决方案进行分组。聚类过程倾向于将可行的解决方案组合在一起,从而更容易找到一小组可能与程序员编写的方案一样有效的候选方案。为了对该系统进行测试,DeepMind向流行的Codeforces平台上的人类编程竞赛提交了10个AlphaCode编写的程序,其中的解决方案排在前54%。在最近的一次采访中,OriolVinyals反问道,“为了生成一个程序,你不就是不用编码直接用自然语言写出来,解决方案就在另一端出来了吗?”Vinyals和其他人要小心,实现这一目标需要时间,可能需要几十年。LandingAI创始人兼CEO、知名AI学者吴恩达表示,我们距离一个人能够告诉计算机编写任意复杂的计算机程序的要求并自动完成编码还很遥远。然而,以人工智能代码生成在短短几年内的发展速度来看,人工智能系统最终能够根据自然语言指令编写代码似乎是一种必然的进化趋势。手工编程的软件程序将越来越像手工编织毛衣。为了向计算机提供自然语言指令,开发人员仍然需要了解一些逻辑和功能概念以及事物的结构。即使开发人员不学习特定的编程语言或编写计算机代码,他们仍然需要学习基本的编程。反过来,这将允许更多的程序员创建越来越多样化的软件。VasiPhilomin说他不相信人工智能会取代人类开发者。人工智能可以消除开发人员必须做的琐碎的日常工作,让他们专注于更高价值的事情。PeterSchrammel同意AI自动代码生成可以让软件开发人员专注于更困难和更具挑战性的任务。但他补充说,至少需要确认机器理解的是人的意图。他还表示,软件开发人员不会因为自动化编码工具取代他们而失去工作,而且总会有更多的软件可以编写。