IT狼闲评

笑谈IT,IT谈笑, 笑着,写作、创新与创造 Laugh,Writing and Programming...

Google

星期二, 十月 10, 2006

顶级程序员是如何炼成的

高德纳(Donald Knuth),是计算机程序设计艺术教授,斯坦福大学退休教授.且看看他关于自身经历的一些事情,对于你程序的学习会有不少启示:)


高德纳——计算机程序设计艺术教授
(美国数学学人专访翻译稿)







在密尔沃基还是一个高中生的最后一年,他还在怀疑自己是否能从大学毕业,但到了四年后的1960年,高德纳(Don E. Knuth)获得Case技术学院数学学士,作为一项崇高荣誉,一个特殊的(也是学院历史上第一次的)委员会在这同时授予他硕士学位。1963年,他获得加利福尼亚理工学院数学博士。近年来,他将许多享誉很高的大奖收入囊中,1979年,他41岁时,从卡特总统手中接过了美国国家科学奖。
不论从哪一个方面看,高德纳都是一个非凡的人,他是世界公认的计算机科学方面的顶尖学者,他还是一位娴熟的管风琴演奏家,作曲家和小说家。
他是一位高产的作家,他出版了大量的文献。他的处女作是发表在MAD杂志上,他供稿的刊物有Datamation,Recreational Mathematics期刊,美国数学月刊,和其他数十种数学和计算机科学方面的刊物,如Acta Arithmetic和Acta Informatic。 他更因为写作了跨时代的系列《计算机程序设计艺术》而享誉世界,它已经翻译成多种语言,包括俄语和中文等。七卷中的三卷已完成,第四卷也即将出版。写作此书的过程中,他还用四年时间发明了一套计算机辅助排版系统。

画图使我得了头痛症

MP:您是计算机科学家,然而你却是学数学出身,什么时候您的数学兴趣开始显现的?

Knuth:高中一年级时我对数学产生了浓厚的兴趣。事实上,也正是在昏暗的灯光下,向桔橙色的图纸上不停地绘制了几百张图,而弄毁了我的眼睛。由于画图,使我得了头痛,但我仍然觉得那是件令人着迷的事情。图中是象y=sqr(ax+b)-sqr(cx+d)之类的函数,在图上将b,c,d取定值使a变化,看看画出的图形会有怎样的变化。那时我画了成百上千张这式的图像,以期从中找出函数的变化特点。

MP:这一过程中有没有对您影响深远的老师?
Knuth:数学老师中对我影响最大记忆最深刻的是大学的老师。我高中高年级的老师也向我介绍过象二进制数之类的知识,还鼓励我参加其他课余活动。高中时,我参加了威斯特豪斯科学天才发现计划(Westinghouse Science Talent Search),我有两项发明参赛,其中一个是物理学方面的,而另一个是基于π的数系统研究。我曾思考以虚数和无理数为数基的对数表,虽然最后我没有获奖,但数字系统确实给我留下了很多有趣的记忆。我还研究了一番绝对值函数,当我掌握了这些函数时,我开始做另外一组图像。我还找出一套方法,给我一个由相连的直线组成的图形,我就可以写出它的数学函数表达式,那时我真是对数学中的图像着了魔。物理老师是我高中时最喜欢的老师,对于物理或音乐,陷入两难的境地,但进入大学后我还是选择主修物理课程,我曾练习大量的钢琴演奏和管弦乐谱曲,以致我很难判断自己是主修音乐还是物理。我最后的选择从根本上是受奖学金影响,我选的大学在物理方面比音乐要好一些。如果我当时选择了Valparaiso而不是Case,我会主修音乐。

MP:您的家庭成员中还有没有其他的音乐或数学天才?
Knuth:我爸爸曾是教堂管风琴手,而现在成了我。

MP:您觉得音乐天分和数学才天分之间是否所联系(suggested connection)?
Knuth: 肯定有某种联系在里面。象在德国的Oberwolffach数学学院,每周数学家们都来聚会,音乐是主要的消遣。那里有一个非常大的音乐厅,许多人拿着乐器来到这里,几乎所有的数学家聚会的晚上,大厅里被音乐环绕。现在我们系里也是如此,刚才我还和系里的行政助理讨论这一问题,她以前在法学院工作,有一位教授一度用超过20%的时间去听音乐会,他们对音乐不是很感兴趣。在计算机科学系,她觉得有一半以上的成员本身就是音乐家。

MP:在音乐和数学之间,有没有一套可以作为二者真正联系的理论?
Knuth: 没有,我真地不知道为什么。我猜想Eular喜爱音乐,但是我不能说明多少过去的伟大数学家是真正的音乐家。我没研究过这个问题,但这其中一定有某种联系,斯坦福大学就是很好的例子。
我还从我的挪威朋友Dahl教授那里发现了上述特点,他的公文包时常放着钢琴二重奏,不管他走到哪里,都要找人和他一同演奏,也正是他对双人(four-hand)钢琴曲的介绍,使得我过去十多年来收集了不少此类东西。

MP:我想知道从另外角度——即写作——回顾一下您的早期求学历程,您的写作兴趣是什么时候开始第一次显现的?
Knuth: 我小学英语语法特别棒,在七八年级时有一件很有意思的事情,图形化句子,课后我们一大帮孩子聚在一起干。我们可以将英语书上的句子图形化,但我们却不能图形化其他的生活中的句子,尤其是从赞美诗中看到的句子。我们琢磨不透是什么原因,这些句子不适应我们学到的任何规则,我们很努力地研究着,当时来说也是件艰巨的工作。在高中时我发现我们这一级所有的同学在英语课堂上都能轻易过关,并不只有我如此。

MP:我想知道那是不是所公立学校?
Knuth:那是一所路德教会学校。我爸爸是学校的老师,在Milwaukee我高中上的也是路德教会学校。我念的小不写作教育是很好的,现在我也尽量要求自己的孩子们,要求他们每周写一篇文章。如果他们下周想看电视,前一周就要交上他们的习作。我到大学时发现,写作占了我50%的时间,而另一半则是数学。
另一件有意思的事发生在小学8年级,那是Ziegler’s Giant Bar 公司举办的竞赛。竞赛内容是用“Ziegler’s Giant Bar”里面的字母能组成多少单词。它对我很有吸引力,我和父母撒谎说我胃疼,想请假两周不上学了。在这两个周里,我利用一本完整的词典,从中找出了所有能找到的单词,我找出了大约4500个单词,而他们的答案只有2500个。事后我意识到如果用’号我还能找出更多的单词。爸爸妈妈也为我的投入程度而感动,帮我将写好的答案打印出来。奖品是给学校一台电视机,在课堂上我们可以看电视直播节目了(1952年),生动的节目,第一次从旧金山跨越全国传来。班上的每一位同学还得到了Ziegler’s Giant Bar。
在Case学院时,Guenther教授是我的大一微积分老师,是他第一次给我揭开了高等数学的面纱。Paul Guenther 五年前去世了,对我来说,他是一位伟大的老师,因为他是如此难以取悦和讨好(He was so hard to impress)。每当我有一个建议,他往往拒绝;只有当我最终得出更好的结论时,他才勉强地表示赞赏。我不知道自己为什么对他怀有一种特殊的感动。除了他的不易讨好外,他很有幽默感,他对物理知晓的比物理老师要多,对化学通晓得比化学老师要多。也正是这些暗示我:数学从某些方面来看更有优势。
然而,我曾经害怕自己无法对付数学,(I was scared stiff that I wasn’t going to make it in Mathematics.)我高中的指导老师对我说,迄今为止我是做的最好的,他们觉得我不可能在大学继续保持下去。他们说大学是很苛刻的,校长曾说有1/3的人在大学一年不能通过。在高中时,我取得了空前的成绩记录,我们的评分等级不是用ABCD,而是百分制,我的所有科目平均成绩超过97.5。



