机器编程的可行性增大促使这一想法加快落入实地,事情的发展开始令人期待。英特尔为未来跨架构编程时代所设计的机器编程将会怎样影响程序员的世界?软件能否实现编写软件?
作者
郑丽媛责编
张文
头图
CSDN下载自东方IC
近年来,随着计算机领域的快速发展,逐渐形成了一股对立的趋势:计算机资源愈发异构化,因而需要更多硬件领域的专家级程序员VS软件开发人员更青睐抽象高效的编程语言,导致硬件性能得不到充分发挥。
这样的趋势下,如果有一款工具可以让计算机自己编程岂不是解决了这个矛盾?基于这种思考,英特尔提出了“机器编程”这个概念,旨在通过自动化工具提升开发效率。
机器编程是什么?
在年英特尔研究院和麻省理工学院联合发布的《机器编程的三大支柱》论文中,“机器编程”一词首次出现在人们的视野。它融合了机器学习、形式化方法、编程语言、编译器、计算机系统等多个领域。通俗地说,机器编程就是通过机器学习和自动化方法,设计出可以自己编写软件的软件,即教系统自己编程。
除了上文所说,机器编程可以补充跨架构专业编程人员的缺口之外,它还能解决软件开发和维护上的一大痛点问题:Bug。机器编程的核心原则是:人类向机器表达他(她)的意图,机器去自动创建完成该意图所需的所有软件。英特尔将机器自动创建软件的部分称为创造和适应,由此得出机器编程的三大支柱:意图(Intention)、创造(Iinvention)和适应(Adaptation)。
英特尔首席科学家、英特尔研究院机器编程研究主任及创始人JustinGottschlich表示:尽管目前软件显著提高了人们的工作效率,但在全球78亿人中,只有万人会编写代码,占比不到1%。因而,机器编程的未来愿景是降低编程的门槛,让每个人都能创建软件,将这1%变成%。
英特尔推出机器编程研究系统ControlFlag
抱着这份美好的愿景,英特尔开始踏上了机器编程这段旅程的第一步。Justin认为,要想让机器编程真正能够帮助到开发人员,那么有两点必不可少:
提高编码员和非编码员的工作效率;确保机器编程系统生成的是高质量、快速、安全的代码。基于这两点,发展机器编程关键的第一步是:改进软件调试(Debug)。
所谓Debug,就是识别、分析和纠正软件缺陷,让软件变得更加强大且可靠的过程。年剑桥大学开展的一项调查显示:美国程序员平均花费50%的时间在Debug上,这严重影响了工作效率。此外,Debug本质上也意味着软件的质量不合格。
再进一步研究发现,Debug几乎都是由于程序员向机器传达意图不正确导致的。而机器编程所追求的让人机交流准确无误,正好就可以纠正这一点。假设机器可以完美地捕捉到人的意图,那么Debug基本上就消失了。英特尔的实验也得到了意外收获:利用机器编程,程序员的工作效率提高了2倍,软件的质量也得到了提升。
这个结果意味着机器编程的愿景并非空想。上周五英特尔推出了可自主检测代码中错误的机器编程研究系统ControlFlag,虽然系统还处于早期阶段,但在初步测试中,ControlFlag就展现了非凡的魔力。它利用超过10亿行未标记的产品级别代码进行了训练并学习了新的缺陷,这使得自我监督系统有望成为强大的生产力工具。
ControlFlag检测Bug的功能正是通过机器编程实现的。具体来说,ControlFlag通过被称为异常检测(anomalydetection)的功能进行运转:通过学习经过验证的例子来检测正常的编程模式,来发现代码中可能造成Bug的异常。值得一提的是,不论开发者使用的是何种编程语言,ControlFlag都可以通过学习检测到其中的异常。
此外,ControlFlag也证明了它的强大。在分析cURL(一个开源的命令行工具,被程序员广泛地用于实现互联网下载)时,ControlFlag发现了一个之前从未被发现的异常,也就是说,ControlFlag发现了被开发者审核过并且广泛使用的产品级别代码中隐藏的Bug。因此,英特尔也开始评估在内部使用ControlFlag,以在软件和固件产品化中寻找Bug。
机器编程会导致失业?
然而,强大会不会意味着取代?功能如此优越的机器编程在未来是否会让部分程序员失业?这种担忧并不难理解,毕竟如果机器编程可以实现自动化构建程序,那原来做这件事的人该怎么办?
Justin其实经常被问到这个问题,但Justin始终认为,机器编程如果成功,那未来只会创造数千万甚至数亿个就业机会,而非取代专业程序员使其失业。
他的理由很简单,有两个方面:
当今存在的大多数机器编程系统都需要大量的数据。数据通常是以代码的形式存在,而代码则是由专业程序员所编写。因此,一旦自动化编程完全实现,那么对高技能程序员的需求将会增加,因为专业程序员写的代码越多,那么通过大量学习,所构建的机器编程系统就越先进;降低编程行业门槛。机器编程如果完全实现,那么用户就可以向机器表达他或她想要的系统从而进行自动化编程。只要有批判性思考的能力,并将软件创造的步骤和想法逻辑合理化,那么所有人都能编程的愿景就不会遥远。因此,Justin一直坚持一个观念:自动化不仅不会取代任何现有的程序员,反而会为全新类型的程序员创造非常大的平台,让他们可以毫无顾忌地发挥想象力。或许这些程序员的编程技能会稍逊色,但强大的创造性会弥补这个不足,只要有能力表达他们的想法,那么机器和系统会帮他们把这些想法综合起来做出软件。
机器编程正处在拐点
Justin曾经说过:机器编程正处于拐点,但拐点并非一夜之间到来。机器编程进入拐点,大致是因为三个基本进步的实现。
算法的进步。在确定性算法和随机算法方面都得到了进步,这些形式化方法和机器学习算法为建立机器编程系统提供了大量的机会。目前很多可以实现的事情在10年前都做不到。算力的进步。如果无法以易于处理的形式去执行,那么就算能够执行算法,但却需要10年、20年才能完成。随着过去10年英特尔在算力方面的进步,特别是异构计算方面,让英特尔有了解锁机器编程的第二块钥匙,成为了关键的转折点。数据。大多数系统往往需要大量的数据,目前数据量正好非常丰富。以GitHub为例,年其代码库超过了2亿。这是一个巨大的代码量,因为任何一个代码库都可能包含多个源文件。而这些源文件,每一个都可能包含数百或数千行代码。因此这个数字变得非常大,增长非常快。因此,就拐点而言,这三件事合在一起,才让今天成为可能。
至于这是如何发生的,Justin认为其驱动力是英特尔看见了未来即将进入异构系统的时代。异构系统编程人员的缺失,让英特尔意识到需要某种机制,让程序员或非程序员不仅能访问异构硬件,还能充分利用可用资源。同时这也是英特尔机器编程的基本驱动力之一。
机器编程已经起步,如果完全实现,那全民编程的时代将不再遥远,你准备好了吗?