计算机下棋的水平如今还未能达到象棋大师那样的水平,但它足以与一个优秀的业余棋手相媲美。更准确的说法是,计算机的程序足以与一个优秀的业余棋手相媲美,因为程序本身对使用具体哪一台计算机来表演其技巧是从不苛求的。那么,程序员的任务是什么呢?第一,他肯定不像一个演木偶戏的牵线人那样每时每刻操纵计算机。这是作弊行为。他编好程序,把它输入计算机内,接着计算机便独立操作:没有人进行干预。除了让对手把他的一着按入机内。程序员是否预先估计到一切可能出现的棋步,从而编好一份长长的清单,列出针对每一种情况的妙着?当然不是这样。因为在棋局中,可能出现的棋步多如恒河沙数,就是到了世界末日也编不出一份完备的清单来。也是出于同样的理由,我们不可能为计算机编制这样一份程序,使它能在“电脑”里事先走一次所有可能出现的棋步,以及所有可能的应着,以寻求克敌制胜的战略。不同的棋局比银河里的原子还要多。这些仅仅是琐细的问题,说明为下棋的计算机编制程序时面临的难题,事实上这是一个极难解决的难题。即使是最周密的程序也不能和象棋大师匹敌,这是不足为奇的。
程序员的作用事实上和一个指点他儿子怎样下棋的父亲差不多。他把主要的走法提纲挚领地告诉计算机,而不是把适用于每一种开局的各种走法都告诉它。他不是用我们日常使用的语言逐字地说,“象走田”,而是用数学的语言这样说,“象的新坐标来自老坐标,程序是在老坐标X以及老坐标Y上加上同一个常数,但其符号不必相同。”实际上使用的语言当然更简洁些。接着他可以再把一些“忠告”编入程序内,使用的是同样的数学或逻辑语言,其大意如果用我们日常的语言来表达,不外乎“不要把你的王,bao露在敌前”,或一些实用的诀窍,如一马“两用”,同时进攻对方两子。这些具体的走法是耐人寻味的,但讲下去未免离题太远。重要的是,计算机在走了第一步棋之后,就需要独立操作,不能指望它的主人再作任何指点。程序员所能做的一切只是在事先竭尽所能把计算机部署好,并在具体知识的提供以及战略战术的提示两者之间取得适当的平衡。
基因也控制它们所属生存机器的行为,但不是像直接用手指牵动木偶那样,而是像计算机的程序员一样通过间接的途径。基因所能做到的也只限于事先的部署,事后生存机器在独立操作时它们只能袖手旁观。为什么基因如此缺乏主动精