我一直有一种自卑感情结


MP:那是不是慢慢给您灌输了一些信心?
Knuth:我一度处在自卑中——那也是我工作非常努力的原因。我有些过度追求成功(over-achiever)。
在Case时,我不停地日复一日研读我们的数学课本——Thomas写的Calculus and Analytic Geometry ——并且做完了书中的每一个补充习题。我们只要做完偶数题号相关的部分就够了,但我将每一个习题结合书后的补充都做完,因为我自己缺乏信心,我认为应该全部做完。开始时进展缓慢,为了做题我要熬夜,这么做的唯一原因就是担心课程不能通过。几个月后在其他伙计只做奇数序号习题时,我全部做完都象他们那样快,我因为熟练,而提高了不少解题速度,很幸运一开始我就遇上了比较难的问题,因而不象刚刚步入时那样艰辛,事情已进展得比较顺利。
我开始主修物理课程,但我第二年转入数学,我选了Green教授的一门抽象数学课程,他现在仍在Case教书,班上用他自己编写的教科书,那里面有布尔代数、逻辑方面的公理。有一天我忽然意识到,自己非常喜欢其中的内容。他还给我们一个不知结果的问题,他告诉大家如果谁解出这一问题将自动得到该门课程的成绩A。然而,没有人去做这个题目,很显然做也是白搭,因为他是非常有声望的。当我们开始尽可能下手,但还是无处着手。
那年秋天,我正要去参加演出,但是却误了班车,正无事可干时,我决定来解一下这个不可能解出的题目,以消磨时光。但上帝垂青,我解出了这个题目,星期一我将结果交给他,他说:“很好,Knuth,这门课程你得了A。”我中止了课程的其余部分,而他也信守诺言。以后对这次中断课程还有些内疚,因为不用做作业,仅凭这道题,本年度的课程我就得了优等。
物理方面,在焊接实验室里渡过了一段糟糕时光。不论是物理还是化学实验,我一直表现很差。我的实验总是做不好,要么东西掉到地板上,且总是最后一个完成,有一次化学实验错误出现140%偏差,我为此而写了一个报告,我反对他们计算实验误差的公式,因为我认为误差不能超过100%,但他们并不听我的。
在焊接时情况更糟,我高出工作台太多,并且我的视力不行,在防护眼镜下面无法佩带眼镜,一切都变得很糟,成百上千伏特的电压令我恐惧,我一点也不想做那些事情,然而物理学却又离不开这些实验。
另一方面,选择Green教授抽象数学方面课程却令我如鱼得水,仅仅由于兴趣,我已经发现了几个独立的所谓三元逻辑公理,有些象逻辑布尔代数,想看看是否可从这些公理得出某些推论,但是我其他课程直线下降,因此我不得不中断当前的研究而好好对待这些课程。
我已经做出一个能分析实数表的操作过程(Operation),我最终证明了一条定理:The absitive of the posilute of two cosmoframmics is equal to the posilute of their absitives.
这里我编造一些数字代表其抽象概念,这使我相信我可以证明诸如De Morgan定律之类的定理。
在学生时期的学习全程,我愉快地投入每一本数学书的第一章,思考事物的定义并尝试着做微小的修改,看看从中究竟能发现什么,能再引申出点什么。我非常喜欢那样做,但物理实验差点扼杀了我,这种结合的直接后果是在大学二年级时最终选择了数学。

探索计算机开始于大学一年级,早于女孩
MP:您能说一下你开始用电脑的地点,是不是那时就很清楚地说明您将同它伴随很长时间?
Knuth:在大一和大二之间,得到在Case当统计员的夏季工作,在我办公室隔壁,有一台电脑。
MP:继续画图了?
Knuth:的确。
MP:是不是走火入魔了?
Knuth:是的;一定程度上,METAFONT(我近来开发的计算机印刷系统)可能也折射出我对做图的情有独衷。
CASE的统计系正好座落在一台新电脑的旁边,那是一个有许多闪光灯的有意思的机器。在初夏,有人向我解释了它是怎样工作的。不久我就上钩了,我费了很多个通宵,在电脑控制台前,只有我一个人在那里,大学二年时我开始交女友,但这是在研究电脑之后。
我还保留了我的第一个电脑程序,此程序用于分解质因数,从控制台输入一个十进制数,将会在卡片上得到打孔数据。源程序大约有70条指令,可从70条中冒出100多条错误,也就是说,我(编程时)犯了不少错。但正是这些错误,使我受益匪浅,程序刚开始是无法运行的,我继续改正,直到它能运行为止。我第二个程序是做进制(Base)转换的。
我的第三个程序是Tic-tac-toe,这个程序还能学习如何玩Tic-tac-toe,我对这个程序非常用心,我定下一个学习原则,如果在一场游戏中,电脑获胜,则每一个位置的参数将增加一点,如果电脑一但输掉,则将全部位置标为坏点。这是自适应的存储方法,一场游戏中,每个位置通过0-9的数字来表示该点的优劣;4代表中游水平,因而平局游戏各点参数趋向4。我还写了另一个可以很精彩地玩此游戏的程序,并将这两个程序一同较量。90局结束后,自学习的程序学会了如何战平后一程序。
在另一试验中,300场对战结束后,两个自学习的原本空白记录的程序学会了如何战平对手,他们走棋非常保守,并不令人振奋,但看到“两个生手相互引领学习”“The blind leading the blind”情况出现,是很值得我们回味的事情。
上面就是我学编程的第一个月,一月中发生了许多有意思的事,之后做的有些不同,我给电脑做了一汇编程序。我开始阅读别人的程序,我对编程如此感兴趣的原因,更大程度上是由于我阅读过的代码写得不太好。做为一个大一学生,我可以将程序(I could look at program and say here I am)写得比那些专业人士更好一点,但那时我还不了解其实有许多人可以写出比专业人士更好的程序。那时编程水平是相当低相当糟糕的。基于此,我隐隐觉得自己在这方面有一点天分。也许我的确存在天分,但现在我觉得自己并不象以前想象得那样特别。而后,我读了Stan Poley的汇编程序,我觉得这些程序是优美、雅致的杰作,因而我决定将他的思想进一步发扬光大。
MP:在上述工作中,自卑感已经不存在了。
Knuth:是的。部分的自我急于对另一部分的自我说证明自己是OK!(part of me was anxious to prove, to the other part that I was OK!)
所以,我常常受读一些专家著作的激励,认为自己完全可以做得更好一点。现在每当我在课堂上出错时,我会告诉学生,这样做的目的是想激励他们。

