计算机如何学会编程

计算机如何学会编程
本内容由人工智能自动翻译。

计算机科学家历来善于借鉴自然界的理念,例如进化。在优化计算机程序方面,过去五六年间出现了一种非常有趣、以进化为基础的方法,有望为工业界乃至最终的消费者带来难以估量的益处。我们称之为遗传改进。

遗传改进是指编写一个自动化“程序员”,通过反复试验修改软件的源代码,使其运行效率更高。这可能包括调换代码行的顺序、删除代码行并插入新行——与人类程序员的做法十分相似。随后,会根据某种质量指标测试每次修改,以确定新版本代码是否优于旧版本。其做法是对大型软件系统进行细微调整,以取得更好的结果。

益处

这些干预能在程序员所说的软件功能属性方面带来多种益处。例如,它们可以提高程序的运行速度,或消除漏洞。也可以用来帮助将旧软件移植到新硬件上。

其潜力不止于此。由于遗传改进作用于源代码,它也能改善所谓的非功能属性。这些属性包括并非只关乎程序输入输出行为的各种特征,例如软件消耗的带宽或能源。对于人类程序员来说,这些问题往往尤其棘手,因为光是构建能够正确运行的软件就已经是一项艰巨任务。

近年来,我们看到一些遗传改进的实例开始受到认可——尽管目前仍局限于大学之内。一个早期的典型案例可追溯至 2009年:由新墨西哥大学和弗吉尼亚大学开发的自动化“程序员”,在从媒体播放器到俄罗斯方块游戏等各种软件中修复了105个漏洞中的55个。为此,它赢得了5,000美元(3,173英镑)和金色 Humie 奖;该奖项旨在表彰通过遗传与进化计算取得的成就。

过去一年里,伦敦的伦敦大学学院(UCL)监督了两个研究项目,展示了这一领域的潜力(完全披露:两项研究都有合著者 William Langdon 参与)。第一项 涉及 一种遗传改进程序,它能够处理一款代码超过50,000行的大型复杂软件,并将其功能运行速度提高到原来的70倍。

第二项 完成了 首次自动化的整套软件移植:研究人员将名为 Babel 的语言翻译程序插入名为 Pidgin的即时通信系统中。

自然与计算机

要理解这一机遇的规模,就必须认识到软件是一种独特的工程材料。在电气和机械工程等其他工程领域,人们可能会在制造最终产品之前先建立计算模型,因为这有助于深化认识并测试特定设计。另一方面,软件本身就是它自己的模型。软件的计算模型仍然是一个计算机程序。它真实呈现最终产品,因此能最大限度地发挥自动化程序员对其进行优化的能力。

正如我们在开篇所说,计算机科学家借鉴自然界理念有着悠久传统。例如,自然界启发了遗传算法;遗传算法会在现实问题的数百万种可能答案中进行搜索,针对包含许多变量的问题找出最佳答案。应用实例包括从设计完整的道路配送网络,到微调发动机设计。

尽管在这一语境下,进化这一比喻已成了某种负担, 正如这里所讨论的,遗传算法已经取得了一些成功,其结果可与人类编写的程序相媲美,甚至更胜一筹。

进化也启发了 遗传编程,它试图利用少量指令从头构建程序。然而,它有其局限。众多批评意见之一是,它甚至无法进化出通常会要求本科一年级学生编写的那类程序,因此也无法扩展到大型跨国公司的支柱——庞大软件系统。

因此,遗传改进对这一领域而言是一种格外有趣的另辟蹊径。它不试图从头重写整个程序,而是通过少量细微修改取得成功。它甚至不必局限于遗传改进本身。Babel/Pidgin 的案例表明,它还可以将一款软件移植到另一个程序中,这类似于外科医生将器官从捐献者移植到受者体内。这提醒我们,总体目标是实现软件工程自动化。无论自然界能在发展这一引人入胜的新领域时教给我们什么,我们都应全力汲取。

本文由 The Conversation合作发布。本文的发布并不意味着世界经济论坛认同其中观点。

如需持续了解议程动态, 请订阅我们的每周简报。

作者:John R. Woodward 是斯特灵大学计算机科学讲师。Justyna Petke 是伦敦大学学院(UCL)进化、搜索与测试研究中心的研究助理。William Langdon 是伦敦大学学院(UCL)的首席研究助理。

图片:2013年2月28日,华沙,一名男子正在敲击电脑键盘。路透社/Kacper Pempel

分享:

授权与转载
世界经济论坛发布的文章,可依据《知识共享署名-非商业性使用-禁止演绎4.0国际公共许可协议》以及我方《使用条款》进行转载。 本文所表达的观点仅代表作者个人立场,并不代表世界经济论坛的观点。