前段时间,英特尔公司推出了机器编程研究系统ControlFlag,这是全球首个自我监控系统,可以自主检测代码中的错误,目前仍处于早期阶段。在初步测试中,这个系统利用超过10亿行未标记的产品级别代码进行训练并学习新的缺陷。英特尔首席科学家表示,这款工具可以大幅减少测试和修复bug 所需的时间和成本。
那么,机器编程究竟是什么?它目前发展如何,会在未来给世界带来怎样的改变?它会让未来的程序员丢掉饭碗吗?
如今,几乎各个行业都离不开编程。传统编程看似简单,其实对人的要求很高。尽管大多数人可以熟练使用自然语言表达自己的想法,但是让其去编程却不是很容易,那需要思想和底层原理支撑。
据统计,全球78亿人中,只有2700万人会编写代码,占比不到1%。根据美国非盈利组织code.org 的数据,美国有50万个编程人员岗位空缺,欧盟目前只有10%的编程人员受过计算机科学专业训练。
“编程的基本规则往往需要通过长时间的学习和训练才能掌握。如同好的作家不一定是好的编剧,作家描写人的内心活动可以用‘心如刀扎’这类语言进行描述,但是编剧需要把这种情绪明确细致地一一描述出来,这样演员才可以栩栩如生地表演出来。”西安电子科技大学电子工程学院教授吴家骥介绍说。
传统编程是基于规则和逻辑把人的意图按照编程语言规范化实现的过程,程序员就像传统工厂流水线上的员工和农场里的农民一样,只需按照定义好的标准接口和编程规范,把需求意图拆解为正确的逻辑,用代码写出来,所以程序员也被称为“码农”。
然而,在软件飞速发展的今天,开发和维护却依然是既耗时又容易出错的工作。英特尔研究院机器编程研究部门总监贾斯汀·戈茨利希认为,这些从软件诞生之日起就困扰着一代又一代程序员的问题,其实并非无解,他说,“相信我们能创造一个人人都是软件开发者的社会,届时机器将会承担‘编程’部分的工作,让代码不再是‘手工艺品’。所以,我们将其称为‘机器编程’。”
通过机器学习和其他自动化方法,设计可以自动编写软件的机器编程并非今天才有,20世纪50年代就已有学术机构开始涉足机器编程的研究。
在贾斯汀·戈茨利希看来,与以往不同,现在的机器编程融合了机器学习、形式化方法、编程语言、编译器、计算机系统等多个领域。它所使用的自动编程技术,既包含精确方法(比如形式程序合成),也有概率方法(比如可微分编程)。机器编程汲取了我们迄今为止获得的所有软硬件知识,站在了历史的拐点上。新的机器学习算法、新硬件与优化硬件、海量而多样的编程数据,这三者是发展机器编程的要素。
微软亚洲研究院首席研究员楼建光指出,机器学习算法的进步,算力的高速发展以及海量的编程数据,让机器编程的发展进入了新的拐点。不过机器编程发展尚在早期,其难点在于目前机器还没有组合与泛化的能力,只能进行简单的编程,稍微长一点的程序就无法完成。复杂程序是由简单程序组合而成的,而程序组合中有很多逻辑和思想,现在的人工智能没有组合能力,缺乏逻辑思维。
尽管机器编程的发展尚在早期,但从全球机器编程的进展看,不同领域有不同进展,在特定领域,已经取得不错的突破。但在通用领域,尚未取得实质性突破,仍需要产、学、研各界齐发力,加速机器编程的突破。
当下,在机器编程的赛道上,越来越多的公司涌了进来。除了微软、谷歌、脸书等,在中国包括百度以及一些创业公司也加入了机器编程的研发行列,不同的公司有不同的技术路线,但他们的每一步探索,都会对未