“学生们没有学到怎样写作”
MP:象您做为主修计算机的大学二年级学生类似的经历,现在初中就有。您觉得会对以后产生什么样影响?
Knuth:学生们没有学到怎样写作(The students aren’t learning how to write)。这是非常严峻的。他们甚至不知怎样拼写“mnemonic”,他们过早地专业化了。没有意识到学习的另一面是非常危险的,这一面是写作,这也正是我担心的。人们对生活中的各类事物都要保持开放的态度是很有必要的,如果对某一亚文化群投入过多,势必会限制以后的发展。

MP:是什么让人对电脑产生两极化的意见?一些人完全不能编写程序,而另一些人又全然被电脑同化。(A lot of people just can’t stand programming. There are others who just get consumed by it.)
Knuth: 部分的原因是基于它象一种奇特的思考方式(a strange way of thinking)。还有很多思考方式,它们还没有真正地为心理学家研究透彻。计算机科学教师一再发现,有2%的选课学生是天生的计算机人才,这些人会对编程产生真正的共鸣。它们好象和数学逻辑有着某种相互联系。我说过我喜欢抽象的代数课程,从中我第一次真正地学习了公理和布尔代数。如果看一下数学系的情况,传统的和计算机科学最近的人员是那些从事逻辑和组合数学的。相反地,对于擅长几何直观的数学家则并不倾向于喜欢象计算机科学这样的离散世界。
另一种区别是在有限和无限数学之间,过去我和在Cal Tech的Peter Crawley说过,可计数的无限(a countable infinity)是我们二人的交集,因为我对超过可数无限的没兴趣,而他曾不看少数可数无限。更高级的无限理论包括的推理和直观,是无法应用在电脑上的。
数学因我们各自的独特想法,而有不同的层面,这不是我们能改变的。人们找寻自己最善长的。至于智力,物理学家和数学家是不同的,正象律师和医生一样。每一个领域象都有占优势地位的思考模式,而人们可以找出自己最好的。至于计算机科学能成长为大学的一个科系,我认为,大约是因为它反映了一种思考模式,是一种计算机科学家们考虑问题的独特的思路。据说,五十人中有一人,有此种能力。
(There are different flavors of mathematics, based on what kinds of peculiar minds we have: we aren’t going to change that. People find out what things are best for them. And as for their mentalities, physicists are different from mathematicians, as are lawyers from doctors. Each of these fields seems to have predominant modes of thinking, which people somehow recognize as best for them. Computer science, I am convinced exists today in universities because it corresponds to a mode of thinking, a peculiar mind-set that is the computer scientist’s way of looking at knowledge. One of the fifty people, say, has this peculiarity.)
长久以来,这样的人士分布在各行各业,而没有一个归属的专业。(Historically, such people were scattered in many walks of life; we had no home to call our own).当计算机科学兴起时,更多地是作为现行专业下的一种工具,并没有它自己的一席之地。但是仅仅用一种实用工具来说明计算机科学在各行各业的大量应用是不够的,举个例子,如电子显微镜,它是一种了不起的工具,但是“电子显微科学”却没有引起世界范围的变革;除了说到计算机的用途之外,还有些别的原因造成计算机科学的快速普及。
生活中真实上演的是,对计算机感兴趣的人们意识到,他们独特的思考方式和其他人的是共通的,因此具有共同志趣的人们走到一起,共同研究。计算机科学就这样开始了,在当我们重读一些老作品时,也能看到,事实上他们中的某些人是真正的计算机科学家。在回溯巴比伦时代和整个历史无不如此。

计算机科学 VS 数学

MP:是不是计算机科学家和数学家真地不同?
Knuth: 我觉得你们能识别其中的不同。

MP:但是我怎样才能从大门口站的人认出他是一个计算机科学家?
Knuth: 通过思考过程(thought process),我会尽量准确地回答这一问题。为了处理此问题,我研究了一些数学著作,以期发现优秀数学家的特质,我应用了随机取例的技术:我选择了颇具代表性的9本数学书,取每本书的第100页,然后对此页进行仔细分析,直至彻底了解该页内容。查找其中所体现的数学思想是一件有趣的事情,我不禁问自己:“如果让我写一个程序,来揭示第100页涉及的数学问题,我该在程序中放入一些什么样的指标好呢?”
我发觉数学家与计算机科学家最显著的区别是:数学家优越的几何推理能力和关于无限的推理(reasoning about infinity)。计算机科学家和数学家的共同点主要体现在抽象的运用及公式的把握。计算机科学家具备而数学家不具的最显著的是,对动态变化过程中状态的把握,此过程中变化状态是不连续的。在计算机科学中当表示n+1赋值给n时,老的数值将会被新值取代。
象理解一个执行到一半的程序(half-excuted),它的状态包括当时所有的数值,以及下一步执行的步骤,如果让数学家来表示,他们会在所有变量上加上序数(subscript)。而统数学中没有很好的序数表示,但在计算机科学中是非常重要的。
另一个非常显著的不同是,计算机科学家倾向于将问题用多种方式来处理(diverse case analyses)。越纯粹的数学家,则从本能上越倾向于是用一个单纯的公式来描绘一切事物所有的状态。但计算机科学家则能很好地说服自己,面对事物处理的不同步骤,第一步,第二步,第三步这样一步步做。数学家则倾向于只有一步,一劳永逸地你可以不断使用的一步。

