【转自51CTO】Google首席Java架构师谈数学与程序员的关系(1)

51CTO编者按:数学是一切哲学、科学的基础。数学与程序员是永远都分不开的话题,我们曾介绍过《Perl数学函数用法大全》和《并行计算的难点与数学原理解析》,本文是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈,谈到API对设计流程的影响和Google的Java观,以及数学、散文与程序员的关系。

数学与程序员的关系

Seibel:你认识有什么伟大的程序员不会数学或者没有接受过良好的数学教育的吗?要成为一个程序员,学习微积分、离散数学和其他的数学知识真的那么重要?还是做程序员只需要一种思想方式,即使没有受过这些数字训练,也能拥有?

Bloch:我觉得是思想方式,学不学数学都能拥有这种思想。但是学一下确实有好处。我曾有个同事叫madbot,Mike McCloskey。他很懂数学,但是没有学过数论。他重写了BigInteger的实现。原来的实现是C语言函数包的封装,他发誓用Java重写,要达到基于C语言版本的速度。后来他做到了。为此他学了大量的数论知识。如果他的数学不行,他肯定搞不定这个项目,而如果他本来就精通数论,就无需费力去学习了。

Seibel:但是,这本来就是个数学问题啊。

Bloch:对,这个例子不恰当。但是,我相信即使是跟数学无关的问题,学习数学培养出的思维方式对编程来说也是必不可少的。例如,归纳证明法和递归编程的关系非常紧密,你不理解其中一个,就不可能真正理解另外一个。你可能不知道术语基本情况和归纳假设,但是如果你不能理解这些概念,你就没有办法写出正确的递归程序。所以,即使是在与数学无关的领域内,不理解这些数学概念的程序员也会遇到很多困难。

……

