python中国-Python China

图灵的光环

http://www.yinwang.org/blog-cn/2015/10/18/turing

仿佛全世界的人都知道,图灵(Alan Turing)是个天才,是他创造了计算机科学,是他破解了德国纳粹的Enigma密码。由于他的杰出贡献,计算机科学的最高荣誉,被叫做“图灵奖”。然而根据自己一直以来对图灵机等计算模型的看法,加上一些历史资料,我发现图灵本人的实际成就,相对于他所受到的崇拜,其实相差甚远。

由于二战以来各国政府对于当时谍报工作的保密措施造成的事实混淆,再加上图灵的不幸生世所引来的同情,图灵这个名字似乎拥有了一种扑朔迷离的光环。人们把很多本来不是图灵作出的贡献归结在他身上,把本来很平常的贡献过分地夸大。图灵的光环,掩盖了许多对这些领域做出过更加重要贡献的人。

显示全部...2012年,在图灵诞辰一百周年的时候,人们风风火火的召开各种大会,纪念这位“计算机之父”,很多媒体也添油加醋地宣传他的丰功伟绩。还有个叫Andrew Hodges的人,抓住这个时机推销自己写的一本传记,叫做《Alan Turing: The Enigma》。这本书红极一时,后来还被改编成了电影。

这本传记看似客观,引经据典,字里行间却可以感受到作者对图灵个人的膜拜和偏袒,他在倾心打造一个“天才”。作者片面地使用对图灵有利的证据,对不利的方面只字不提。仿佛图灵做的一切都是有理的,他做的不好的地方都是因为别人的问题,或者风水不好。提到别人做的东西,尽是各种缺陷和局限性,不是缺陷也要说成是缺陷;提到图灵的工作,总是史无前例,开天辟地的发明。别人先做出来的东西,生拉硬拽,硬要说成是受了图灵的“启发”,还怪别人没有引用图灵的论文。这让你感觉仿佛别人都在抄袭图灵伟大的研究成果,都在利用他,欺负他似的。如果你不想花钱买书,可以看看同一作者写的一个图灵简要生平,足以从中感受到这种倾向。

我写这篇文章的很大一部分原因,就是因为这本传记。作者对图灵贡献的片面夸大,对其他一些学者的变相贬低,让我感到不平。图灵在计算机界的名声,本来就已经被严重的夸大和美化,被很多人盲目的崇拜。现在出了这本传记和电影,又在人们心中加重了这层误解。所以我觉得有必要澄清一些事实,让人们不再被迷惑。

很多人提到二战Enigma密码的故事,就会把功劳一股脑地归到图灵头上,只字不提其他人。其实呢,破解Enigma密码是很多人共同努力的结果,图灵只是其中的一员。这些人缺少了任何一个,都可能是灾难性的后果。其中好些人的想法早于图灵,启发过图灵,贡献比图灵的大,设计的东西比图灵的先进,却很少有人听说过他们的名字。论智力和贡献,图灵在其中只是中等水平,最后说起来倒好像是他单枪匹马拯救了大家,这是不公平的。

最初破掉Enigma密码的,其实不是英国人,而是波兰人。波兰人不但截获并且仿造了德国人的Enigma机器,而且发现了其中微妙的漏洞,发明了一种用于解密的机器叫做BOMBA,以及一种手工破解的方法叫做Zygalski sheets。BOMBA可以在两个小时之内破解掉Enigma密码。波兰人一声不吭地窃听了德国人的通信长达六年半,最后在二战爆发前夕把这技术送给了英法盟友。

BOMBA的工作原理,其实就是模拟好几个Enigma机器,“并发”运转,这样可以加速猜出秘钥。最开头这样还行,但后来德国人改进了Enigma机器,把可选的齿轮从3个增加到了5个。5选3,有60种情况,这样秘钥的空间增大了60倍。理论上BOMBA只要运转60倍多的Enigma机器,就可以破解这增大的解空间,然而那已经超出了波兰的物资和人力。再加上德国人就要打过去,所以波兰只好请英法盟友帮忙。