MP:您刚才的回答使我想起了Edsger Dijkstra 提到的一个问题,他认为计算机科学家对数学推理(process of mathematics)有了深入研究——诸如如何把握公式的处理和事物变化(in terms of how formulas are manipulated and how things change)——可以回馈给数学教学。计算机科学家是否真有足够的数学水平用于教学?
Knuth: 因为人们有不同的思考方式(mode of thinking) ,我怀疑是否有某种共同的针对所有类型学生的最好的教学方法;我也怀疑教育规划者对具有不同思考能力(mind-set)的学生所制定的同一的教学计划。因此,我没有信心相信,对于我来说最好的方法是不是放之四海而皆准。但是很显然,Dijkstra的建议是对于天生的计算机科学家最好的教授办法。对我来说,当我真正理解了一个演算法(an algorithmic formulation )是怎样运做的,我才从真正意义上掌握了此类数学方法。
通过我的书的第2卷为例,我认为基本数论的每一个定理包含于其中某处,但它是包含在人们需要的算法教科书中,这些算法也是必须得到解决的计算问题。
我认为这些思想的最初发现是由于演算的需要,因而我用同样方式表述。同数学相比它如同从一个完全不同的角度审美,从数学式的“精简”走向了似乎不是非常“高雅”的方向(from what is mathematically “clean” to what is not elegant in the same way)。但它只是不同的思考方式,我觉得不能说一种方式比另一种更优越。
我和Dijkstra属于天生的计算机科学家,当我们年纪大了时才终于悟出这一点。而这种组织学习的方式并不是适合所有人的,而仅仅局限于象我们这样一类人,演算法方法(algorithmic approach)对我们来说效果很好。
我们拥有计算机科学家的素质本身也是一种挑战,因为我们必须尽最大努力为其他49/50的不同于计算机科学家思考方式的人们服务;计算机影响着每一个人的生活,我们必须找到那些使人们更容易应用电脑的方法,即使我们并没有真正地了解他们的思考方式,比他们理解我们思考方式更多地了解。需要为介于不同思维模式之间的人们做桥梁的,以易于沟通。
显然,没有明显的界限指明你从计算机科学家转变成数学家、物理学家或其他什么家。人们更倾向于象在一个多维空间中,拥有各种各样的才能,某一个范围的人们更多具有计算机科学家素质,另一些人则更象数学家,可能音乐家也类似,谁又知晓呢?这些差别实际上是一种连续的现象。
计算机科学相关部门的昌盛兴旺,是由于许多人聚焦在我们的“思考空间(thought space)”。过去,有一些我们现在称之为计算机科学家的人,那时可能是数学家、物理学家、化学家、医生或商人。现在他们有了一个家,这也是这一领域的联合。为了更好地发展此领域,如果想让更多人应用计算机科学,我们迫切地意识到我们不能只依靠自己,我们需要具有其他思维方式的人们。
也许Dijkstra想表达的意思是我们的思维模式某种程度上更有力,因为它包括了其他的思维方式。我不想简单粗暴地说应该如何如何,但我提出这种可能的原因,是基于我认识的一个人,他曾学习研究生课程,而后成为墨西哥总统Lopez的顾问之一。他告诉我计算机课程的学习,使他受益匪浅,在同不得不打交道的人的交往中,虽然他现在已经不再编程了,但他觉得他学到的方法使得他可以同许多那些想和他交谈但却彼此并不了解的人沟通。
计算机科学的观点好象在对现实模型的建立上更有力,这是比较贴近实际的,因为计算机科学家长于对多情况建立模型。一个现实的问题分解成几部分,并且数学模型的建立或多或少(better or worse)都要依赖建立模型过程中的统一性。处理过较少统一模型的计算机科学家可能更乐于处理更多的常规性问题。另一方面,当开始处理真正的一致性问题时,计算机科学家的深度不及数学家。一致性(Uniformity)可能真正是两领域最显著的不同点。

MP:有人建议将数学做为计算机科学的一部分,而另有一些人正相反,认为计算机科学可做为数学的一部分。您是怎样想的?
Knuth: 我的真实想法是:它们是两种东西,虽然二者有联系。虽然它们有许多重合的部分,但我往往能说出何时我进入数学思考模式,当然,披着数学家的外衣,我也能体会到何时进入到计算机科学家的状态。
我记得以前做过一个数理论方面的演讲,那正是一个跨两学科的问题。我一开始通过数学方式定义,并使用传统的数学工具将问题推至极限,而后我说:“现在让我们转向计算机科学家的解题方式。”而后,我用十五分钟时间讲述了演算法观点(an algorithmic viewpoint),讲完后补充道:“这是一位计算机科学家可能达到的极限,现在再让我们回到数学家的状态一会儿。”我强烈地觉察到这是真的,有时我会做数学家们铁定做的,而另一些时候,我知道自己做的是一个数学家永远也不会做的。
数学家和计算机科学家都不会囿于对自然的研究,仅仅通过一张纸和一支笔,我们就能准确地把握进行中的工作,说明一种理论是正确的,或它是错误的。数学和计算机科学都是处理一些人为事务的。但是思考过程的十分足以区分二种不同观点——两种抽象组织知识的方式有不少共同点,但各有自己的范畴。

MP:除了对数学和计算机科学智能上的对比外,还在其相互影响中开始出现一些社会和教育上的相关问题。计算机领域的壮大,举例来说,使如此多的人达到学士水平,也使得许多人不能继续他们在数学或计算机科学上更高层的研究工作,不能走入高中教授数学。计算机科学和数学都面向同样有限的人群,但现在的势头好象是人们更倾向于计算机科学。
Knuth:但那是由于经济上的诉求,现在计算机科学学士比其他的可得到更多的薪水,这是一个问题,这些人不是天生的计算机科学家,仅仅是由于金钱而不是对这项事业的热爱而涉足这一行的,这一趋势让数学家沾光,因为现在课堂上的学生是有学习动机的,而不是受外部影响而坐在那里的。(because they’ve got motivated students in their classes instead of people who are just there for some external reason.)
我不同意你的观点“计算机科学和数学都面向于同样有限的人群”,我的不同观点可能是由于我用的是比较突出的示例,最优秀的计算机科学家和最优秀的数学家是不同的。根据大数定律,通过1-10的分值衡量标准,很显然达到10分的人很少,达到9分的人也不会很多。因此,假定某人数学参数为8而计算机科学参数为6,这个人某种程度上更乐于进入计算机而不是数学,因为这样做薪水会更好;因为社会上对计算机科学家有迫切需要,这样社会会更趋向于富足。
我认为经济原因会使数学家中失去一大批分值在7分和8分的人士(请原谅我用数字代表人的无情应用);并且我希望基于计算机科学和数学间不同的理解,9分和10分的不会流失。他们的数学才能对各领域的人们都是很重要的,包括计算机科学。

MP:现在有一种越来越强烈的说法,说关于数学教育的滑坡,还包括其他的学科,有人说是由于计算机和计算器的影响。
Knuth:我儿子的高二数学课本令我非常失望,但他的老师非常负责任并做了补充。这本书最过分的地方是卖弄学问,第二个糟糕的地方是它的三位作者好象写了各自完全不相干的章节,完全没考虑其他作者的工作。但这本书有一些闪光点,象重视图形。我对年轻一辈教数学的建议即是画图!很高兴从这本书中看到了比其他的书中更多的图。
一周前我看过一篇文章,其中有人说已经启用旧的教科书,并且越老的教科书从学生的考试效果来看会越好。他回溯到1900年,并且说那是黄金时代。很显然,对于纯数学来说,匈牙利教育系统是最成功的;因为此成就,它是一个值得仔细研究的模式,按人口平均来看,许多优秀的数学家由此诞生。
现在我看自己孩子的数学学习,发现书中的重点在浮华的事情和记忆公式上,而不是在介绍一些办法适用于什么,或是非记忆式通过几个基本定理重构新的公式。
读完这些书后,你不记得什么是多项式的次数,也不知道怎样组织准确答案,我儿子已学过代数,但仍然不很清楚怎样做分数的加法;真正的东西给掩盖了,需要的仅仅成了一次家庭作业。他会将分布规律记在脑子里几周时间,但这些高级名称因没有实际应用,因此,它最终从记忆中消失了。从我个人来讲,我直到大学二年才知晓这些分布规律的名字,这之前我画了很多图,并且用得很好。

