11月,《时代周刊》将2020年最佳发明奖给了儿童编程机器人Matatalab;12月4日,英特尔在其研究院开放日上宣布将机器编程与集成光电、神经拟态计算、量子计算等列为影响未来10年的颠覆性技术;目前包括微软、谷歌、Facebook等在内的全球巨头,都加入了机器编程的赛道。机器编程究竟是什么?它会在未来给我们的世界带来颠覆性改变吗?它会让未来的程序员丢掉饭碗吗?它与目前流行的低代码开发是不是一回事儿?
未来程序将无处不在
如今IT业界赫赫有名的大佬很多是编程出身,包括微软创始人比尔盖茨、Facebook的创始人扎克伯格,也包括中国的诸多互联网大佬——腾讯的马化腾、百度的李彦宏、小米的雷军、360的周鸿祎、微信之父张小龙、字节跳动的张一鸣等,全都是写程序出身。这从另外一个角度佐证了编程是创富和改变世界的“神笔”这一说法。
几年前,微软的联合创始人保罗·艾伦在回忆起当年写下的那几行代码时非常感慨:“没想到那几行代码竟然带领微软公司走到了今天。”现在大部分人的电脑上都运行着微软的操作系统,微软也成了世界上市值最高的公司之一,深刻地影响了全世界。也是在不久前,腾讯公司展示了微信第一版的几行代码,就是这个程序,历经8年的成长,现在变成了影响几亿人生活、工作的重要工具。
编程对于这个世界的意义,当然不仅仅是创造了一批赫赫有名的IT大佬,创造了微软和腾讯。进入软件定义一切的时代,我们越来越相信这个世界是由软件驱动的,看看拥有代码最多的公司竟然不是软件巨头微软,而是飞机制造企业。看看从上天的飞机火箭到我们身边的各种小物件,从报税到买菜我们都离不开软件,从工厂到各个机构都离不开软件的驱动,我们就能够很好地理解为什么编程对这个世界举足轻重了。
为什么需要机器编程?
我们为什么需要机器编程?一方面,会编程的技术人员依然太少。在全球78亿人中,只有2700万人会编写代码,占比不到1%。根据code.org的数据,美国有50万个编程人员岗位空缺,欧盟目前只有10%的编程人员受过计算机科学专业训练。
另一方面,编程的门槛还是太高。要想开发出高质量的软件依然非常困难,而且随着异构计算的发展,硬件环境变得越来越复杂,编程开发难度进一步变大。为什么996程序员们早早掉发,说明编程是一件非常折磨人的事情。
英特尔首席科学家Justin Gottschlich讲了他妈妈的故事。他的母亲是房地产行业的权威,对市场的理解敏锐且细致,她的决策需要基于一系列的因素进行复杂的分析。但现有的工具不支持她所想表达的意图,需要定制一种新的工具来支持其决策所需的精细度、精确度、微妙性。在没有现成工具的情况下,她分别使用不同的工具,进行数据收集、分析,经过一个月之后,得出结论。但在她得出结论的时候,整个市场环境变化了、数据变化了,所有时间都浪费掉了。事实上,这样的事情不仅发生在Justin母亲身上,在农业、野生生物、建筑、医疗、金融分析等领域,很多专家清楚地知道自己想要软件做什么,但这样的软件目前不存在,不足以表达他们的意图。
那么,试想一下,如果人人都会编程,如果机器能够听懂人的指令,能够按照人的指令编程,那么世界将完全是另外一回事。如果完全实现了机器编程,那么每个人都能自由地表达创意,无需编写任何代码就可以开发属于自己的软件,我们进入数据驱动世界的步伐就会大大加快。
就像微软亚洲研究院首席研究员楼建光在接受《中国电子报》记者采访时所言,机器编程不仅仅是希望解放程序员,将程序员从低端的重复性开发中解救出来,将更多精力用在如何将程序逻辑设计得更高效上,更重要的是机器编程能够加速AI在各个领域的落地。
“事实上机器编程是AI落地非常重要的一环。要把AI落地到每一个领域,需要将每一个领域的商业逻辑和人的决策指令自动转化为可操作的程序,由机器人来执行。将行业规律变成逻辑语言,变成可操作的组合,其实就是程序。我们需要将大量的各行各业的商业流程和规律变成机器可识别的逻辑语言,这就是机器编程希望助力人们实现的事情。”楼建光表示,如果机器编程成熟,将大大推进AI在各个领域的应用。
“机器编程将改变关于软件创建的所有既定规则,最终赋能所有人创建软件。”Justin说。从这些角度来看,机器编程应该是软件定义时代的颠覆性技术,将真正提速AI助力人类的进程。
那么机器编程会不会取代程序员,未来是不是程序员就会失业?答案是否定的,因为编程更难的事情是在程序的逻辑设计上,而不是写代码本身。所以写代码的事情可以让机器来完成,而让编程人员做更高级的逻辑设计,让程序更高效。
谈及机器编程,人们自然会想到目前热门的低代码开发。楼建光认为:“机器编程与目前流行的低代码开发完全不同,虽然两者都有程序自动生成的字样,但机器编程与AI相关,低代码与传统开发更为接近,低代码是通过自动化根据模板生成的,是将常用的功能中间件化或者称之为中台化、标准化,通过模块化、标准化、可视化的技术,将原来需要代码完成的功能转换成只要进行简单的拖拽操作就能完成,从而实现自动化。”
机器编程难在哪里?
“通过机器学习和其他自动化方法,设计可以自动编写软件的软件”的机器编程并非今天才有,上世纪50年代就已有学术机构开始涉足机器编程的研究。
但Justin Gottschlich说:“与以往不同,今日的机器编程融合了机器学习、形式化方法、编程语言、编译器、计算机系统等多个领域。它所使用的自动编程技术,既包含精确方法(比如形式程序合成),也有概率方法(比如可微分编程)。机器编程汲取了我们迄今为止获得的所有软硬件知识,站在了历史的拐点上。新的机器学习算法、新硬件与优化硬件、海量而多样的编程数据,这三者是发展机器编程的要素。”
楼建光表达了与Justin Gottschlich一致的观点,因为机器学习算法的进步,算力的高速发展以及海量的编程数据,让机器编程的发展进入了新的拐点。不过楼建光认为:“目前机器编程的发展尚在早期,机器编程的难点在于目前机器AI还没有组合与泛化的能力,只是能够进行简单的编程,稍微长一点的程序就无法完成。”楼建光进一步解释说,复杂程序是由简单程序组合而成的,而程序组合中有很多逻辑和思想,现在的AI没有组合能力,缺乏逻辑思维。
Justin Gottschlich将机器编程的难点概述为三点,也称之为三大支柱:意图(Intention)、创造(Invention)和适应(Adaptation),这三者,代表着从一个编程的想法到最后产生一个产品级代码的过程。
英特尔中国研究院院长宋继强在接受《中国电子报》记者采访时透露,自己也曾做过程序员,所以深知编程中的各种难题,他进一步解释了Justin谈及的机器编程的三大支柱。
“意图”指人类向机器表达自己的想法。目前在这个维度的发展是通过自然语言的方式,而无需敲代码,直接告诉机器你要做什么,机器通过自然语言便能够了解。
“创造”是指机器以用户的意图为基础,然后合成一个高级程序,创造符合用户意图的程序、数据结构和算法。这个过程需要生产一堆代码,或在代码库中找出元素代码,然后按照一定思想逻辑组合,目前这个维度仍有大量挑战。这应该就是楼建光谈到机器尚无“组合能力”的部分。
“适应”这一步需要将程序进行更高级的转换和优化,以便在所处的软件和硬件生态系统中以最高效率运行,从而化解异构硬件挑战。
关于“适应”,做过编程人员的宋继强透露,事实上在编程过程中有一个非常重要的维度是针对不同的硬件环境进行优化,如果一个程序只是跑在CPU环境上效率很高,但当它要跑在CPU+GPU或者云上时,或许就会慢下来,所以程序需要针对不同硬件环境进行适应。
“但是擅长在CPU硬件上进行程序优化的人,可能在程序员里还不到10%,擅长GPU优化的也可能不到10%,但要想擅长在CPU+GPU上进行优化的可能只有1%了,如果是CPU+GPU+ASIC上进行优化的,可能就是0了。”宋继强表示,如果这些事情机器编程能够实现,就可以大大加速高质量程序的设计。
机器编程的发展尚在早期,让AI学会写程序,是人们的普遍预期,从全球机器编程的进展看,不同领域有不同进展,在特定领域,已经取得不错的突破。但在通用领域就像通用AI的发展一样,尚未取得实质性突破,仍需要产、学、研各界齐发力,加速机器编程的突破。
在这条加速AI学会编程的赛道上,目前正在涌入越来越多的公司。除了微软、谷歌、脸书等,在中国包括百度以及一些创业公司也加入了机器编程的研发行列,不同的公司有不同的技术路线。据楼建光透露,微软亚洲研究院在该领域的研究取得了很多实质性的进展,不但在深度学习模型的组合泛化能力方面做了深度探索,而且他们的从自然语言自动生成SQL程序的技术也已经实用,被集成到微软的Excel产品中。
英特尔在不久前的研究院开放日上,推出了机器编程研究系统ControlFlag,它可以自主检测代码中的错误。目前该系统仍处于早期阶段,这个自我监督系统希望帮助软件开发者发现隐藏的bug。为什么英特尔选择从检测代码bug的自动化切入,宋继强给出的答案是:“我自己做编程的时候,可能花在写程序上的时间只是30分钟,而调试则需要2个小时,所以调试检测会占据程序员大量时间。如果这一步让机器来完成,会大大提升编程的速度。”
现在看来,让AI编程只是在各个“点”有了突破,但就像万里长征是一步步走出来的一样,“不积跬步,无以至千里”,现在各公司的每一步探索,都会对未来机器编程产生深刻的影响。