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