许多人认为机器只会做它们的程序中设定的事,因此不会具有创造性和原创力。麻烦之处在于,这一论点的前提假设正是它意图展示的内容:你无法为机器设定一个具有创造性的程序!事实上,开发一款程序让计算机去做一些任何程序员都无法预知的不同的事,容易的程度会让人感到惊讶。这件事之所以有可能,源于我们所称的“猜谜原则”。
猜谜原则(puzzle principle) :我们可以为一台计算机设定程序,让它通过试错来解决任何问题,而我们不需要提前知道解决办法。
所谓“试错”,就是开发程序让机器可以在某个可能的范围内系统地产生所有可能的结构。举例而言,假定你想有一台机器人可以在一条河上建造一座桥。最高效的编程方式就是执行一个特定的程序,先提前计划好,然后把木板和钉子精确地安置在特定的位置。当然,除非已经知道如何建造一座桥,否则你无法写出这样的程序。但想想下面这个备选方案,它有时被称为生成与测试法。它需要编写两部分程序。
生成(generate) :第一道程序就是一个接一个地生成木板和钉子所有可能的安排。开始时你可能会觉得这样的程序很难写,但它其实惊人地简单,只要你明白每种安排都不需要有什么道理就行!
测试(test) :程序的第二部分就是检查每种安排,看看问题是否得到了解决。如果目标是建造一座大坝,测试就是检查它有没有拦住水流。如果目标是建造一座桥,测试就是看它是否跨过了河流。
这种可能性让我们重新检查了所有关于智能和创造性的旧理念,因为它表明,至少从原则上,只要我们可以识别出解决方案,那些问题就都可以让机器来解决。然而,这并不太切实际。想想看,也许有上千种方法可以把两块板子连接在一起,要是把四块板子钉在一起,估计有十几亿种方法。要利用猜谜原则制造出可用的桥梁,所需的时间可能长得难以想象。但是从哲学上来说,这还是有帮助的,它消除了创造性在我们心中的神秘感,取而代之的是关于程序效率的更加具体而细致的问题。我们的造桥机器存在的主要问题就是生成器与测试之间缺乏联系。如果没有某种朝向目标的进展,那么比无思维的程序也好不到哪去。