MP:您是不是觉得应该在正式课程中尽早介绍计算(computing)问题?
Knuth:我会很高兴见到以演算法的方式出现,但我很犹豫这么说,怕自己没想清楚而误导别人。我仅有的一次关于基本算法方面的工作经历,涉及内容层次比较高,那时我在Cal Tech教抽象代数的入门课程,我们当时正研究矩阵,并且有一个规范化矩阵问题。在这一点上书中讲得很模糊。我们要解决在什么情况下一个矩阵相似于另一个,怎样揭示这一问题呢?现在有了规范结构:如果两矩阵相似,则它们具有同样的规范结构。书中提得很少,仅仅说这里是结构的名称,下面是结构的定义。
因而那时我们提出,怎样才能确定两矩阵相似?矩阵有些简单的操作,象:“将第二行减去第三行的倍数,然后给第三行加上第二行的相同倍数。”操作要保持一致,虽然此操作很简单,但能使得此矩阵同另一矩阵相似。下面让我们看看上述过程的执行情况。我们要使某矩阵的第一行和第一列尽量变成0值,大多数情形,我们可以用这种简单转化达到目的,但有时却做不到。
最重要的一点是我们开始解题了。我们尽量通过一个演算法一步一步地解题,不久我们就会发现这一标准结构。当然,由于特殊情况,我们也可能解不出,在此情况下,我们不可能使那么多的元素都化为0。上面,我觉得,就是这些规范结构得以第一次发现的方法。但稍后,研究人员发现,可以用更高级地抽象地表示它们。例如,人们使用的子空间线性解题方式,这是优雅的方法,但在教学法上并不尽如人意,因为它隐藏了解题的源起。
我认为你需要上述两种观念,尤其当你第一次接触某一课题时,演算法的观点更倾向于直觉的层面,它对教学的早期阶段帮助很大。但是我要补充一点,我教这些课程时间不长,我个人的直觉可能和学生中的大多数联系不紧密。用演算法的方法教学可能非常成功,但它值得好好实验。

MP:我印象中觉得您对自己的学习式tic-tac-toe程序很得意,现在很多计算机用来玩游戏。您好何看待将游戏作为计算机的入门?
Knuth:童年时,孩子们进入了一个创造游戏规则的阶段,他们喜欢相互争论,他们可以长时间讨论这些规则,因为他们喜欢当一个游戏规则的制定者。我觉得这可以和编程相关,可能儿童有一种尝试简化这些规则的趋向。
显然,我不是基础教育专家。我期望看到一种方法,学生在研究问题时不仅仅是学会遵守规则,还要学会如何说明解释这些规则。假如你正在教孩子学加法,我们会通过大量例子来完成,告诉学生如何从右到左相加、进位等等。如果有一种足够简单的计算机语言给这些二三年级的学生,通过这种语言写一个小程序是一种很好的学习方法。老师会说:“这里是加数字加法的方法,下面让我们教教这台笨机子。”对此法,我觉得很值得一试,如果让此程序画出图形,学生们会学得更快,同样的方法,可用于学算术。
我喜欢规则和它的特例,另有一些人更喜欢没有规则。或许对语言把握较好的人,只是快速吸收了一个词典,而根本不用顾及事物的规则。对他们来说,所有一切都是特例,因此我认为演算法方法对他们毫无益处;我们需要用多种方法教学。

MP:我对一个叫Big Track的游戏印象很深,通过TURTLE编写的,此游戏出自Papert实验室,规则非常明确而富于逻辑。
Knuth: 那是很好的关于演算法的教学案例。我觉得,虽然有了计算器,但是算术是我们仍然要继续学习的内容。用手工计算的加减乘除是非常有益的,而且不仅是非常有益:它传达了很重要的思考模式(patterns of thought)。

MP:您是不是衷情于使用计算器?
Knuth:不是的。计算机科学家是最没有可能迷上计算器的人。我的一同事说,计算机系大概是唯一一个在教员大会期间没有任何人携带计算器的系。这可能是由于我们办公室里就拥有超级计算机。我还可通过MIT做计算问题,虽然有三千英里之遥,可通过计算机网络实现。


篮球和计算机
MP:我们是不是谈一些其他的有意思的事?在case,您的老师告诉我一个很有意思的故事。他说您是1960年case蓝球队成功的绝对致胜关键,是不是真的?

Knuth:有些过奖了。那一年我们获得了联盟冠军,我也会很高兴全归功于我。但事实是这样的:我设计出一个连我自己都已不再相信的复杂公式。这一系统可通过一个神奇的数字来评价每一位球员。这一神奇数字用来说明每一球员对比赛的贡献,不仅是他的得分,如果有球员没能进球,我们球队不能拿到这个球,有一个可能的机率,也就是另一方将得球,这样,他将为每一个失球而失去一些分值。相反地,当球员偷球成功,我们球队赢得了先机,这自然可以得到一些分值。
其实,观看一场篮球赛并推断每一次得控球权就得一分情况是十分有意思的。这种判断在最后的时间可能不准,但是在比赛的大部分时间里却逃不出这一规律:你的球队占控球权,便可算一分。换句话说,当得分牌上是90比85,你可以给任何一个拿球的一方加1分,这对于球赛的分数有更好的估计。如果你用这种方式看球,当某一方投篮命中,得分并没有真正改变,因为此方得到两分的同时也失去了球权,别忘了另一方得到了球,就这样这两分有些相互抵消了。如果另一方回到半场并得分,我们又回到了我们讨论过的起点上。但是当有人偷球成功,才真正加分。
根据这个神奇公式,控球价值的分数在大部分比赛中0.6分,所以给投篮得分的分值提升了。我前面说过,我对这个公式现在已不再相信了,但它的确包括了对诸如截断,失球等的统计数字,我们可以套用它然后得出数值,教练非常喜欢这些数字,他说数字同他对球员表现的评价有共同联系;球员从追求最高直接得分,转向尽量争取这样一个评价的高分。教练认为这是件非常棒的评价机制。在《新闻周刊》和《Walter Cronkite周日新闻》上都有报道。他们派出摄影师拍摄了我将数据输入电脑获得统计信息的照片。


MP:是不是有专业队向您抛橄榄枝,请您当顾问?
Knuth:有意使用电脑的Cleveland Browns 队曾讨论过,但我曾没参与。

《计算机程序设计艺术》的起源

