科技未来 | 用软件写软件,软件开发正在走向机器编程?

科技未来 | 用软件写软件,软件开发正在走向机器编程?

世界上第一个软件理论,来自计算机科学与人工智能之父,艾伦·图灵在上个世纪30年代的提出的图灵机理论,这也堪称是当代计算机科学的基石理论。大半个世纪过去,在科技的世界里,软件已经几乎无处不在了。不止是一个游戏、一个app那么简单,软件操控着我们手中的笔记本电脑、平板电脑、手机等移动设备的方方面面。连接上网——得有软件;在社交媒体上分享生活——得有软件;让数据中心虚拟化,让家居生活变得更智能——都得有软件。随着AI、云计算、物联网等技术的发展驶入高速公路,软件的前景也是前所未有。

英特尔高级副总裁、首席架构师,兼架构、图形与软件部门总经理Raja Koduri在谈论到软件时曾说,软件给我们带来的性能上的提升是指数级的。通过软件和硬件的结合,我们可以让摩尔定律的提升变成十倍。因为摩尔定律会带来更多的晶体管,而软件可以将越来越多的晶体管的极致性能释放出来。“未来的世界是‘软件为先’”。

软件不可或缺,但在软件飞速发展的今天,开发和维护却依然是既耗时又容易出错的工作。在英特尔研究院机器编程研究部门总监Justin Gottschlich看来,这从软件诞生之日开始就困扰着一代又一代程序员的问题,其实并非无解:“我相信我们能创造一个人人都是软件开发者的社会,届时机器将会承担‘编程’部分的工作。所以,我们将其称为‘机器编程’。”

科技未来 | 用软件写软件,软件开发正在走向机器编程?

什么是机器编程?

Justin在英特尔研究院的工作,就是在系统和软件研究院领导着新成立的机器编程研究团队(MPR)。这支研究团队专门负责研究机器编程的开创性前景。

MPR团队在做的,是通过机器学习和其它自动化方法,设计可以自动编写软件的软件。这种软件称为“机器编程”,本质上就是做软件开发和维护的自动化。如果完全实现了机器编程,那么每个人都能自由地表达创意,无需编写任何代码就可以开发属于自己的软件。

在Justin看来,当下正是发展机器编程的好时机。机器编程融合了机器学习、形式化方法、编程语言、编译器、计算机系统等多个领域。它所使用的自动编程技术既包含精确方法(比如形式程序合成),也有概率方法(比如可微分编程)。机器编程汲取了我们迄今为止获得的所有软硬件知识。人们从二十世纪五十年代就已开始涉足机器编程的研究,但Justin说,“今日与往时不同。今天的我们站在了历史的拐点上,我们有新的机器学习算法新硬件与优化硬件海量而多样的编程数据,而这三者是发展机器编程的必要要素。”

Justin团队最新的遗传算法(GA)研究项目①就是一个例子。他们发现,遗传算法的适应度函数——编程专家为机器学习研发的一套复杂的启发式算法——可以实现自动化。Justin说,哪怕就在短短几年前,这都是完全不可能做到的。

机器编程能够解决什么问题?

科技未来 | 用软件写软件,软件开发正在走向机器编程?

首先是补足人才缺口。根据Justin的说法,资深开发工程师的人力资源短缺是英特尔和其它的头部科技公司共同面临的核心难题,而这也直接阻碍了各领域编程量的增长。根据code.org②数据,仅美国就有500,000个编程人员岗位虚位以待,而每年毕业的计算机科学专业毕业生仅有50,000人。这一人才短缺的问题在欧盟同样存在。Justin说,欧盟人才市场中至多只有10%的编程人员受过计算机科学专业训练、日后有潜力成为一线高级开发工程师。

今天的异构硬件纷繁多样,有CPU、GPU、FPGA、ASIC,还有神经形态芯片和不久后将横空出世的量子芯片。要找到能正确、高效、安全地为这些硬件编写程序的开发者将十分困难,这是个不可能完成的任务。

除了人手问题,折磨着全球程序员的bug也是所有软件开发和维护的一大痛脚。“我们最近在NeurIPS 2019发表的论文初步表明,一些在过去即便是编程专家也无法检测到的漏洞,通过机器编程可以自动检测出来,不需要任何人工介入。下一步就是自动修复这些漏洞了。” Justin说道。

关于机器编程的好处,Justin还举了一个十分有名的例子。众所周知的Google翻译可以提供多语种间自动翻译服务,很长一段时间,它是由工程师通过传统编程方法用约500,000行代码手工编写而成。机器编程问世后,Google重新编写了这段代码,其中一部分通过可微分编程③实现。这次重新编写,将Google翻译背后的500,000行代码减少到500行,缩减了1000倍。“不仅代码量缩减了1000倍,系统运行精确度也提高了,太不可思议了。” Justin说道。

好处多多的机器编程,会不会抢了广大程序员的饭碗?

在Justin看来,机器编程不仅不会导致失业,反而会增加就业机会——而且可能是多达上百万个就业机会。在一篇与麻省理工学院研究人员共同发表的论文《机器编程的三大支柱》(The Three Pillars of Machine Programming)④中,Justin和他的团队描绘了机器编程的未来愿景。

科技未来 | 用软件写软件,软件开发正在走向机器编程?

软件开发中,枯燥的部分将被自动化,人们得以有更大的自由、灵活度和时间精力去创造。他补充道:“我们的愿景是:只要你能以机器可理解的方式表达你的‘意图’——可能是用自然语言,或者可视化的图表,甚至是打个手势——机器编程就会帮你开发属于你自己的软件。”

Justin表示,为了打造这些先进的机器编程系统,我们非常依赖开发者和科学家团体——他们可以在不同平台进行开发,能够运用机器学习与形式化方法、异构硬件以及多种编程语言。

1. 更多关于遗传算法(GA)研究项目的信息,请访问:

https://arxiv.org/pdf/1908.08783.pdf

2. 更多关于code.org数据的信息,请访问:

https://code.org/promote

3. 更多关于可微分编程的信息,请访问:

https://en.wikipedia.org/wiki/Differentiable_programming

4. 更多关于机器编程的三大支柱(The Three Pillars of Machine Programming)的信息,请访问:

https://dl.acm.org/doi/10.1145/3211346.3211355

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据