“计算的目的是洞察,而非数字(The purpose of computing is insight, not numbers.)”
——Richard W. Hamming
撰文 | Alex
技术审校 | 赵军
1986年3月7日,在贝尔通信研究系列座谈会的一个研讨会上,加利福尼亚州蒙特雷海军研究生院教授、贝尔实验室退休科学家理查德·汉明博士发表了一场非常精彩的演讲,题目是《你和你的研究》(You and Your Research)。演讲围绕 “为什么做出重大贡献的科学家如此之少而长期被遗忘的科学家如此之多”这一问题展开,汉明基于过去四十年间他对身边伟大科学家们的切实观察以及对他们的生平、特质、能力、工作习惯等方面的研究,向在场听众分享了他的所学所感。这场演讲非常有名,文字版流传至今,并常常被推荐给科研工作者阅读。
理查德·汉明
毫无疑问,汉明本人就是一位伟大的科学家,他为计算机科学和电信领域做出了巨大贡献。在其硕果累累的成就中,汉明码无疑是最广为人知的。汉明码是一组可以检测和纠正计算机错误的编码,它的出现为日后计算机和通信领域的发展奠定了基础,并广泛用于调制解调器、嵌入式处理器和卫星等。
想当工程师的数学家
汉明在高中时期开始对数学产生兴趣。高一的代数课上,他就发现自己的能力已经超过授课老师了。虽然拥有卓越的数学能力,但汉明并没有打算成为一名数学家,因为他当时心心念念的是去大学学习工程学,成为一名工程师。
可惜事与愿违,唯一能为他提供奖学金的芝加哥大学没有工程学这个专业,他迫不得已选择了数学(美国当时正处在“大萧条”时期,经济上的困难使汉明别无选择),并一路念到了博士。
不过后来汉明评价这段经历时,反倒庆幸自己当初的选择,他说:“如果我成为一名工程师,就得天天和各种检修孔打交道,不可能体会到前沿科研工作带来的兴奋。”
1942年,汉明从伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana–Champaign)博士毕业,并留校做了一名数学老师。同年,他与同学Wanda Little走入了婚姻殿堂。1944年,他成为了路易斯维尔大学(University of Louisville)的一名助理教授。
正当他以为自己将会把一生奉献给学校的时候,一封老友的来信彻底改变了他的命运。他的朋友在信上说:“我现在在Los Alamos(美国新墨西哥州的一个县),这里正在发生一些有趣的事,过来和我一起工作吧!”
信中提到的“有趣的事”正是举世闻名的“曼哈顿计划”。
Los Alamos国家实验室里,科学家们正在测试原子弹丨图片来自Washington Post
曼哈顿计划(Manhattan Project):美国(英国和加拿大协助)于1942年6月开始实施利用核裂变反应来研制原子弹的计划。该工程集中了当时西方国家(除纳粹德国外)最优秀的科学家,动员了10万多人参加这一工程,历时3年,耗资20亿美元,于1945年7月16日成功地进行了世界上第一次核爆炸,并按计划制造出两颗实用的原子弹。
1945年,汉明离开路易斯维尔,前往Los Alamos。一个月以后,他的妻子Wanda也跟随过去,夫妻两人一同投入到了“曼哈顿计划”的工作中。在Los Alamos实验室,汉明的工作主要是为“曼哈顿计划”进行计算的IBM计算机进行编程(汉明当时对这些大型机器一无所知,不过他很快就学会了如何操作); Wanda则为物理学家恩利克·费米(Enrico Fermi)和爱德华·泰勒(Edward Teller)做计算工作。
汉明曾在文章Mathematics on a Distant Planet中这样描述当时的工作:
在Los Alamos……我们那时正在设计原子弹。在第一次现场测试前不久,有个人过来让我检查他的计算数据,我同意了,当时我本来想让我的下属来做这项工作。当我问他是关于什么的计算时,他说:“这是试验炸弹点燃整个大气层的概率。” 我当即决定自己来检查!第二天,当他来求答案时,我对他说:“计算显然是正确的,但我不知道氧和氮俘获截面的公式——毕竟,在所需的能量水平下不可能进行实验。”他回复我说,他想让我检查的是计算结果而不是物理模型(就像物理学家和数学家的谈话那样),然后便离开了。
我对自己说:“你都做了什么?汉明,你现在做的事正将地球上所有生命置于巨大的风险之中,而你对这样重要的事却知之甚少?”我在走廊上踱来踱去,一位朋友走过来问我有什么困扰,我把这件事跟他说了。他的回答是:“没关系,汉明,没有人会责怪你。”
“曼哈顿计划”结束后,其他科学家都陆续离开了Los Alamos,但汉明没有马上离开,而是又在那里继续工作了6个月的时间。“我很想弄清楚那里发生了什么,以及‘曼哈顿计划’成功背后的原因,”他说。在这期间,汉明将各类计算的详细信息整理成文。他认为科学家的一部分工作是写作和教学,因为这两件事可以让后来人能够继续他的工作。
尽管汉明把他在Los Alamos的角色描述为“计算机看门人(Computer Janitor)”,但他看到了计算机模拟的实验,而这些实验在实验室或者实际的情况里是不可能完成的。他后来回忆说:“当我有时间思考这个问题时,我意识到这意味着科学将被改变。”
也是在这时,汉明意识到,他当初无奈地放弃工程学而选择数学绝对是明智之举,因为只有数学才能让他接触到如此前沿的科研工作。
贝尔实验室和汉明码
1946年,汉明离开Los Alamos后,进入贝尔实验室数学研究部工作,当时该部门刚刚聘用了克劳德·香农、Donald P. Ling和Brockway McMillan。这四人称自己为“少壮派(Young Turks)”。他们的年龄都在30岁左右,年富力强,并且都有过战争时期投身科研的经历。
汉明曾这样评论“少壮派”:我们都是在大萧条时期成长起来的幸运儿,我们认为自己应该加倍努力,回报这个世界。在二战期间,为了赢得战争,我们所有人都要学习我们不想学的东西,所以我们每个人都吸收了其他领域的思想。我们对传统缺乏耐心,并在很早就都从事了非常重要的工作。我们都曾是一流的麻烦制造者。我们以非常规的方式做着非常规的工作,但却获得了非常有价值的结果。因此,管理层不得不容忍我们的所作所为,允许我们“自娱自乐”。
汉明曾与香农共用一间办公室,据他本人回忆:在贝尔实验室,我进入到了一个非常高产的部门,Bode(Hendrik Wade Bode,美国科学家,现代控制论先驱)当时是部门领导,香农也在那里。有段时间,我跟香农共用一个办公室,很巧合的是,当时他在研究信息论,而我在研究编码理论。
1968年的贝尔实验室丨图片来自Computer History Museum
在贝尔实验室,虽然汉明被安排的工作是研究弹性理论(Elasticity Theory),但他依然痴迷于计算机,并将大部分时间花在了上面。
1947年,一个周五晚上,在汉明准备回家之前,他将计算机设置为可以在周末两天继续执行复杂计算。等到下周一,当汉明到了办公室以后,他发现计算过程早期出现了一个错误,导致全部计算失败。
计算机只能处理由0和1表示的二进制序列,如果序列中的单个位(指计算机存储信息的最小单位)出错,那么整个序列都会发生错误。为了检测这一点,汉明使用奇偶校验位来校验每个序列的正确性。“如果计算机可以判断错误何时发生,”汉明推理,“那么肯定有一种方法可以判断错误在哪里,以便计算机可以自行纠错。”
意识到这种纠错方法将会在未来得到广泛应用,汉明决心解决这个问题。经过两年多的不断努力,1950年,汉明在Bell System Technical Journal上发表了一篇具有里程碑意义的论文 Error detecting and error correcting codes。在论文中,汉明首次介绍了“汉明距离(Hamming Distance)”这一概念:两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数,也就是将一个字符串变换成另外一个字符串所需要替换的字符个数,并由此创造了一组纠错码,用于检测和纠正数据从发送方移动或存储到接收方时可能发生的错误。这就是汉明一生中最重要的成就——汉明码(Hamming Code)。汉明码不仅解决了电信和计算机科学中的一个重要问题,而且开辟了一个全新的研究领域。
除了汉明码,汉明在贝尔实验室还研究了很多其他问题,如电话系统的设计、行波管、复杂通信系统的稳定性、早期计算机语言L2、数字滤波器等等。在A Discipline of Programming(1967)中,Edsger Dijkstra将有效寻找正则数的问题归功于汉明。这个问题后来被称为“汉明问题”,正则数在计算机科学中经常被称为汉明数,尽管汉明并没有发现它们。
1968年,ACM为了表彰汉明在数值方法、自动编码系统以及错误检测和纠错码方面的工作,为他颁发了图灵奖。汉明是历史上第三位获得图灵奖的计算机科学家(前两位是Alan Perlis和 Maurice Wilkes,同样都是计算机界的先驱人物)。
汉明因其开创性的工作还获得了很多其他奖项。1979年,IEEE授予他Emanuel R.Piore Award。1980年,汉明当选为美国国家工程院院士,并于1981年获得了宾夕法尼亚大学颁发的Harold Pender Award。1986年,IEEE 设立了以汉明名字命名的Richard W. Hamming Medal,表彰那些在信息科学、信息系统和信息技术领域做出突出贡献的人;1988年,汉明获得了IEEE颁发的第一枚理查德·汉明奖章。
理查德·汉明奖章
1994年,汉明成为ACM Fellow。1996 年,汉明因其在纠错码方面所取得的成就获得了Eduard Rheim Award(技术成就奖)。
同事眼中的汉明
在Unix: A History and a Memoir一书中,Brain Kernighan(Unix重要贡献者)回忆了在贝尔实验室,他和汉明一起工作的时光。他们第一次见面的时候,Kernighan还是一位实习生,他的办公室就在汉明的隔壁。在他的叙述中,我们可以得知,汉明是一个相当有主见的人,他从不害怕表达自己的观点,有时甚至有些固执,这让很多人望而却步。不过Kernighan却成为了汉明的好友,多年来从与他的相处收获了很多宝贵的建议,受益匪浅。
1968年夏天,汉明获得了图灵奖(图灵奖现在被认为是和诺贝尔奖相当的计算机科学奖),我当时也在,我还记得他当时的反应:因为那时诺贝尔奖价值10万美元,图灵奖只有2000美元,汉明说他获得了2%的诺贝尔奖(口吻颇有些讽刺)。
汉明是部门主管,可奇怪的是,他的部门只有他一个人。他告诉我他费了很大力气才让管理层同意:既能保有头衔,还不用承担管理工作。我在很久之后也成为了部门主管(手下已经有10几个人),我那时才意识到他当时是多么明智。(在贝尔实验室工作的整个期间,汉明避免了管理职责。他几次被提升到管理职位,但总是想方设法为下属员工安排实验室的其他工作并将他们调出部门。他后来回忆说:“我一直忙于自己想做的事情,无法给到他们足够的关注。我知道,通过逃避管理,我没有履行对组织的责任。这是我最大的失败之一。”)
因为汉明,我才开始写书,后来证明这是一件很棒的事。汉明对于大部分程序员的评价都相当低,他认为这些人根本没有受过良好的训练。我仍然记得他当时描述程序员的训练时说的话:“给他们一本字典,告诉他们如何使用那些语法规则,然后对他们说:孩子,你现在已经是个伟大的程序员了。” 汉明认为教授编程应该像教授写作那样,要有自己的文体风格,这种风格能够区分好代码和烂代码。除此之外,应该教程序员如何写出好代码,并且能欣赏好的代码。
汉明早年就曾经预测,计算将占贝尔实验室工作的一半,但当时没人认同他的观点。后来事实证明, 汉明的估计还是太保守了。
虽然Kernighan对汉明给出了非常正面的评价,但也有不少人对他嗤之以鼻。汉明在贝尔实验室的一些前同事们回忆:“他是一个非常自负的人,常常在想法还不成熟前就仓促行事;对自己的错误引导从来都是后知后觉。”一位贝尔实验室的科学家说:“他在工作上非常难相处,因为他总爱宣扬自己的观点,而不是倾听别人的诉求。”
不过汉明似乎对这些评价心知肚明,他曾说:“要改革体制,就不能指望被所有人喜欢。”
晚年生活
汉明生平最讨厌的就是一些上了年纪的科学家长期占用科研空间和资源,他认为,这些资源在那些像他一样的“少壮派”手中可以得到更好的利用。所以他在很早的时候就决定早点退休,为年轻人让路。除此之外,汉明一直坚信数学家最高产的时候是职业生涯早期,随着时间的流逝,他们的工作效率会急速下降。
但坚信并不意味着汉明乐意接受这样的事实。一天,汉明收到了一幅贝尔实验室的周年纪念海报,海报上列出了贝尔实验室在过去逐年所取得的各项成就。汉明打开海报(未全部展开),得意地看着海报上半部分列出的他参与过的各种科研项目,然后将海报展开挂在了门上,几天后他又瞥了一眼,汉明突然发现,海报下半部分完全与他无关,因为他没有参与任何后续列出的项目。这时汉明意识到他所有有价值的工作都来自他在贝尔实验室工作的前 15 年。一怒之下,他把海报撕碎扔掉了。
1976年,汉明离开了工作长达30年之久的贝尔实验室,这一年,汉明61岁。
汉明在办公室(海军研究生学院)
离开贝尔实验室后,汉明成为海军研究生学院(Naval Postgraduate School ,位于加利福尼亚蒙特雷)计算机科学系的一名教授。也是从这时开始,汉明完全放弃了自己的科研工作,将全部精力放在教学和写书上。
汉明认为当时教授数学的方法是错误的,而改变这种错误的唯一方法就是为学生撰写新的教科书。下面是汉明对于数学教育的两种观点:
观点一:我们现在生活的时代,知识正在以指数级增长。只教授精妙的定理和证明显得越来越徒劳。我们必须放弃那种“通过别人引导才能完成的数学之旅”,转而去教授学生如何创造我们需要的数学。而且我认为,没有任何长期、实用的替代方法。
观点二:目前教授数学的方式非常枯燥。在校园里使用的微积分课本中,我没有发现任何一个我觉得学生会关心的问题答案!课本中的数学能帮你赢得填字游戏(很难确定),但结果在现实生活中却毫无意义。
为了纠正数学教育中的错误,汉明写了一本新的教科书——Methods of Mathematics Applied to Calculus, Probability, and Statistics(1985)。
Methods of Mathematics Applied to Calculus, Probability, and Statistics
虽然离开了贝尔实验室,但汉明依然花大量时间阅读学术类期刊,以了解最新科学动态。
1997 年12月,汉明从海军研究生院退休,并被特聘为名誉教授。1998 年 1月(在他最后一次演讲的几周之后),即退休后的一个月,汉明因心脏病病逝。
在退休前不久,汉明曾说:
一位朋友最近告诉我,“汉明,你放弃教书的那一天,你会崩溃的。”他可能是对的。当年我离开贝尔实验室时,我就知道那是我科研生涯的结束。现在,当我从学校退休,从另一种意义上说,就是真正的结束了。
《你和你的研究》英文全文:
https://www.cs.virginia.edu/~robins/YouAndYourResearch.html
汉明一生中一共出版了9本书,发表了约80篇论文。除了与他的研究相关的出版物外,他还编写教科书,用来鼓励教师采用不同的方法教授数学。
以下为汉明出版过的重要著作(按出版时间排序):
Hamming, Richard W., Calculus and the Computer Revolution, Houghton Mifflin, New York, 1968.
Hamming, Richard W., Introduction to Applied Numerical Analysis, McGraw-Hill, New York, 1971.
Hamming, Richard W., Numerical Methods for Scientists and Engineers, McGraw-Hill, New York, 1973.
Hamming, Richard W., Coding and Information Theory, Prentice-Hall, Englewood Cliffs, NJ., 1980.
Hamming, Richard W., Digital Filters, Prentice-Hall, Englewood Cliffs, NJ., 1983.
Hamming, Richard W., Coding and Information Theory, Prentice-Hall, Englewood Cliffs, NJ., 1986.
Hamming, Richard W., Introduction to Applied Numerical Analysis, Hemisphere Pub. Corp., New York, 1989.
Hamming, Richard W., The Art of Probability-for Scientists and Engineers, Addison-Wesley, Reading, Mass., 1991.
感谢赵军老师推荐本期声影传奇人物——理查德·汉明。
参考文献
[1] https://en.wikipedia.org/wiki/Richard_Hamming
[2]https://history.computer.org/pioneers/hamming.html[3]https://amturing.acm.org/award_winners/hamming_1000652.cfm[4]https://mathshistory.st-andrews.ac.uk/Biographies/Hamming/[5]https://baike.baidu.com/item/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB/475174?fr=aladdin
本文经授权转载自微信公众号“LiveVideoStack”,原标题为《理查德·汉明和他的汉明码》,封面图来自Electronic Design。