MP:您的系列专著开始的最初动机是什么?
Knuth:《计算机程序设计艺术》是我在Cal Tech研究生二年时开始的,我曾为不同的机器作为写编译器的私人顾问,那时有公司会花几十万美金请人写编译器,但我不了解行情,只要价5000美金帮人写了一个。我猜测由此传出话去,说我了解如何写编译器(compiler)。不久后,Addison-Wesley公司顾问,Richard Varga建议我写一本编译器方面的书。1962年1月,他们找到我并建议:请您写一部编译器编写方面的著作如何?正好我酷爱写作,这是个不错的主意;我从内心也觉得写这样一本书也很有意义。
1961年夏,我结婚了,开始思考怎样向太太说明横空冒出的写书计划。那时我们想象不到写这本书会对我们生活产生多大改变。总之那一天,我回到家,构思了全部12章的标题,我觉得这样是比较合适的,不久后,我签了出版编译器书籍的合同。1962年秋天,作为研究生,我得到了在Cal Tech教课的机会,我上课的笔记来可用来做前三章的内容。
1963年,在我获得博士后不久,我开始为“排序(Sorting)”的章节准备资料,我几乎对排序一无所知,我觉得在写此书时研读相关资料,并将排序内容放入书中是很有意义的,尤其是LARC科学编译器的诞生,据说它就是通过一种独特方式对数据排序基础上实现的。我发现排序问题非常有意思,不久后我也能深入研究一些科技文献了。
我感触最深的是发表的文献中有许多错误,计算机科学是一门新兴学科,没有自己的鉴定标准,没有很完善的出版标准,尤其是涉及到演算法性能的数量化方面,不少出版物上的文章压根就错了,你只有三种可能:错误方法得出错误结论,用错误方法得出正确结论,和正确方法得出正确结论。三种可能中每种你有1/3的机率。
计算机科学方面的资料虽然非常多,但并不可靠,因此甚至在1962-1963年间,将正确部分的资料整理出来,显得很必要,这是很容易理解的。
出版物的质量是如此糟糕,以至于使人不愿自找麻烦去读它,人们重复发现同一个想法就是因为人们发现与其从糟粕中将精华取出,还不如直接去发现。就这样,我的最大动机,就是将文献中糟糕表述时的谎言摆平。
我猜想自己有种尽量组织好事物的本能。那时,我认为,能够写这样一本关于计算机科学的总括性文献的人,已经发现了许多属于他们自己的东西。我觉得他们好象会倾向于用自己的观点表现他们自己特有的一面;与此形成鲜明对照的是,那时,我还没有真正发现属于自己的新东西。我仅仅是一个不错的写作者,在我的脑海里这一点是极为突出的:例如,据我了解,自己是唯一一个没有发现用优先方式编译算术运算符的人。有十个人彼此独立地解决了它,但我却被这个问题难住;我没有在其中找到我的方法。因此我认为我的优势在于,除了尽量好地表述学科发展的真实故事,还比那些在彼此孤立状态下工作的人们,有更少的“偏见(biased)”的视角。我用这种半自以为是半难以想象的态度比其他人更好地进行着诠释。因为了缺少偏见,我仅仅是向自己开刀(I didn’t have any axes to grind but my own.)(之后,很显然,我写作的过程中也捡拾了几件属于自己的东西,现在,我也象上面说到的那些人一样,有了偏见)。
你问的是我最初的动机,最初的动机是写一本关于编译器的书,从此我开始构思章节。我曾认真地计划到我儿子出生时把书写完(他现在已经大学二年了,因此我计划在他开始写自己的书时写完!)我现在发现1965年写的信的一些拷贝,“我期待着今年夏天能拜访你们大学,但很遗憾,我不得不先完成这部书的写作计划。”那时仅仅是写一本书。象前面说的,我开始对排序问题感兴趣,排序中竟然有这么多有意思的东西,因此,书的内容迅猛增长。
最终我给Addison-Wesley写了一封信:“将本书的篇幅加长一点行不行?我想把更详尽的资料放入其中。”他们回信说:“不用担心,您想怎样写就可以怎样写。”因此,我开始搜集越来越多的资料。1965年6月,我完成了全部十二章的第一稿(草稿),大约有3000页手稿。
对我来说,这是有点长的一部著作,因为仅有一卷,据我对书的了解,印刷版的书比手写稿要稍少一些。因此可换算为5页手写纸要合到书中的1页内,而后我开始写第一章,将手写稿打印成书稿,寄给Addison-Wesley,让他们看看是否可行。时间已经到了1965年10月,他们好长时间没得到我的消息了,也正想知道事情的进展。我感觉很好,因为我已经完成了第一章。顺便说一下,那时的第一章和最终出版的第一章基本相同。
我立即得到Addison高层回信,他翻出老黄历说他就是1962年和我最初谈出书意向的人员,但现在他已晋升三次。从第一章的长度看,估计要印刷2000页,他们说:“高先生,你说过你要出一本长一些的书,但你不知您的一页半打印稿是书的一页?”我从心底里却不是这种看法:“我读过很多书,这帮家伙不知道他们正在说什么。”因此我找了一本他们出版的书,Thomas 的书Calculus,我坐下来用打字机打了一页,你瞧,他们说得是正确的!而后我明白为什么会用这么长的时间来完成第一章——三年半时间写完第一章不是件很妙的事情。
这使我看清了这项工作的本来面目,它的浩大的程度。如果在开始时我就认识到这点的话,那我就不会那样愚蠢地开始,并且打死我我也不会去开这个头!
当然,到1965年,我被套牢了,因为我仍然能觉察出对此类书的需求,并且意识到这项工作必须有人做。我仍坚信自己是公正不偏不倚的,以那些发明者或发现者发言人的身份出现。我收集了相当多资料,使我意识到写这部书是自己的责任,虽然完成它用的时间要大大超过我的预期。我已经完成了全部的后台工作,将它转交给其他人来完成是非常困难的。
Addison-Wesley考察了12章的内容,刚开始觉得可以足够出两卷,后来改为三卷。象这种庞然大物式的书,出版商们都发生过可怕的故事。因此我猜测他们向顾问征询过,顾问觉得做为单独版本发行,12章中会有7章卖得很好。因此,他们建议将剩余的5章和市场前景好的七章混合起来,希望能卖出7本书,我认为这可能就是出7卷本的计划。我觉得将章节重组,合理地融入七本书中是可行的。
正如第2卷,是我最初的第二章随机数和第六章的组合,后者原先的名字是“Miscellaneous Utility Routines”。忽然有一天我意识到,MUR中,除了一种外都是算术问题,因此我将这章叫做“Arithmetic”,这一小的改动又使得我必须在其中加入一两节内容,当我加入时,一个不可思议的联想出现,这是一本必须写的书,从一个计算机科学家眼中的算术是什么?结果,那一章几乎独立写成,使我将以前曾未在书中放在一起的许多期刊的精彩内容放在了一起,取了标题“Arithmetic”,并将其放入第二卷,在其中增加了不为人知的一贯性。这其中的大部分文献是由不被其他文献熟悉的作者写的,也不清楚其中的联系。
第二卷的写作过程中我进入亢奋状态,不分昼夜地写着。这么做的后果,使我得了严重溃疡,不得不改正我的生活习惯。第二卷写到一半时我认为自己很快就可以完成了,但1967年夏天,却由于健康原因不得不暂时中止。大约写欧几里德算法的一半时中断的,也就是总计第688页中第二卷现在的第333页,因此我还有大量工作要做,但我明白,我的身体却不容许。
我总是低估工作时间,另一方面,如果不这样,我也不会开始写这部书。
在1990年之前,因为写作,我下决心推掉了斯坦福之外所有的演讲活动,所有写作都是利用业余时间,当我出去演讲时,出去一天就等于去掉五天的写作时间,因为回来后我还要处理那些出去时留下的但仍然不得不处理的事情。因而占用了业余时间。

MP:您从事的计算机业正在飞速发展,要想一直领先不太可能吧?是不是发展速度比您的写作速度要慢一些?
Knuth:是的,可能会如此。我想起小说《Tristram Shandy》,虚构的自传小说,作者从他的第一卷穿越时空回到一岁时,但我仍然相信自己能够完成。第四卷,Combinatorial Algorithms已经激增到最大容量。在我完成图形化排版系统后将会回头完成。我认为可能会出AB卷。

