如果你在70年前对某人说起computer一词,他不会想到一台摆在桌子上的机器,而会想到一个手拿纸和笔的人。在当时,computer都是人,通常是女人,他们进行大量复杂的计算来满足世界对于预先处理好的数字的需要。
他们的劳动成果是数学用表手册,这在当时是不可或缺的工具。每当数学家、工程师、航海家、银行家或精算师需要进行复杂的计算时,他们就会诉诸数学用表。
这些可能是业已出版的最单调乏味的书籍,与之相比,电话簿都会显得引人入胜。然而,一位名叫查尔斯·巴贝奇的数学家却读得津津有味。他衣食无忧,对很多科学领域都有所涉猎。除此之外,他还收集已出版的数学用表,并且毫不留情地挑出其中的错误。
这些用表虽然很有用,但却充斥着错误。与巴贝奇同时代的一个人发现,随机选出的40册数学用表中就包含着3700个已知错误。鉴于这些表格对新兴工业革命的重要性,这让巴贝奇很头疼。
1821年,巴贝奇和他的朋友约翰·赫舍尔聚在一起,通过清除错误来打发夜晚的时光。他们找到了很多错误。巴贝奇后来写道:“这些错误一度如此之多,我不禁惊呼:‘我真希望上帝用蒸汽来进行这些计算。’”正是在这个时候,巴贝奇萌生了发明自动计算机的想法。
他很快就设计出一台机器,即所谓的差分机。它能像人一样自动执行计算,但不会把事情弄糟。
差分机因其基于的数学原理“有限差分法”而得名。简单说来,这是一种技巧,用来解带有两个或两个以上未知数的数学表达式,比如x=y2+yz-1。运用这种技巧只需重复做加法。
1837年,巴贝奇在造差分机的样机时开始思考一种更加通用的计算机。差分机只能做加法,但巴贝奇意识到应当可以制造一种多用途的机器,它能做加法、减法、乘法和除法,操作者可以按照任何顺序进行编程。他称之为分析机。
随便问我什么
分析机往往被称为世界上第一台计算机。这并无夸张:它具有现代计算机的许多核心特征,包括一个中央处理器和一个存储器。更重要的是,它能计算任何在理论上可计算的数学函数。用计算机科学的术语来说,它是“图灵完备的”。
或者说,如果巴贝奇真的造出了它,情况就是如此。他将余生都用于设计这台机器,但直到1871年他去世时,只有一部分造出来了。也许这并不奇怪:一台完整的分析机有火车头那么大。
将这些想法变成现实的是另一位有远见的数学家阿兰·图灵。1936年,24岁的研究生图灵写了一篇论文,为现代计算奠定了基础。
图灵并不打算也没有兴趣造一台实际的机器。相反,他着手解决的乃是大卫·希尔伯特于1928年提出的一项棘手而又神秘的数学挑战,即所谓的“判定问题”。
希尔伯特想知道,是否每个数学陈述(比如2+2=4)都是可解的,是否有些是“不可判定的”。对于像2+2=4这样的陈述,这个问题没什么价值,但对于更为复杂的陈述,事情就比较棘手了。
如果数学是可判定的,就可以造一台对任何数学陈述都可以给出明确的“是或否”回答的机器。数学领域的一切重要问题都是可以解决的。
为了回答这个问题,图灵首先需要构思什么样的机器可以做这件事。在历史上极具影响力的一个思想实验中,图灵设想有一台机器可以读取印在一条无限长的纸带上的符号。读完符号后,这台机器会根据一套预先编好的规则来决定下一步做什么:擦除符号,并/或写入一个新符号;将纸带左移或右移一个空格;或者停止。基于这些规则,这样一台“图灵机”将能解决数学问题。然而,由于每一台机器都有固定的内部规则,所以无法用它来检验希尔伯特那个一般性问题。
计算机说不
图灵表明,计算机永远也无法解决的数学问题之一是所谓的“自指停机问题”。它问:“这个程序会停止吗?”在实际运行程序之前,任何计算机都不可能提前判断。即便它计算了一万亿年而没有得出结论,它仍然不能给出肯定的回答。根据这一结果,图灵证明,没有程序可以确定任何给定的数学陈述的真假。于是,所有数学问题都能得到解决的前景被逻辑否定了。
1871年造的巴贝奇机械计算机的一部分。
通用机
随后,图灵灵光一现:他意识到可以在纸带上制定内部规则。可以对这样一个装置进行编程,来执行任何可设想的图灵机的指令。这是一台能够执行任何数学或逻辑运算序列的“通用图灵机”。换言之,是一台计算机。
由此很容易查明什么是“可计算的”,什么是“不可计算的”。希尔伯特的问题因此得到了解决。图灵表明,有些问题甚至连通用图灵机也无法解决。
这并不完全是坏消息。不到5年,图灵设想的机器变成了现实;1941年,第一台具有图灵完备性的计算机Z3在柏林被造出来。德国政府不知何故未能发现这台计算机的军事潜力,但英国人没有重蹈覆辙。图灵继续在布莱切利园研制巨型计算机,它们在破解纳粹密码方面发挥了至关重要的作用。
如今,计算机早已不再是占据整个房间的庞然大物,但从本质上来说,它们只是对巴贝奇和图灵所提出的想法的物理实现。