图灵最重要的贡献,就是改进波兰人的BOMBA,设计了一个更好的机器叫BOMBE。BOMBE比起BOMBA,其实并没有质的飞跃,只不过BOMBE同时模拟的Enigma机器更多,转的更快。另外它加入了一些“优化”措施,尽早排除不可行的路径,所以速度快很多。图灵最初的设计,要求必须能够事先猜出很长的文本,所以基本不能用。后来Gordon Welchman发明了一种电路,叫做diagonal board,才使Bombe能够投入实用。关于Gordon Welchman的故事,你可以参考这个BBC纪录片。

在Bombe能够投入使用之前,有一个叫John Herivel的人,发现了一种特殊的技巧,叫做Herivel tip,这种技术在Bombe投入使用之前几个月就已经投入实用,破解掉很多德军的消息,立下汗马功劳。如果Herivel tip没有被发明,盟军可能在1940年5月就已经战败,BOMBE也就根本没机会派上用场。

同时在Bletchley Park,还诞生了一台大型可编程电子计算机Colossus,它是由一个叫Tommy Flowers的工程师设计的。Colossus不是用来破解Enigma密码的,而是用于破解Lorenz SZ-40。那是一种比Enigma还要先进的密码机器,用于发送希特勒的最高指令。

德国人后来又改进了他们的通信方式,使用了一种具有四个齿轮的Enigma机器。这大大的增加了破解的难度,普通的Bombe机器也破不了它了。后来是Harold Keen设计了一个叫做Mammoth的机器,后来加上美国海军的帮助,制造了更快的Bombe,才得以破解。

所以你看到了,所有这些人的工作加起来,才改善了二战的局面。波兰人的BOMBA,已经包含了最重要的思想。图灵的工作其实更多是量的改进,而不是质的飞跃。现在很多人喜欢跟风,片面的夸大图灵在其中的作用,这是不对的。如果你对Enigma机器的技术细节感兴趣,可以参考这两个视频:[视频1][视频2]。

理论计算机科学

图灵被称为“计算机之父”,计算机科学界的最高荣誉,被叫做“图灵奖”(Turing Award)。然而如果你深入的理解了计算理论和程序语言理论就会发现,图灵对于理论计算机科学,其实并没产生长远而有益的影响。在某种程度上说,他其实帮了一个倒忙。图灵的理论复杂不堪,给人们造成很大的误导,阻碍了计算机科学的发展。而且他对于发表论文,对待研究的态度让我怀疑,我觉得图灵本人其实就是当今计算机学术界的一些不正之风的鼻祖。

图灵机和lambda演算

绝大部分计算机专业的人提到图灵,就会想起图灵机(Turing Machine)。稍微有点研究的人,可能知道图灵机与lambda演算在计算能力上的等价性。然而在“计算能力”上等价,并不等于说它们具有同样的价值,随便用哪个都无所谓。科学研究有一条通用的原则:如果多个理论可以解释同样的现象,取最简单的一个。虽然lambda演算和图灵机能表达同样的理论,却比图灵机简单,优雅,实用很多。

计算理论(Theory of Computation)这个领域,其实是被图灵机给复杂化了。图灵机的设计是丑陋,复杂,缺乏原则的。它的读写头,纸带,状态,操作,把本来很简单的语义搞得异常复杂。图灵机的读写两种操作同时发生,这恰好是编程上最忌讳的一种错误,类似于C语言的i++。 图灵机是如此的复杂和混淆,以至于你很难看出它到底要干什么,也很难用它清晰地表达自己的意思。这就是为什么每个人上“计算理论”课程,都会因为图灵机而头痛。如果你挖掘一点历史,也许会发现图灵机的原型,其实是图灵母亲使用的打字机。用一台打字机来建模所有的计算,这当然是可行的,然而却复杂不堪。

相比之下,lambda演算更加简单,优雅,实用。它是一个非常有原则的设计。Lambda演算不但能清晰地显示出你想要表达的意思,而且有直接的“物理实现”。你可以自然的把一个lambda演算表达式,看成是一个电子线路模块。对于现实的编程语言设计,系统设计,lambda演算有着巨大的指导和启发意义。以至于很多理解lambda演算的人都搞不明白,图灵机除了让一些理论显得高深莫测,还有什么存在的意义。

