英特尔在2020年12月推出机器编程研究系统ControlFlag,可以自主检测代码中的错误,目前仍处于早期阶段。在初步测试中,这个系统利用超过10亿行未标记的产品级别代码进行训练并学习新的缺陷。英特尔首席科学家表示,这款工具可以大幅减少测试和修复bug所需的时间和成本。
那么,机器编程指的是搬运代码模型,还是具有相当的自主开发特征;目前机器编程的主要方法有哪些,效能如何,具备怎样的优势;为什么有专家认为机器编程不仅不会取代程序员,还会创造出大量就业机会,其可能首先大规模应用于什么领域?
代码将不再是“手工艺品”
如今,几乎各个行业都离不开编程。传统编程看似简单,其实对人的要求很高。尽管大多数人可以熟练使用自然语言表达自己的想法,但是让其去编程却不是很容易,那需要思想和底层原理支撑。据统计,目前业内仅有不到1%的人会编写代码。
“往往需要通过长时间的学习和训练才能掌握编程的基本规则。如同好的作家不一定是好的编剧,作家描写人的内心活动可以用‘心如刀扎’这类语言进行描述,但是编剧需要把这个种情绪明确细致地一一描述出来,这样演员才可以栩栩如生地表演出来。”西安电子科技大学电子工程学院教授吴家骥介绍说。
传统编程是基于规则和逻辑把人的意图按照编程语言规范化实现的过程,程序员就像传统工厂流水线上的员工和农场里的农民一样,只需按照定义好的标准接口和编程规范,把需求意图拆解为正确的逻辑,用代码写出来,所以程序员也称为“码农”。
然而,在软件飞速发展的今天,开发和维护却依然是既耗时又容易出错的工作。英特尔研究院机器编程研究部门总监贾斯汀认为,这从软件诞生之日开始就困扰着一代又一代程序员的问题,其实并非无解,他说,“相信我们能创造一个人人都是软件开发者的社会,届时机器将会承担‘编程’部分的工作,让代码不再是‘手工艺品’。所以,我们将其称为‘机器编程’。”
吴家骥说,所谓机器编程,融合机器学习、形式化方法、编程语言、编译器、计算机系统等多个领域。它所使用的自动编程技术既包含精确方法(比如形式程序合成),也有概率方法(比如可微分编程)。
“人类的编程过程侧重于逻辑业务,很少关心编程的语法、格式等。而机器编程实质是搬运代码模型,其目的在于让编程能够更抽象,目前还没有成熟的系统可以达到自主开发软件的程度,包括英特尔最新提出的Controlflag。”吴家骥指出。
用机器编程降本增效
早在上世纪50年代,人类就开始涉足机器编程的研究。在贾斯汀看来,当下正是发展机器编程的好时机。“机器编程汲取了我们迄今为止获得的所有软硬件知识。今日与往时不同的是,我们站在了历史的拐点上,我们有新的机器学习算法、新硬件与优化硬件、海量而多样的编程数据,而这三者是发展机器编程的必要要素。”
目前机器编程的主要方法有哪些,效能如何,具备怎样的优势?吴家骥介绍说,有了机器编程,软件的开发和维护将实现自动化,编程人才的缺口、编程精确度的提升等问题也迎刃而解。机器编程的方法有两种:一是依赖专家知识和模板库的机器编程方法,即编程机器把专家的规则和大量模板库组合起来,进而满足人们的编程意图。其问题在于:专家知识和规则库需要不断积累更新。此外,专家不可能知晓方方面面的相关信息,特别是在编程中存在很复杂的逻辑和多样化的语法差异时。
二是利用机器学习进行自我监督去学习编程规则,通过海量给定的代码去学习正确的编程规则,进而发现错误的代码形式。包括两个阶段:模式挖掘阶段,主要学习用户指定的GitHub存储库中的特殊编码模式,当学习完成时,该模式将生成一个优先级字典,其中包含可接受和不可接受的两种特殊模式,为后续机器编程提供知识储备;扫描阶段,主要是根据所学的特异性模式字典分析给定的源代码存储库,当识别到异常模式时,将通知用户,并为用户提供可能的替代方案或进行自动校正。
“利用机器学习和人工智能的方法可提高机器编程效率,这是由于自监督学习可以不断自我完善自我进化,使得机器越来越聪明。一方面在编程时可以快速把人类意图或自然语言转变为编程语言,另一方面使编译器更聪明,在代码调试过程中可以智能的提示错误。”吴家骥指出。
折磨着全球程序员的bug是所有软件开发和维护的一大隐痛。据统计,在IT行业每年花费的1.25万亿美元软件开发成本中,大约有50%用于Debug代码。就此,英特尔首席科学家贾斯汀表示,“ControlFlag是一个强大的新工具,可以大幅减少评估和Debug代码所需的时间和成本。据悉,这个系统检测Bug的功能是通过机器编程实现的,其中融合机器学习、形式化方法、编程语言、编译器和计算机系统。英特尔已经开始评估在内部使用这个系统,在自己的软件和固件产品化中寻找Bug,成为一些分析项目的关键组成部分。
机器编程将创造大量就业机会
据国外知名数据公司统计,全球程序开发人员2019年达2.39千万人,每年平均增加1百万人,预估2024年将达到2.87千万人。有人不禁担忧,现在学计算机以后会不会产生人才饱和,未来机器编程会取代程序员吗?
“未来机器编程不仅不会取代程序员,还会创造出大量就业机会,可能多达上百万个。这是由于机器编程大幅度的降低编程门槛,就如同电脑上的很多工具,提高了工作效率,可以让更多的普通人参与到编程中,实现更多的自动化工作流。”远望智库AI事业部部长、图灵机器人首席战略官谭茗洲表示。
英特尔有个愿景:只要你能以机器可理解的方式表达你的“意图”——可能是用自然语言,或者可视化的图表,甚至是打个手势——机器编程就会帮你开发属于你自己的软件。
对此,谭茗洲解释道,“未来需要更有效的编程意图概要设计,把大的意图拆解为更小的意图,每个意图更容易让机器理解,进而可以让机器AI编写代码。未来机器AI编程可能以一种交互式的方式进行,通过多轮对话交互式形式的编程环境,程序设计者通过与AI编程机器意图交互和所见所得的反馈,实现机器编程。”
专家预测,从当前人工智能相关技术的发展来看,机器编程得到广泛应用可能仍然需要几十年以上,因为广泛应用意味着机器能更准确的了解人类的意图,但是人类自然语言的表达本身就会存在很多不确定性。因此机器编程也并不可能完全替代程序员,特别是在需要多重嵌套的逻辑和多分支的逻辑场景下,因为这些场景需要更确定性的逻辑分析,显然对机器来说是比较困难的。机器编程可能首先大规模应用于整体逻辑能够拆解为多个简单逻辑的场景,如工作流固定的场景或简单的计算场景。抑或逻辑简单但精确性要求高的场景,如财会、医疗、金融等领域。
谭茗洲指出,“要想在人工智能时代做到‘人机共存’,需顺应技术的发展趋势,让机器去做其擅长的部分,例如软件开发中,枯燥的‘活儿’由机器承担,人们得以有更大的自由、灵活度和时间精力去创造,可以从事设计和制造机器人的工作。”(记者 华凌)
责任编辑:kj005
文章投诉热线:156 0057 2229 投诉邮箱:29132 36@qq.com