MP:那它真是爆炸式增长?
Knuth:事实上,Combinatorial Algorithms 这一名词在1962年计划的那一天还未想到,是之后决定的。那时几乎没有Combinatorial 算法。我喜欢那种形式的程序设计,因而觉得将它作为一章是很好的,在目前的第4卷中,现在的资料中几乎没有那时的。因此,当人们提到“Combinatorial explosion”时,对我有双重含义:三年前,我认为约有70%在计算机期刊上的文章是关于Combinatorial 算法的;第四卷是最艰巨的,因为这种爆炸式增长。
MP:您二十年前开始的这场宏大的“知识梳理”工作,是否有意保持它的版图?
Knuth:有不少新内容,但我不可能长生不老,将它们全都囊括。象操作系统,我没有计划写它们,所以,当我的信箱中收到一本关于操作系统的刊物,我会很高兴(因为不用去看)。

写作的原则

MP: 您怎样将写作原则和自然的创新精神融为一体?
Knuth:当我写书时,我将写作相关的材料放在身边,其他东西都放在一边,研究某一领域时,我能保证自己专心致志地阅读,当我结束这部分工作时,它们就从我的大脑中溜走了,我再将其它的工作移入。这也就是计算机科学中的“批处理方式(Batch)”,同“交换输入输出”和“颠簸(thrashing)”正相对应。
我不是随机阅读资料的,我先阅读标题和大纲,将这些资料归类后再读,引用名言(quotes)也一样,我将名言记下以备用,例如下面的的Beatles的一句:“没有人在我的树上(There is nobody in my tree)。”用来表示分叉式搜索方式真是太棒了。我想自己之所以希望活得更长一点来完成这项工作,可能就是由于我记录了大量的伟大名言。
当我研究某一专题时,我将阅读60篇相关资料。前两篇我会慢慢研读,但后面的58篇我已知道要讲的是什么内容。当我读这前两篇时,原则上是先看问题后看答案,为后面58篇将出现的词汇和思想做准备。
我还有一本小笔记本,每一天我都在其上写下一天的工作小结,它可以帮我更好地安排自己的时间表,也帮我意识到工作的困难程度以提前做好准备。如果连续很多天里持续记录我很累,非常想睡觉,或者记着“Today I goofed off(今天一事无成)”,它可以帮我调整到合理的进度上去。
为了完成这七卷书,每天我都必须有一个写作的开端,我必须使自己兴奋起来,它是一个漫长的,不断前进的过程;每天结束时,我依然未完成(I know that even after the end of the day I won’t have finished)。每天早上醒来后,我便告诫自己:又一天开始了,可书还没写完呢!我依然觉得这本书对很多人是必需的,这也扮演了一个非常重要的角色,但所有这些逻辑上的论据都不能使我乐于开始。另一方面,只要我一开始,便十分投入,欲罢不能。我不得不强迫自己停下来,不要熬通宵。因此,我睡前会阅读各种书籍,如侦探故事,幻想故事,历史书,诸如此类的东西——在睡觉的时间。

MP:您的大部分写作是在家中吗?
Knuth: 是的,它不是我斯坦福工作的一部分,全部是利用我的业余时间。

MP:Do you do it in long hand?您始终通过手写完成的吗?
Knuth: 我无法通过打字机写作,甚至给亲戚朋友写信我也不用打字机。虽然如此,我是个娴熟的打字员,在我高中暑假里我参加过秘书班培训,我能达到每分钟80单词,我还学过机械式速记法和Gregg速记法,但上面的各种方式都不能用于写作。

MP: Why would a prospective physics major take those courses in high school?一个学物理的学生为什么在高中时做这些训练呢?
Knuth:有一年暑假我做做秘书工作,我认为这些训练有助于我在大学时做笔记,我学的所有东西只有“Dear Sir”和“Yours very truely”之类的缩写,那些对我的化学课一点帮助都没有,我坐在教室的后面,通过速记机创造我新的缩写,后来,我都不能辨别出我记的东西,因而,我放弃了。

Surreal Numbers奇幻的数字
MP:您怎样想起写“Surreal Numbers”?
Knuth:我在挪威的Oslo写的,花了一周时间。它虽然卖得不算好,但我觉得很欣慰,它还是翻译成多种语言,写Surreal Numbers 可能是我一生只有一次的经历。我倍受鼓舞,象有一种天助的灵性告诉我如何去写。写书时一气呵成,我觉得自己不可能再重复此类过程了。那一周是我这一生中最激动的时刻。
那是1972年12月,我正在写《计算机程序设计艺术》过程中,半夜里,突然冒出写“Surreal Numbers”的想法。我叫醒太太:“Jill,你觉得我的七卷系列著作——也就是我们刚结婚6个月时开始写的书——对我们的生活有些什么影响呢?现在我想写另一本书,不过我觉得这本新书不会用很长时间。”我说,如果我集中精力,我认为有一周时间就能完成。令我非常高兴的是,她也很愉快,她说:“这正是写这本书的最好时光。”我们的计划是在奥斯陆城里找一家旅馆,在那里Ibsen曾写过剧本,这样从他的艺术中获得些许灵感。然后我就在里面写书,而我太太会来约会两次(我们老是有在旅店里做点风流韵事的想法)。
在写“Surreal Numbers” 前三周,我们一同散步、滑冰,在我的脑海中构思书的前几页,但却不愿想更多,因为我希望后面的内容想到即写下。我希望它会成为数学发现的忠实记录,因为我不想做数学的任何预言。我仅仅模糊记得John Conway一年前在午餐上谈论的。
我入住旅馆并开始写作,幸运的是,我没有出现电影中经常出现的一幕,一个伙计写出了题目,凝神苦思,然后将此页撕掉。我没有步入上述状态,因为关于书的第一页和第二页的大部分都早已在我脑海考虑好了。这个周的每一天都是一样的情形,早上起来吃一餐惬意的早饭,Saint Olaf学院的学生也在这家旅馆里,我听着他们谈话,分析着他们的措词,而后回到房间写上三四个小时,可能遇到暂时无法处理的问题,因此,我就在Oslo散大约二小时步。有时我会去图书馆,但大部分情形是到大街上看热闹。而后问题的解决方案浮出脑海。我回到旅馆,再工作两小时,将困难克服掉,也许会神奇地将工作推进一步。又到了该好好吃一顿的时候了,吃完后看上一小时挪威台的电视节目,然后回到房间再写,关灯时间就到了。写书下笔如有神助,文思泉涌,水到渠成。事情进展得太顺利了。很显然,我不是很客观,但当我关掉灯后,下一页会映入我的脑海,我不得不迅速起来并记下它来。思绪来得快到我只能记下每一个单词的第一个字母。而后我才象死狗一样关灯大睡。第二天早上,我再从第一个字母破译出单词组成句子。每天同样的模式重复着。
这本书完工的时候是我一生中最高兴的日子。奥斯陆是如此美丽,所有的树上都挂满了白霜,超过1英寸厚。我和妻子看了场电影后在皇家公园里散步,公园里银装素裹的树木蔚为壮观。午夜的天空呈现出深蓝的颜色,我花了一个小时在公园里仰天惊叹与蓝天陪衬下的树姿,而后回到旅馆。那是我能回忆起的美好时光之一。我意识到只要一两页我就可以写完这本书了。接下来,我除了几个不重要的数学细节外,结束了最后一章,放松地进入梦乡。
Surreal Numbers的写作已经用了六天,第七天可以休息。事实上,第七天只要整理一下最后一页就行了,赶快做好,终于可以写“结尾”了。
这之后我一个字也不想写了,但还要给我斯坦福的秘书Phyllis写一封信,告诉她如何把这本书打印出来。然面,将句子写到一半的时候,我却不知用哪个动词好了。突然间,我几乎连很简单的词句都难以写到纸上。我刚刚渡过的一周,所有写的东西象从哪里流淌出的一样,突然间它枯竭了。这也是我珍爱这本书的原因,它是我不吐不快的一部分,我希望每一个人都能有类似的机会——灵感之手垂青于你。

