电子说
程序员这个职业会消失吗?OpenAI的大型语言模型GPT-3展现出了由简单书面指令创建HTML网站的能力,震惊了所有人,此后这个问题就一直在计算机编程社区广受关注。
那之后的几个月里,飞速的发展使系统能够根据自然语言(口头或书面人类语言)描述来编写简单但完整的计算机程序,还可以实现自动化辅助编程,提高计算机程序员的工作速度。人工智能(AI)将在多大程度上取代或扩展人类程序员的工作?
根据《科技纵览》咨询专家的看法,坏消息是我们当今所知道的编程确实可能会消失。但好消息是,在可预见的未来,计算机编程和软件开发仍将是一项需要人来完成的工作。同时,AI自动代码生成系统将在更短的时间编写更多的代码,加快软件开发速度。
这些专家表示,如果有人想要成为软件开发者,他们并不一定需要学习某种编程语言。虽然向自然语言编程转换的时限仍然没有明确的答案,但预计这个方向在几年内将有重要发展,而不会是几十年。这些未来的程序员将不需要学习C++、Python或Ruby,而是需要理解构建计算机程序的语义学、概念和逻辑序列。软件开发将向更广泛、更多样化的人群开放。
亚马逊副总裁、机器学习和AI总经理瓦西•菲洛明(Vasi Philomin)说:“我不认为AI会取代人类开发者。”同时他补充道,AI工具会将程序员从常规任务中解放出来,但程序员依然会保留创造性的计算机编程工作。
电子计算机的编程始于20世纪40年代,当时程序员用数字机器代码编写程序。直到1950年代中期,格蕾丝•霍珀(Grace Hopper)和她的团队在雷明顿•兰德公司开发出Flow-Matic,借助这种语言,程序员可用受限的英语词汇来编写程序。
从那之后,编程就迈上了一个新台阶,程序语言的效率越来越高,程序员的工作效率也在提高。
AI编程是如今的前沿运动,将允许人们在编写软件时完全不用编码,目前,通过Akkio等平台,人们已经可以使用简单的拖放和按钮点击功能来构建机器学习模型。微软的Power Platform包含了一系列低代码产品,用户只需要通过描述即可生成简单的应用程序。
2022年6月,亚马逊发布了面向程序员的编码助手CodeWhisperer,它与GitHub在2021年6月首次发布的限量预览版Copilot类似。这两款工具都以经过大规模代码资源库训练的大型语言模型(LLM)为基础。在程序员编写代码时,程序能够提供自动完成的建议,或根据简单的自然语言短语给出可执行指令建议。
不过,要想在自动完成的基础上更进一步,还要解决向计算机传授意图的问题。软件需求本身并不总是精准的标志;众所周知,自然语言自身也是不精确的。
“要解决英语书写技术规范中的所有歧义,需要越来越高的精准度,也需要进行人机对话。”Diffblue的联合创始人彼得•施拉梅尔(Peter Schrammel)说。Diffblue可自动编写Java测试单元。
最近,为了解决这些问题,微软的研究人员计划在基于LLM的代码生成系统中添加一个反馈机制,在生成代码之前,让计算机询问程序员,从而澄清歧义。
名为TiCoder的交互式系统则尝试使用迭代反馈,进而推测程序员的算法意图,然后生成与表达意图一致的代码。
根据研究人员的论文,TiCoder采用主要基础编程问题(MBPP)基准进行评估,能够将自动生成代码的准确率从48%提高到85%。MBPP由入门级程序员也能解决的Python编程问题组成,旨在评估机器生成的代码。
一个代码单元可以长达几百行,是程序可独立维护和执行的最小部分。一套单元测试通常包含几十个单元测试,用于检查单元是否按预期执行;当将单元堆叠在一起时,程序就可工作了。
Diffblue的一项调查表明,开发人员有约35%的时间用于编写质量控制测试代码,而不是编写用于生产的代码,因此实现这部分工作的自动化将显著提高生产率。
单元测试适用于调试单个功能函数,以及检测人工修改代码的错误;同时,单元测试也可作为代码单元的技术规范,用来指导程序员。不过真正追求测试驱动开发的程序员并不多,测试驱动开发时要先编写单元测试,有时也会同时编写单元测试和代码单元。
GitHub的Copilot、亚马逊的CodeWhisperer和AI编程助手包都可以用作编写单元测试的交互式自动完成工具。程序员得到建议后,可以选择自己认为效果最好的一个。Diffblue的系统名为Diffblue Cover,它使用强化学习来自动编写单元测试,不需要人工干预。
2022年早些时候,位于英国的谷歌人工智能实验室DeepMind采用AlphaCode在全自动代码生成方面向前迈进了一步。AlphaCode是一种能够根据自然语言指令编写简单计算机程序的大型语言模型。
该模型首先经过了GitHub的在线代码库的训练,直到能够生成看起来合理的代码。为了优化调整该模型,DeepMind使用了1.5万对数据,每对数据包含自然语言问题描述和以往编程竞赛中的成功代码方案,创建一个专用的输入-输出样本数据资源库。
最后一步是生成多种解决方案,并使用筛选算法选择最佳方案。“我们通过语言模型进行大约100万次取样,创建了很多不同的程序可能性。”领导DeepMind深度学习团队的奥利奥尔•温亚尔斯(Oriol Vinyals)说。
温亚尔斯说,为了优化样本选择过程,DeepMind使用一种聚类算法将有效的解决方案分组,选出与人类程序员编写的解决方案效果一样的候选方案。
为了测试该系统,DeepMind提交了10个由AlphaCode编写的程序,参与热门平台Codeforces上的程序员编程竞赛,其方案排名前54%。
“要生成一个程序,只需用自然语言编写,不用编写代码,然后另一端就能得到解决方案?”温亚尔斯在最近的一次采访中反问道,“我认为是这样。”
温亚尔斯和其他人提醒道,要实现该目标还需要时间,可能需要几十年。“对于任意一个复杂的计算机程序,只要向计算机提出需求,就能自动完成编码,我们距离这样的场景还很遥远。”Landing AI的创始人兼首席执行官吴恩达说,他是AI领域的先驱人物,也是谷歌大脑的创始人。
不过,考虑到AI代码生成在短短几年的发展速度,AI系统最终能够根据自然语言指令编写代码似乎是不可避免的。手动编程软件开发将越来越像“手打毛衣”。
要向计算机发出自然语言指令,开发人员仍然需要理解一些逻辑和功能概念以及如何组建程序。即使不学习特定的编程语言或编写计算机代码,他们也还是需要学习基础编程。反过来,这会让更广泛的程序员创造更多、更多样化的软件。
“我不认为AI会取代人类开发者。”亚马逊的菲洛明说,“它将把人从不得不做的单调、样板式工作中解放出来,使其专注于价值更高的事情。”
Diffblue的施拉梅尔也赞同AI自动代码生成将让软件开发人员专注于更难、更具创意性的任务。但他补充道,至少还需要进行一次交互,让人确认机器理解了人的意图。
“软件开发人员不会因为被自动化工具取代而失业。”他说,“总是有很多软件需要编写。”
全部0条评论
快来发表一下你的评论吧 !