用人工智能替代程序员?你想多了!
最近有很多关于代码在经过训练的神经网络的帮助下自己编写代码的话题,但是除了一些有限的用例之外,它变为现实仍需要相当长的一段时间——至少对于普通的开发工作来说是这样的。
尽管自动代码生成并不是一个新概念,但由于在神经网络框架中具有更好的功能和易用性,它已获得了全新的关注。但就像在其他领域,人工智能被吹捧为“短期实现自动化的救星”一样,这样大肆宣扬其实并不合适,将科技广泛应用到现实具有很高的复杂性,至少现在还不行。
就在过去一段时间里,谷歌、微软和IBM都曾推出了一种新的方法来提高开发人员的生产力,并通过深度学习框架来充实自己——至少在某种程度上是这样。新闻标题一般是,代码是自己编写自己,程序员将不再成为必要。然而在现实中,除了开发人员的生产力角度之外,所有这些自动生成代码的应用都提到了:用例仍然是有限的。
微软研究公司最近发布了DeepCoder,这是一种神经网络,它通过输入和输出大量的源代码来预测一个程序的属性。由于各种编程竞争问题,需要更快的代码生成和更高级别的难度。IBM研究院的另一项研究,扫描了数以千计的同行评审的代码、框架和库细节,以帮助开发人员引导神经网络模型生成。
对于DeepCoder来说,要在一段时间内生成大量的代码是很困难的,而且对于IBM的研究工作来说,由于数据输入(分散在文件中,数据碎片等),也有一些限制。谷歌的AutoML只适用于定义的框架,因为标准化是实现任何东西的关键,特别是自定义的神经网络。
尽管IBM研究院的人工智能工程总监Rania Khalaf表示,通过代码库、在体系结构方面收集足够多的神经网络来构建自己的模型是可能的,但它远不止于此。这是因为至少在IBM的工作中,没有标准的框架或库,开发人员社区在足够的质量上使用自动代码生成能力。
Khalaf说,我们可能更接近于让人工智能通过像GitHub这样的代码库进行扫描,并从中获得一些有意义的东西,但是“close”是相对的。“大家可能会认为这很容易实现,但从开发人员和数据科学家的角度来看,要实现完全自动化,必须有一个重要的‘人工介入’因素。”甚至可以在不同的平台、编程模型和库中进行广泛的泛化,这远比IBM研究院强调的深度学习论文的努力要困难得多。
来自IBM研究院的DLPaper2Code的研究人员Senthil Mani指出,深度学习方法之间的互操作性是最大的问题之一。他的团队正在研究一种“语法”来解决这个问题——一种可能与平台无关的抽象表示。他补充说:“如果某一个标准能够在社区中得到采纳,就有可能自动生成更多的代码。”
“更进一步的目标,是使深度学习面向更大的开发者群体,实现深度学习的‘民主化’。开发人员多数在Java等语言方面很擅长,现在必须投入到人工智能应用程序的开发中,且在获取这些库和框架方面仍存在很大的技术差距。我们已经开始构建一个工具,人们可以借此设计一个基于一些网络、层和超参数组合的深度学习模型。实现和编码模式将不同于配置,但最终目标是只需一个想法,开发人员就可以通过‘拖放’层来完成构建模型。”
除了标准化,Mani说,他们在自动代码生成方面取得进展的另一个领域是预测神经网络的层次,这将会增加整体的生产力,但仍然依赖于上面描述的“人工介入”方面。
不过,Mani也同意,我们离自动化程序员的未来还有很长一段路要走。“我们现在看到的更多的是缩短开发人员的时间和精力,以引导他们创建模型。”即使是这个问题本身也很难解决——我们只触及了表面。