MP:在Surreal Numbers结束时,有一封给教师的信,其中您提议使用该书做为课程的学生,应该做一个计划并将其写出。在您的最后一段,您指出在教学中有两个大问题:缺少写作训练;缺乏创新思考。您觉得几年后的今天,是不是还是和以前一样?
Knuth:是的,绝对是。我尽量在计算机科学系的研究生中实验,我们还尽力将竞争减到最低,我们鼓励合作解题鼓励相互交流。在小学五年级前,还一直鼓励创新,至少我孩子的教育如此。有许多创新项目需要他们去做;但五年级之后,学校象是说:“我们已没有再做那些事情的时间了,也没有时间自己发明自己的东西了。我们现在只要吸收已有的知识就足够了。”那是不对的。我们应该将教的重点放在怎样发明创造上。现在我一直要求自己的学生在读技术资料时也这么做;也就是说,只有好好思考过下一页上可能有些什么东西后,再翻到这一页,因为这样做后你就可以更快阅读该页。在你看解决一个问题的答案前,先自己思考一番。怎样才能解开它?为什么你要解它?在你看到最终结果前,所有上述问题先向自己提问一遍。十之八九你自己是解决不了的,但你会对看到的答案有更好的了解,并且你要对数学发展做尽可能深的研究。
我觉得这就是我在大学时对教科书第一章投入很多时间的原因,我非常喜欢问“为什么”,为什么它是那样的?从最开始的时候,人们怎样考虑的?每一个人应该继续问此类问题。这将提高你的吸收能力。当你弄懂了数学的某一小部分是怎样构成的时,你就可以重新组织此部分的内容了。在几何学中我们教学生探本索源,但大部分时间练习题测试的是他们弄懂了定理没有,而不是证明它。将数学学好,你应该学方法,而不是结果,并且还要研究这些方法是怎样发明的。

人工智能

MP:我们今天正好处在一下新兴的人工智能领域,您是否注意到它?
Knuth:我喜欢阅读这方面的内容,在第4卷中很多算法就是通过人工智能方式来解有趣的问题。他们一对一地对应于电子工程师解决问题的方法,另一方面我也喜欢将内容而在两个领域内的资料放到一起(They turn out to be in one-to-one correspondence with things that electrical engineers use for other purposes, and again I enjoy bringing together two literatures that are talking about the same thing.)。例如,最短路径问题,就以许多不同的形式出现,在人工智能中,我们证明理论和解决问题的演算法,只是用不同的语言来表达象在电子学中遇到的电路分布同样的问题。
我虽然不是AI专家,但我可以从Pamda McCorduch(思考的机器)书中的说法,她指出:“电脑能思考吗?”然而到目前为止,同思考相联系的东西,电脑全做了;而人能做电脑却不能做的是人根本不用思考的那方面东西。事实正是如此,我们不用思考就做出的正是电脑绝不会做或几乎不会做的,象散步。要控制一台机器人象蚂蚁一样走,或编一个程序能识别长出胡须的脸,是非常难的。儿童能说几种语言;但电脑却不能很好地翻译东西。我们下意识干的事,正是人工智能还不能做的,这是这一领域最值得关注的。最大的秘密是我们不通过思考做的事是如何运做的。蚂蚁在没有人指导的情况下是怎样解开这样复杂的难题的?它们体积很小的大脑是怎样做出决策,彼此交流共渡难关的?这些都还不被我们所知,我虽然对这些很着迷,但不会去写一本此类的书。
MP:那你是非常乐观的了?
Knuth:我觉得在AI方面,更深入研究这些事情是如何做的比通过电脑系统直接做更重要。尽量实现自动操作是一项伟大的科学成就。当你完成了某项自动化,最重要的是你在这一过程中所学到的,而不是现在电脑确实能干一项复杂的工作了。
当您向电脑解释一个问题时,你必须自己理解它,比你向人解释时还要深入。有句古语:“教会别人才是真正的学会You don’t learn something until you have taught it to someone else.”古语引伸成现代语如下:“教会电脑才是真正的学会You don’t really know something until you have taught it to a computer.”这就是学习的奥秘。计算机是对理解的很好测试,你不能对电脑打马虎眼:“现在用常识来做好了。”你必需理解得更清楚了,这里没有模糊随便的空间——There’s no room for wishy-washiness。这也是我认为电脑冲击了教育的原因,如果学生能教会电脑,那么你就明白他已经将此问题牢牢地掌握在自己脑海中。

MP:你花多长时间研究开发TEX和METAFONT?
Knuth:1977年春天开始,花了四五年时间做完,我觉得用一年时间就能完成。

MP:您觉得付出那些时间值吗?
Knuth:不错,我觉得我研究的内容是真正令人兴奋的,并且在印刷方面起到了很好的推动作用。对于一个数学家来说,从一个领域涉足另一个领域,这可以改变一个领域或改变他的工作方向,他和其他他人有不同的背景,因而会有不同的洞察力。例如,我听说Larry Shepp的女儿得了脑瘤,他因此发明了一种能定位脑瘤的设备,这是一项重要的突破。由于这样那样原因,你将会经常看到类似情况出现:数学家步入其他领域,他会用他的知识观念应该在该领域,这将会使此领域的人们受益匪浅。
以我自己的情况,我认为打字排版是很重要的,我也很感兴趣,这也是我用了四五年时间而不是一年来开发的原因。如果这些想法在应用中不是很成熟,我会保持沉默而不去张扬,自己用用就足够了。但是现在数学和计算机科学的许多概念对排版来说非常重要,因此,我想精益求精。同时,希望在第4卷变得更大前,赶快回去第4卷的写作中。

阅读体会:
1、图形化和做图是一种很好的学习方法;
2、做笔记;
3、全神贯注地做件事,象电脑的批处理方式;
4、独到的读书方法,做事也要总结方法;
5、写作是生命的一半;
6、有一个好老婆,生活会精彩不少。
7、可控制的思想是可怕的,也是最有力的。

0 Comments:

发表评论

<< Home

GSnewsBar Sample
Loading...