自动编程还能自主检测Bug,人类可更专注于创造
探索科技TechSugar机器编程与机器学习有很大的不同,机器编程是教系统自己编程。虽然还处于早期阶段,但这种新颖的自我监控系统有望成为一种强大的生产力工具,并帮助软件开发人员完成耗时费力的DEBUG工作
文︱朵啦
软件进步靠研发,研发进展靠程序员,程序员写代码靠996。
软件产品是核心竞争力,如果不能领跑同行,就会被时代的浪潮拍死在沙滩上。头部公司每年都要在研发上砸下巨资,对于大公司需要靠研发投入保持竞争力;对于小公司来说,软件产品就是事关生存的“最后一根稻草”。随着异构时代的到来,海量数据由多样化的专用处理器组合管理,系统功能日趋繁复,管理这些系统所需的软件就越来越复杂,bug出现的可能性也越来越高。开发人员要花费越来越多的时间来修复bug,而不是编写代码。
写代码、改bug成了程序员996的工作核心;而软件开发周期未知而漫长,怕是996都无法解决。一觉睡起来,原本1%的代码就自动写到了99%,bug自动修复,你敢想吗?——Hi,这不再是梦了。
构建系统,然后由系统自行构建自己的软件系统,这种被称为“机器编程”的领域应运而生。英特尔首席科学家、英特尔研究院机器编程研究主任及创始人Justin Gottschlich表示,机器编程与机器学习有很大的不同,机器编程是教系统自己编程。虽然还处于早期阶段,但这种新颖的自我监控系统有望成为一种强大的生产力工具,并帮助软件开发人员完成耗时费力的Debug工作。
检测bug,软件自己搞定
“机器编程”一词在英特尔研究院和麻省理工学院联合发布的《机器编程的三大支柱》论文中首次提出,通过机器学习和其他方法,机器编程可以设计实现自动编写软件的软件。这将使程序员们有更大自由度和更多的精力去创造新的软件。对于英特尔研究院机器编程研究,自动生成软件领域是机器编程的核心重点。这个研究领域,英特尔研究院机器编程研究称之为“机器编程”。它的核心原则是,人类向机器表达他(她)的意图,机器会自动创建完成该意图所需的所有软件。英特尔研究院机器编程研究对于某些工作负载进行专业化处理,计算资源变得越来越异构化,所以这需要专家级的程序员,他们非常了解硬件以及如何最大限度地利用硬件。但与此同时,软件开发人员越来越青睐于使用更抽象的语言,以提高工作效率。这反过来会导致硬件难以发挥出它本身的性能。
不久前,英特尔科学家与麻省理工学院(MIT),以及佐治亚理工学院(Georgia Tech)的研究人员共同推出了一种新的机器编程(MP)系统——机器推断代码相似性(MISIM)全新机器编程系统。是一款检测软件意图的自动化引擎,通过识别代码结构、分析与其它功能相似代码的句法差异实现。正如Justin所阐述的,“这是实现机器编程伟大愿景的重要一步。”同时Justin表示:“如果机器能做到自动检查和修复bug,我想大多数开发人员一定非常愿意让它来承担这项工作,至少我会。”
抱着实现机器编程的美好愿景,英特尔研究院机器编程研究在12月进一步推出了机器编程研究系统ControlFlag,除了自动编程,它还可以自动检测代码中的错误。在初步测试中,ControlFlag使用超过10亿个未标记的产品级代码来训练和学习新的缺陷。英特尔研究院机器编程研究认为ControlFlag是一个强大的新工具,可以大大减少评估和调试代码所需的时间和成本。
首先,ControlFlag是完全自我监督的机器编程系统,不需要人类对其进行训练及指导。ControlFlag的无监督模式识别方法使它可以在本质上学习适应开发者的风格。在要评估的控制工具的有限输入信息中,ControlFlag可以识别编程语言中的各种样式,不受代码使用的编程语言限制。
第二,ControlFlag检测bug的功能集成了机器学习、形式化方法、编程语言、编译器和计算机系统。据悉,ControlFlag通过一个称为异常检测的功能来进行bug检测,通过学习经验证的例子来检测正常的编程模式,并找出代码中可能导致bug的异常。该工具将学会识别和标记这些风格选择,并根据其见解进行自动的错误识别和建议解决方案,以便ControlFlag能够尽可能地避免将两个开发团队之间的风格差异视为代码错误。
自动检测bug的系统好不好用?英特尔已经开始评估内部使用ControlFlag来发现自己的软件和固件产品化中的错误。这是英特尔开发人员快速分析项目的一个关键组成部分,该项目旨在通过提供专家支持来帮助程序员加快速度。
机器编程更偏向随机
英特尔机器编程研究系统ControlFlag从超过十亿行的代码中学习,英特尔研究院机器编程研究表示,这在机器编程系统中尚属首次。另外,对于跨架构硬件来说,能够正确、高效、安全地编写代码的程序员稀少,从而导致代码中存在难以发现的新错误。而ControlFlag检测现有软件中的违规或异常情况,使可能已经在生产质量系统中存在了20多年的隐疾得以发现。过去可能有数百名开发人员查看过这些代码,但都没有意识到任何问题,现在ControlFlag可以实现人力不能达到的效果。
英特尔研究院机器编程研究融合了两种方法,来推动大量的机器编程研究,一种是形式化方法,一种是随机方法(stochastic approaches)。英特尔研究院机器编程研究分析目前业界在机器编程领域方面的工作发现,机器编程更偏向随机方法,并得到了很大的重视,例如深度神经网络和贝叶斯网络(Bayesian networks)等等。事实上,英特尔研究院机器编程研究表示,他们的某些合作伙伴或竞争对手正在做神经网络编程,使用神经网络来替换大量代码。这样做有好处,但是当遇到诸如可解释性或debug问题时,这样做也有风险。
在正确的应用场景,机器编程对开发效率的提升惊人。Justin表示,在某个案例中,用传统的软件技术,开发完成大约需要三年时间,有了先进的机器编程技术,只需要花一天的时间,就能开发完成同样质量的软件。“很多例子表明,不管是与我们的合作伙伴项目,还是我们自己内部的开发项目,机器编程都将生产率提高了一千倍以上。”
降低行业准入门槛,从业者创造性会更强
机器编程发展是否会让英特尔的程序员失业呢?Justin表示:不会。相反,机器编程实际上会创造数千万到数亿个就业机会。他进一步解释到:首先,当今存在的大多数机器编程系统都需要大量的数据,这些数据通常是以代码的形式存在,而代码是由专业程序员编写。因此,随着自动化的发展,英特尔研究院机器编程研究对高技能程序员的需求增加,以推进系统的进步升级。最重要的是,如果英特尔研究院机器编程研究的意图系统成功,即允许用户向机器表达他或她的意图的系统,这将降低行业准入门槛。
机器编程会为全新类型的程序员创造大平台,从业者创造性会更强,而机器和系统会把这些想法综合起来做出软件。如今,通过ControlFlag和类似的系统,程序员可以显著减少调试时间,并将更多的时间花在人类程序员最擅长的工作——向机器呈现创造性的新思想。完全实现的ControlFlag可以通过自动化繁琐的软件开发工作(如测试、监控和调试)来帮助缓解上述挑战,同时可以解决当前软件开发中耗时费力代价昂贵的bug修复问题。
图:在全球78亿人中,只有2700万人会编写代码,占比不到 1%。英特尔希望借助机器编程技术,使所有人获得编程能力。
英特尔推进机器编程的最终目标是让每个人都能创建软件。当这一目标完全实现时,每个人都可以通过自己最擅长的方式,如代码、自然语言或其他方式向机器表达自己的设计意图,从而创建软件。这是一个大胆的目标,需要英特尔及合作伙伴付出许多努力。
做理性自由的破题者
算法与算力的进步,以及可用代码库的极大丰富,让机器编程拥有适宜的孕育环境;随着近年计算技术的迅猛发展,机器编程迎来重要拐点。英特尔一直以来的作风便是积极打破传统,开拓新的研究或工程领域,这些领域在英特尔研究院机器编程研究突破界限之前还无人涉及。此次异构系统领域亦是一片“处女地”,英特尔的创新驱动力来自于对这一未来技术趋势的预测。
如前所述,异构系统非常复杂,能够切实掌握异构系统编程技术的工程师少之又少,英特尔研究院机器编程研究正在开发某种机制,让程序员或非程序员不仅能够轻松访问异构硬件,还能充分使用其他系统可用资源,以大幅降低异构编程难度。这也是英特尔机器编程的基本驱动力之一。
为推动机器编程的开源合作,英特尔、发布了开源技术和出版物,推动机器编程的进一步发展以及与合伙伙伴的合作。英特尔还创立了叫做“机器编程研讨会”,也称MAPS,参会人数已经从四年前的20人增加到了2019年底的近400人。Justin透露,2021年还将建立一个新的机器编程中心,英特尔将会与业界建立更广泛的合作。
最后,引用Justin的一段话:对于颠覆性的技术,需要“理性的自由”。一切构想需要花时间埋头深入挖掘,把事情做好。否则,如果做事急躁,可能会在设计和方法上做出妥协。虽然可能获得短期收益,但系统的长期生命力可能会下降。