(这是无敌的省略号,这只是转载,欲知后事如何,请点http://developer.51cto.com/art/201012/238798.htm
[该贴被SpeedVan于2011-02-13 16:16修改过]
[该贴被SpeedVan于2011-02-13 16:17修改过]

作为一个程序员,求知欲才是第一动力。学不学数学不重要,重要的如果你想有所发展不管先学还是后学,结果是必然要学。

google已经是昨日英雄,如果说google更注重数学算法等严谨思维的话,那么Facebook则相反,他们更注重人的关系,人性,这些都是数学所无法比拟。这段话不是我原创的,在一篇英文中看到的。

所以,引用名人名言是最容易极端的。

facebook就是一网络大社区,妄图建造一个网上社会。
闲着没事玩玩还行,不会产生真的科学生产力。

那没事玩玩的东西太多了,各种文艺,各种戏曲。一定要产生什么狗屁的生产力才有价值?搞笑

2011年02月14日 09:54 "banq"的内容
所以,引用名人名言是最容易极端的。 ...

的确,名人也是一家之言,但有些人的一言一行是影响着计算机网络的发展方向的,当然他们也会存在对立面,然后名人之间的口水战就开始了,然后像我这样的小辈,就只能坐好屁股了,呵呵。

我觉得学软件专业,不学微积分都可以。。。。

数学也分好的数学和坏的数学,好的数学可以带来美感和哲学上的思考。
即便如抽象的泛函、黎曼几何、罗氏几何、矩阵、群论等等,里头也存在诸多直观和形象,绝不是仅仅纯粹的逻辑推演或代数计算,只是教科书没有而已,且不少大学数学老师不教或者自己也没有去想过这些问题。华罗庚推崇“数行结合”,我相信那些伟大的数学家无一不是同时擅长“形象思维”与“抽象思维”的人,也就是擅长左右脑同时开工。

无论从事何种行业,何种工作,改造和完善我们的思维方式,都是头等大事。

2011年02月14日 21:58 "jdon007"的内容
华罗庚推崇“数行结合”,我相信那些伟大的数学家无一不是同时擅长“形象思维”与“抽象思维”的人,也就是擅长左右脑同时开工。 ...

相当认同,失去了具体与抽象,脑袋如同混沌一样。“道”抽象到极限,“科学”具体到极限,呵呵。不过可惜中国教育教的不是思维,所以为什么还有人认为“学=无学”~
[该贴被SpeedVan于2011-02-15 03:19修改过]

2011年02月15日 03:10 "SpeedVan"的内容
华罗庚推崇“数行结合”,我相信那些伟大的数学家无一不是同时擅长“形象思维”与“抽象思维”的人,也就是擅长左右脑同时开工 ...

我喜欢这句,前不久写过一篇博文
借形解数


2011年02月14日 21:58 "jdon007"的内容
华罗庚推崇“数行结合” ...

我提出一个比较标新立异的观点,供大家参考,不一定都同意,其背景出发点来自我新浪微博反复提出的“人性和科学要并行而进”。

从更宏观角度来看:中国培养出如此多理工科生,成为制造大国,得益于这些老一辈数学家的努力。

但是成也萧何 败也萧何,为什么我们不能成为创造大国,比如软件就讲究创造创新,为什么不能成为软件强国?我认为原因也归结于数学强国的思路。

具体过程很长,这里偏题不写,可到微博与我讨论,主要原因是:

中国文化是一种集体形态文化,这种吸纳文化,一本身没有创新性,第二吸纳外部东西则容易走极端,会造成科学强权,科学替代人性人文艺术,为什么西方人没有走极端,因为西方人科学和上帝同时存在。

所以,我们如果深刻了解这个文化,就如何左右取乎中,在我们已经深入掌握数学科学以后,如何重新审视艺术哲学对软件的影响。而不是反复在低层次来谈软件。

另外,我个人也反对"数学是一切哲学、科学的基础",应该是‘逻辑’是一切哲学和科学的基础,因为数学只是培养培养逻辑的一种手段而已。

如果只学习数学,没有从中培养出逻辑,那么就会象51CTO这个编辑一样,写文章只会引用名人名言,而不是用自己逻辑写文章。引用名人名言则容易走极端,因为任何真理都是有前提条件或边界限制的,只借用真理,不注意前提场景是否同步易极端。

这个过程非常类似我们领域建模,如果只注意到实体本身,不注意该实体是在某个场景下扮演的角色不同,导致的行为职责结果也不一样,那么说明看待事物只是流于表面。

[该贴被banq于2011-02-15 14:49修改过]

数学推理用到逻辑,但逻辑学却不属于数学的范畴,古希腊最早产生逻辑学,但也不是欧几里德这类擅长严格证明的数学家、而是亚里士多德这种多学科人才提出来的。个人认为,数学用到的逻辑并不多,基本上就是三段论--演绎法,而现实生活中的逻辑则多得多,更多的是归纳总结、对比、引申等等。软件开发的逻辑要远远多于数学逻辑,学数学对培养软件开发的逻辑并没有多大帮助。
通过学数学培养的逻辑思维有很大的局限性,容易使人陷于细枝末节。这也是我见过的的数学天才做软件反而更加困难的原因之一吧!

说“数学能培养逻辑思维”是一种想当然,想想数学老师们灌输给你啥逻辑,说实在只有演绎逻辑,就是三段论。谁能用三段论这种逻辑去开发一个软件?
[该贴被cxz7531于2011-02-15 15:20修改过]

2011年02月15日 15:11 "cxz7531"的内容
通过学数学培养的逻辑思维有很大的局限性,容易使人陷于细枝末节。这也是我见过的的数学天才做软件反而更加困难的原因之一吧!

说“数学能培养逻辑思维”是一种想当然,想想数学老师们灌输给你啥逻辑,说实在只有演绎逻辑,就是三段论。谁能用三段论这种逻 ...

说得太好,这才真正说明数为术“算术”的道理,用数学培养的逻辑不但容易陷入细枝末节,而且养成人向下穷尽纵向思维习惯,说不好听就是钻牛角尖,无法培养跳跃式的横向思维。

看来:数学是一切哲学和科学基础,不只是一种误导,更是一种浅薄的谬论。古希腊很多大哲学家被我们国家宣传为大数学家,哲学家才是他们本义,使用数学来演绎哲学只是哲学中一个派别罢了。

只看到有形的术,无法看到无形的道,这是一种悲哀。

数学是一门语言,语言表达思维,也影响着思维。这里且把思维定义为人认识与改造世界的能力。

把人的思维的局限性归罪于一种语言本身,似为不妥。要怪的也是怪是人自己本身,无需把矛头指向一门语言。一种被广泛应用的语言,一定有其可取之处。

思维能力未必要从数学上获得,比如钱钟书,韩寒,并不擅长数学,他们都是善于思考的人,但这不能说明数学不能培养人的思维能力。

事实上,有些人天生对数学敏感,那么通过数学这门语言,其将可能对世界有极其深刻的认识;就像有些人对音乐或色彩天生敏感,通过音乐、绘画也可以走向世界的深处。

语言只是表达思维的一种工具,用得不顺手,不要把责任放在语言上,这只是说明我们也许选错了工具。我们应该去寻找更适合自己的工具,去进行更深入的思考。

2011年02月15日 20:48 "jdon007"的内容
要怪的也是怪是人自己本身,无需把矛头指向一门语言。 ...

是的,错的不是语言。但这是觉悟人才能得出的觉悟,没有悟“道”者,往往形就是其全部。中国教育就是以形教育为主,为什么外国人觉得中国学生学到知识多很多,却缺乏思考,也就是这个道理了。美国人从小就是思考,实践,思考……中国人从小就是灌输知识,知识……因为考试是考知识,考好试就能上好学校,好学校就能找到好工作,于是一代又一代的思维被扼杀。思维的完整性,决定了能否创造。摆脱为学而学,为用而用的人相对较少,当然也与无奈的“生活”有关。

单单学一门科学是很难悟道的,因为很容易就以为那就是终点,那就是一切。程序员往往是理科专业的人,在中国式教育下很容易被“数”所困——为学而学,为用而用的数学,根本不能培养思维。若果某人能把数作为“道”的形的话,那可以不叫数学家了,叫哲学家。不与形结合的数,到底算什么呢?其实数形结合应用到计算机,最终目的就是以数替形,以数示“道”而已。计算机本身就是数的集合体,若果用“形”都不能示“道”,如何用数来表达世界呢?

最体现思维的是设计,财经郎眼也说过,(工业)设计才是主导力量。中国人压根儿不看重这点,所以利益全跑到别人的口袋里了(很大原因因为教育)。过去最能讽刺中国教育的一句话:认真“听”课,就能得到好评;题海战术,就能攻克考试。要是加上工作阶段的讽刺:低头虾腰,就能拿到好工资。这种文化之下,何来思维呢。

数学没问题,可惜人们不懂或者看不到数学背后的逻辑,也就是思维了。
[该贴被SpeedVan于2011-02-16 02:15修改过]