纽约市的官员想要追踪新冠病毒肺炎(COVID-19)在城市中肆虐的情况,并有效地为有需要的人提供服务。为此,他们建立了一个在线门户网站,用于收集 COVID-19感染者以及病例接触者的信息。速度至关重要,COVID-19门户网站三天后便上线运行了,而这一切都无需编写任何代码[1]

这一壮举由纽约市的初创公司Unqork所开发的无代码(no-code)软件开发平台实现,并很快得到了华盛顿特区的效仿,用于当地的COVID-19支持中心[2]。与无代码平台类似的还有需要一些基本编码知识的低代码平台,而两者日益壮大的趋势代表着计算机科学向实现编码自动化这一几十年来的目标又迈进了一步。

“想象一个不必编写代码的世界,”加利福尼亚大学伯克利分校的计算机科学教授Koushik Sen说道,“只要动嘴,计算机就能帮你实现,就像是一个用于编程的亚马逊Alexa智能助理。”

除了众多初创公司,甲骨文(Oracle)、Salesforce、微软(Microsoft)和阿里巴巴(Alibaba)等科技巨头也拥有自己的无代码和低代码软件开发平台。在2020年1 月,谷歌公司收购了源于美国华盛顿州西雅图市的无代码平台AppSheet [3]。根据总部位于美国康涅狄格州斯坦福德的全球研究公司高德纳的预测,到2024年,低代码平台将用于65%的应用程序开发工作[4]

北京大学计算机科学技术系的讲席教授谢涛表示,这种增长反映了企业日益数字化以及对定制应用程序需求的增长。因为没有足够的软件工程师来满足需求,企业如今开始转向这些愈加强大的平台。

在大多数的这些平台中,用户可以通过拖放元素(图1)来创建网页和移动应用程序,而无需编写代码。但是,这种高级编程的概念并非如此新颖。Sen表示,编程一直朝着更简便易懂的形式发展,无代码和低代码软件开发只是该趋势的一种延伸。例如,在20世纪50 年代,编程中的汇编语言过于烦琐,计算机科学家便创建了Fortran等更易于编写和理解的高级语言。甚至电子表格都是一种无代码或低代码的平台,用户几乎无需编写任何代码即可分析和处理数据。

《图1》

图1. Mendix等低代码平台允许用户通过拖放组件来设计应用程序,无需编写代码。该截图展现的是拖放界面。图片来源:Mendix,经允许。

如今,大多数商业化的拖放平台都是通过预定义的组件来创建应用程序的。但是,某些平台开始利用人工智能(AI)来更好地预测用户的需求。例如,美国马萨诸塞州波士顿市的低代码平台Mendix拥有一个由机器学习驱动的助手,可识别历史数据中的规律,以便在用户创建应用程序时为其提供建议[5]。谢教授说道,融入这种数据驱动的智能技术反映了这些平台的下一步发展。“使代码生成与合成足够智能化将是一个重要的里程碑。”

最终,人工智能也许可以自动生成代码,这一目标被称为“程序合成”。加利福尼亚大学伯克利分校的计算机科学助理教授Alvin Cheung表示:“能够让计算机自己编写程序一直是计算机科学家的梦想。”你可以通过提供输入和输出的示例,演示你想要完成的任务,或者简单地用自然语言描述你想要的程序,来告诉计算机你想要什么,计算机就会生成代码。

但是,Cheung说道,解读人类需求、扩大规模并产生大量代码仍然是程序合成的重大挑战,即使是最先进的工具也远远无法达到目标。不过,由于深度学习的进步以及更高效的自动编码方法的出现,我们正在进步。从原则上讲,计算机可以查阅所有可能的代码,然后找出可以完成所需任务的组合来生成程序。但是,这不切实际,因此计算机科学家一直在开发更智能的方法来缩小搜索范围。Cheung表示,在使用这种方法的工具中,一个最好的示例就是微软电子表格的快速填充功能。当你输入数据时,它会识别规律并相应地自动填充剩余的单元格。

IntelliJ IDEA(来自捷克共和国布拉格的JetBrains 公司)和TabNine(来自以色列特拉维夫的Codota公司)等其他商业工具分别使用机器学习和深度学习来识别人们的编码规律并在编码时提供建议。Sen说道:“这就像更加强大的自动填充功能一样。”与拖放平台不同,这些工具适用于编码人员。尽管它们不合成代码,但其目的是帮助程序员更快地编写代码,并减少错误。

当前所有的这些技术都存在局限和挑战。谢教授说,没有专业的开发人员,使用拖放平台制作的应用程序可能难以更新从而满足新的技术要求。这些应用程序运行时的性能可能不那么高效,并且可能很难与一个公司里的大型软件系统整合。一些创建移动应用程序的无代码工具,即在线应用程序生成器可能会遇到安全问题 [6]。对于不懂代码的开发者来说,调试将是一个很大的挑战。

如果程序合成成为现实(Sen表示“这会实现的”),即使是最好的程序员也许都很难理解代码。这些代码不会有注释,并且可能会使用难以理解的变量名。Sen说道,计算机认为最有效的代码对于人类来说可能是无法理解的。而且神经网络算法本身具有“黑箱”性质,它可能已经生成了代码,然而人们通常无法理解这一结果是如何实现的。

但是,无论是使用程序合成还是拖放平台,越来越多的人以后将能够创建程序。这可以解放训练有素的编码人员,让他们专注于最棘手的问题。我们对编码人员的需求可能会减少,但是我们仍然需要专家。“我不认为人类会被完全取代,”Cheung表示,“现在仍然有大量的编程工作是自动化系统无法胜任的,而且即使在不久的将来也不行。”