21世纪七大数学难题
来源:青少年宫在线 发布时间:2006-06-29
“千僖难题”之一:P(多项式算法)问题对NP(非多项式算法)问题
在一个周六的晚上,你参加了一个盛大的晚会。由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个例子。与此类似的是,如果某人告诉你,数13,717,421可以写成两个较小的数的乘积,你可能不知道是否应该相信他,但是如果他告诉你它可以因子分解为3607乘上3803,那么你就可以用一个袖珍计算器容易验证这是对的。不管我们编写程序是否灵巧,判定一个答案是可以很快利用内部知识来验证,还是没有这样的提示而需要花费大量时间来求解,被看作逻辑和计算机科学中最突出的问题之一。它是斯蒂文?考克(StephenCook)于1971年陈述的。
“千僖难题”之二: 霍奇(Hodge)猜想
二十世纪的数学家们发现了研究复杂对象的形状的强有力的办法。基本想法是问在怎样的程度上,我们可以把给定对象的形状通过把维数不断增加的简单几何营造块粘合在一起来形成。这种技巧是变得如此有用,使得它可以用许多不同的方式来推广;最终导至一些强有力的工具,使数学家在对他们研究中所遇到的形形色色的对象进行分类时取得巨大的进展。不幸的是,在这一推广中,程序的几何出发点变得模糊起来。在某种意义下,必须加上某些没有任何几何解释的部件。霍奇猜想断言,对于所谓射影代数簇这种特别完美的空间类型来说,称作霍奇闭链的部件实际上是称作代数闭链的几何部件的(有理线性)组合。
“千僖难题”之三: 庞加莱(Poincare)猜想
如果我们伸缩围绕一个苹果表面的橡皮带,那么我们可以既不扯断它,也不让它离开表面,使它慢慢移动收缩为一个点。另一方面,如果我们想象同样的橡皮带以适当的方向被伸缩在一个轮胎面上,那么不扯断橡皮带或者轮胎面,是没有办法把它收缩到一点的。我们说,苹果表面是“单连通的”,而轮胎面不是。大约在一百年以前,庞加莱已经知道,二维球面本质上可由单连通性来刻画,他提出三维球面(四维空间中与原点有单位距离的点的全体)的对应问题。这个问题立即变得无比困难,从那时起,数学家们就在为此奋斗。
“千僖难题”之四: 黎曼(Riemann)假设
有些数具有不能表示为两个更小的数的乘积的特殊性质,例如,2,3,5,7,等等。这样的数称为素数;它们在纯数学及其应用中都起着重要作用。在所有自然数中,这种素数的分布并不遵循任何有规则的模式;然而,德国数学家黎曼(1826~1866)观察到,素数的频率紧密相关于一个精心构造的所谓黎曼蔡塔函数z(s$的性态。著名的黎曼假设断言,方程z(s)=0的所有有意义的解都在一条直线上。这点已经对于开始的1,500,000,000个解验证过。证明它对于每一个有意义的解都成立将为围绕素数分布的许多奥秘带来光明。
“千僖难题”之五: 杨-米尔斯(Yang-Mills)存在性和质量缺口
量子物理的定律是以经典力学的牛顿定律对宏观世界的方式对基本粒子世界成立的。大约半个世纪以前,杨振宁和米尔斯发现,量子物理揭示了在基本粒子物理与几何对象的数学之间的令人注目的关系。基于杨-米尔斯方程的预言已经在如下的全世界范围内的实验室中所履行的高能实验中得到证实:布罗克哈文、斯坦福、欧洲粒子物理研究所和筑波。尽管如此,他们的既描述重粒子、又在数学上严格的方程没有已知的解。特别是,被大多数物理学家所确认、并且在他们的对于“夸克”的不可见性的解释中应用的“质量缺口”假设,从来没有得到一个数学上令人满意的证实。在这一问题上的进展需要在物理上和数学上两方面引进根本上的新观念。
“千僖难题”之六: 纳维叶-斯托克斯(Navier-Stokes)方程的存在性与光滑性
起伏的波浪跟随着我们的正在湖中蜿蜒穿梭的小船,湍急的气流跟随着我们的现代喷气式飞机的飞行。数学家和物理学家深信,无论是微风还是湍流,都可以通过理解纳维叶-斯托克斯方程的解,来对它们进行解释和预言。虽然这些方程是19世纪写下的,我们对它们的理解仍然极少。挑战在于对数学理论作出实质性的进展,使我们能解开隐藏在纳维叶-斯托克斯方程中的奥秘。
“千僖难题”之七: 贝赫(Birch)和斯维讷通-戴尔(Swinnerton-Dyer)猜想
数学家总是被诸如x^2+y^2=z^2那样的代数方程的所有整数解的刻画问题着迷。欧几里德曾经对这一方程给出完全的解答,但是对于更为复杂的方程,这就变得极为困难。事实上,正如马蒂雅谢维奇(Yu.V.Matiyasevich)指出,希尔伯特第十问题是不可解的,即,不存在一般的方法来确定这样的方法是否有一个整数解。当解是一个阿贝尔簇的点时,贝赫和斯维讷通-戴尔猜想认为,有理点的群的大小与一个有关的蔡塔函数z(s)在点s=1附近的性态。特别是,这个有趣的猜想认为,如果z(1)等于0,那么存在无限多个有理点(解),相反,如果z(1)不等于0,那么只存在有限多个这样的点
阅读全文(1905) | 评论:6 | 复制链接
[置顶] 关于国产科学软件的思考 (2007-3-25 9:22:00)关于国产科学软件的思考
发表时间:2006年10月23日 17时53分
[%repeat_0 match="/data/option"%] [%=@title%] [%=@count%]票 [[%=@percent%]%]
[%_repeat_0%]
这一段一直在问自己这个问题:“在我们常用的科学计算软件当中,有多少国产的?”,在记忆里面搜索了很久,似乎真正能够数得上“常用”或者“听过名字”的,一个是叫作FEPG的有限元源码生成器,这几年不时在一些论坛上见过他们的广告;另外一个是CTEX套装软件,作科学排版的,听说是中科院的人参与了一些工作。此外,实在想不起来还有什么。当然不排除学校课题组自产自用的软件,但断言我们没有发展出象matlab/mathematica/maple/lapack等这样一批影响科技发展的科学工具也是不失偏颇的。
科学计算软件的匮乏反应了中国软件开发能力和科技应用水平的不足。国内对科学计算软件的需求是很大的,但令人担忧的是,几乎整个市场都被国外的软件占据了。有限元的论坛上,言必称的是ANSYS, Fluent, Abaqus...,电路模拟的论坛上,熙熙攘攘的是HFSS, ADS, microwave office,...,,计算化学的讨论中,<edit>Gaussian</edit>, NWChem, ADF占据了大面积的篇幅,而我参与了很久的数学工具的讨论中,几乎也充满了matlab, mathematica, tecplot和IDL的大名。我们很少有机会看到大家热烈地讨论一个自创的软件,或者计划编写、合写这样的软件。造成这种情况的原因很多,最重要的有下面几条:
1. 盗版软件太容易获得。国外很多科学软件,包括一些开源的、免费的软件都是被商用软件“逼”出来的,由于企业、科研单位需要某种科学计算功能,而商用软件的licensing费用太高,导致企业或者科研院所自行编写适合自己的软件,并且软件或者以商业化,或者以免费的形式发布出来满足社会上类似的需求。而在中国,几元一张的盗版光盘上,几千、几万美元的科学软件一应具有,再加上科研、商业的诚信制度还没有完全建立,盗版软件成为很多人的首选,大家非但不以使用“盗版”软件为耻,反而堂而皇之使用他们来发表文章,开发产品(当然,惭愧的是,几年前的我也处于这种思想境界)。甚至,有人声称这是“拿来主义”。殊不只,这只是大家为了不正当地使用别人的劳动编出来的冠冕堂皇的借口。除了“拿来主义”,鲁迅先生还有另外一句名言也被盗版趋之若鹜者引为经典,就是“窃书不算偷”,认为由于“学问”这个词汇本身的纯洁性就可以抹煞”偷“这样一种行为的可鄙性。甚至很多人声称,中国使用了全世界最好的软件。但具有讽刺意义的是,我们用了最好的软件,我们作出的东西是不是最好的。这说明了什么呢?使用盗版软件就像公费医疗时,可以免费地拿到抗生素来吃。一旦公费医疗没有了,而长期吃抗生素导致身体抵抗能力严重下降,稍微患上一点感冒就会要命,
2. 写软件能力强的人,科学计算背景不足;科学背景能力强的人,计算机应用能力不足。高校当中,计算机好的,一般都去到企业编写界面、数据库、网络开发,然后顺理成章地到IT去发展、赚钱,他们并不关心偏微分方程怎么解,高斯积分在奇异点处怎么算,如何求解稀疏带状矩阵等等这类科学问题。而专业学得好的人当中,计算机基础好的,能够编写高质量代码和程序的人,少之又少,大多数人还停留在询问matlab中如何设置计算精度(实际上只是显示精度)、安装matlab后启动总是有一个matlabserver.exe运行这样一类低级问题的阶段。他们哪怕有自己的一套理论或者算法,也很少有人会想过如何把代码模块化,怎样发布,使用什么样的license,如何管理代码的版本这样一些软件开发的问题。在国外,很多科学、工程课程的作业都是需要用计算机来完成的,写代码,写报告,作讲演,经过几年的训练下来,毕业的学生对操作系统的基本操作、科技软件的简单使用都具备了基本概念,也至少掌握了一两门计算机语言,这样,在今后的科研道路上,就会使用这些计算机工具来开发新的计算功能。而我们国内这个方面的训练还是远远不够。
3. 科研创新精神不够,没有ambition。Stanford的几个学生就可以把google从一个idea做成一个举世瞩目的全球公司,而一个VT的硕士生能搞出一个数一数二的数学知识库PlanetMath,matlab是Cleve Moler在U. New Mexico教学时设计的,mathematica是Wolfram在研究复杂系统中逐渐开发出来的,Lapack的作者Anderson, Bai等人也是在U. of Tennessee在linpack/eispack的基础上开发出来的,这样的例子举不胜举。但为什么我们的高校中这样的例子却不多呢?
现状是不容我们乐观的,我们需要作一些事情,或者我们呼吁科技主管部门来作一点事情来改变它,我们需要有数学和计算机背景的人来参与开发科学软件,提高科技力量中计算机工具的使用能力从而提高科研效率,我们要鼓励一切形式的科学软件开发工作(在满足软件版权和使用许可的前提下),包括商用的、免费的、开源的,并号召学术论坛、学术网站等交流渠道为这样一种(协同式)开发提供便利。大家群策群力,讨论一下我们最需要哪些科学计算功能,按照算法和程序难度制定一些开发计划,大家既可以当成课外爱好,或者当成适当规模的project参与到这种开发当中,学生社团、科研单位也可以通过经费申请为这样的project提供经济支持。
从初期的发展来看,提倡开源或者免费的软件是有意的,因为一则在开发初期,软件水平毕竟还是无法跟国外发展很多年的大型的商用软件比较,而一些写得好的开放的软件代码可以为今后其他软件的开发提供基础和模块,孕育出一大批好的软件来。但我们需要注意从现在开始培养版权意识,要选择合适的使用许可的形式,使得科学软件能够在法律的保护下健康发展。
当然,上面只是一个倡议,我自己的数学水平和计算机编程水平都很一般,没有经过正规的编程训练。但我还是希望上面的这些的想法能够给大家一些启示,特别是国内的在校大学生和研究生,大家能动手写一些东西,或者联合起来完成一、两个好的科学软件开发工程。我这一段比较忙,但一直有一个想法,就是写一个类matlab或类matcom的C++库,这个库将在CLAPACK的基础上添加一个wrapper,提供matlab/matcom中常用的计算函数和矩阵操作,这样利用LAPACK提供的强大的数学计算功能,和wrapper提供的易用的接口,为今后开发其他计算软件作一个基础。除了这个计划,我手头上还有几个其他程序,包括网格生成、排版、绘图等,虽然都是小程序,但我想今后用适当的方式发布出来,大家一则可以免费的使用,或者以合适的方式参与到软件的扩展和改进中来。
希望今后在科学软件中看到越来越多的让我们自豪的Made in China的标记,到那时,我们才具备了科技强国的实力。
阅读全文(3104) | 评论:7 | 复制链接
[置顶] 浅谈程序员的数学修养 (2007-3-20 19:19:00)
可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。
四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,Bill Gates的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福·赖特曾这样谈起过他的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一。”。影响一代中国程序人的金山软件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。
程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。
一名有过10多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会十八般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”
程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员如何提高与培养自己的数学修养的基本看法。
首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。
其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础上产生的,最简单的0、1进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。
第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。
第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样不利于程序员自身的快速成长,也不利于程序员解决新问题。我在长期的程序员培训与计算机教学工作采用了一些与传统方式不一致的方法,收到了一定的效果。很多初学程序的人往往写程序时有时候会有思维中断,或者对一些稍难的程序觉得无法下手,我采用了一些课前解决数学小问题的方法来激励大家的学习兴趣,这些小问题不单单是脑筋急转弯,其中不少是很有代表意义的数学思考题。通过数学问题来做编程的热身运动,让学员在数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做数学题目会使自己变聪明,很长时间不去接触数学问题会使自己思维迟钝。通过一些经典的数学问题来培养学员的思维的严谨性和跳跃性。很多人可能不以为然,其实有些看似简单的问题并不一定能够快速给出答案,大脑也是在不断的运用中变更加灵活的。不信吗?大家有兴趣可以做做下面这道题目,看看能不能在1分钟之内想到答案,这只是一道小学数学课后习题。很多人认为自己的数学基础很好,但是据说这道题目90%以上的人不能在一个小时内给出正确答案。试试,如果你觉得我说的是错的。
证明:AB+AC>DB+DC(D为三角形ABC的一个内点)。
最后,多学多问,多看好书,看经典。我在这里向大家推荐两部可能大家已经很熟悉的经典的计算机算法教材,它们中间很多内容其实就是数学知识的介绍。第一部是《算法导论》,英文名称:Introduction to Algorithms,作者:Thomas H. Cormen ,Charles E. Leiserson ,Ronald L. Rivest ,Clifford Stein。本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest 由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。这本书目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用它。本书基本包含了所有的经典算法,程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言进行程序开发的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。另一部是很多人都应该知道的Donald.E.Knuth所著《计算机程序设计艺术》,英文名称:The Art of Computer Programming。 Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵奖的获得者,是本领域内当之无愧的泰斗。有戏言称搞计算机程序设计的不认识Knuth就等于搞物理的不知道爱因斯坦,搞数学的不知道欧拉,搞化学的不知道道尔顿。被简称为TAOCP的这本巨著内容博大精深,几乎涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算法则,半数值算法,以及排序和搜索(在写本文之际,第四卷已经出来了,我也在第一时间抢购了一本)。本书结合大量数学知识,分析不同应用领域中的各种算法,研究算法的复杂性,即算法的时间、空间效率,探讨各种适用算法等,其理论和实践价值得到了全世界计算机工作者的公认。书中引入的许多术语、得到的许多结论都变成了计算机领域的标准术语和被广泛引用的结果。另外,作者对有关领域的科学发展史也有深入研究,因此本书介绍众多研究成果的同时,也对其历史渊源和发展过程做了很好的介绍,这种特色在全球科学著作中是不多见的。至于本书的价值我觉得Bill Gates先生的话足以说明问题:“如果你认为你是一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版。我个人就是阅读的该书的英文版,虽然花了不少money和时间,但是收获颇丰,值得。
总之,要想成为一名有潜力有发展前途的程序员,或者想成为程序员中的佼佼者,你一定要培养良好的数学修养。切记:对于一名能够灵活自如编写各种程序的人,数学是程序的灵魂。