历史的倒退

图灵机比起lambda演算来说,其实是一个历史的倒退。1928年,Alonzo Church发明了lambda演算(当时他25岁)。Lambda演算被设计为一个通用的计算模型,并不是为了解决某个特定的问题而诞生的。1929年,Church成为普林斯顿大学教授。1932年,Church在Annals of Mathematics发表了一篇论文,纠正逻辑领域里几个常见的问题,他的论述中用了lambda演算。1935年,Church发表论文,使用lambda演算证明基本数论中存在不可解决的问题。1936年4月,Church发表了一篇两页纸的“note”,指出自己1935年那篇论文可以推论得出,著名的Hilbert“可判定性问题”是不可解决的。

1936年5月,当时还在剑桥读硕士的图灵,也写了一篇论文,使用自己设计的一种“计算机器”(后来被叫做图灵机)来证明同一个问题。图灵的论文投稿,比Church最早的结论发表,晚了整整一年。编辑从来没见过图灵机这样的东西,而且它纷繁复杂,远没有lambda演算来得优雅。就像所有人对图灵机的第一印象一样,编辑很难相信这打字机一样的操作方式,能够容纳“所有的计算”。他无法确定图灵的论述是否正确,只好找人帮忙。Church恐怕是当时世界上唯一能够验证图灵的论文正确性的人。所以一番好心之下,编辑写了封信给Church,说:“这个叫 图灵的年轻人很聪明,他写了一篇论文,使用一种机器来证明跟你一样的结果。他会把论文寄给你。如果你发现他的结果是正确的而且有用,希望你帮助他拿到奖学金,进入Princeton跟你学习。”

图灵就是这样成为了Church的学生,然而图灵心高气傲,恐怕从来没把Church当成过老师,反倒总觉得Church抢先一步,破坏了自己名垂青史的机会。跟Church的其它学生不一样,图灵没能理解lambda演算的精髓,却认为自己的机器才是最伟大的发明。进入Princeton之后,图灵不虚心请教,只是一心想发表自己的论文,想让大家对自己的“机器”产生兴趣,结果遭到很大的挫折。当然了,一个名不见经传的人,做了个怪模怪样的机器,说它可以囊括宇宙里所有的计算,你不被当成民科才怪呢!

1937年,在Church的帮助下,图灵的那篇论文(起名为《Computable Numbers》)终于发表了。Church还是很器重图灵的,他把图灵的机器叫做“图灵机”。不幸的是,论文发表之后,学术界对此几乎没有任何反响,只有两人向图灵索取这篇论文。图灵当然不爽了,于是后来就到处推销自己的图灵机,想让大家承认那是伟大的发明。有了一个锤子,看什么都是钉子。后来每到一个地方,每做一个项目(见下一节),他都想把问题往自己那篇论文和图灵机上靠,东拉西扯的想证明它的价值,甚至称别人发明的东西全都是受到了图灵机的启发…… 经过人们很长的时间的以讹传讹之后,他终于成功了。

图灵当年的作法,其实跟当今计算机学术界的普遍现象差不多。我想发表 自己的想法A,结果别人已经发表了B,解决了A要解决的问题,而且还比A简单和清晰。怎么办呢?首先,我声明自己从没看过B的论文,这样就可以被称为“独立的发现”。然后,我证明 A和B在“本质”上是等价的。最后,我东拉西扯,挖掘一下B的局限性,A相对于B在某些边沿领域的优势…… 这样反复折腾,寻找A的优势,总有一天会成功发表的。一旦发表成功,就会有人给我唱高调,没用的东西也要说成是有用的。他们会在A的基础上发展他们自己的东西,最后把我推崇为大师。那发表更早,更简单优美的B,也就无人问津了。胜利!

现在不得不说一下《图灵传》对此的歪曲。Church的论文发表,比图灵的论文投稿还早一年,而且Church使用了比图灵机更简单优雅的计算模型。Church的成果本来天经地义应该受到更多的尊重,到头来作者却说:“…and Turing was robbed of the full reward for his originality”(见第3节“The Turing machine”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值