数学、电脑和英语——一个也不能少

时间:2021-01-11 17:16:02
 

数学、电脑和英语——一个也不能少

——STL之父访谈录

Alex Stepanov简介:
Alex Stepanov ,STL(标准模板库)之父,并因此而荣获第一届Dr. Dobb's 程序设计杰出奖,现在是Adobe公司首席科学家。他曾是康柏电脑公司的副总裁和首席科学家,AT&T实验室副总裁和首席架构师,SGI服务和超级计算机业务首席技术官。

什么是STL呢?STL就是Standard Template Library(标准模板库)的简称,它是由Alexander Stepanov和Meng Lee在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前,Alex和David  Musser已对该技术进行了很长一段时间的研究。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。这里的“容器”和“算法”是多年来编程应用中常用组件的集合,STL的贡献是将各组件和接口泛化及标准化。这样你就不用重新开发它们了,但你可以使用这些现成的组件来编写程序,STL现在是C++的一部分,任何C++平台都包含着它。中国您好!
对于STL之父Stepanov先生来说,这是第一次到中国来参加ICESS会议,对伟大的中国和美丽的杭州的期望和我们大家没有太多区别——美食+乌龙茶。而他对古代中国和中国数学家的了解,更是让人佩服;当然,更有他对中国程序员们的祝愿!除了祝愿,还有大师的点滴看法,毕竟不能只说好听的!——真正的朋友都是这么做的。问:您来过中国吗?你对中国的印象是什么?Alex:这将是我的第一次中国之行,我期待着参观伟大壮观的中国。当然我也期待着吃一顿丰美的中国大餐,品一杯正宗的乌龙茶。问:您对中国和中国的程序员有什么认识吗?你最想对他们说什么呢?Alex:中国是一个伟大的国家。曾有过许多伟大的数学家:秦九韶的《数书九章》就是古代数学中的经典;《孙子兵法》中已包含现代西方称之为中国余数定理的内容。现代中国也产生过许多真正的伟大的数学家,如关于哥德巴赫猜想(Goldbach conjecture)所做出杰出贡献的陈景润先生。我祝愿中国的程序员做的和中国的数学家一样伟大。我的建议很简单:好好学数学,好好学计算机,好好学英语。         图:Alex和中国电脑爱好者共勉:继续学习!问:您以前在苏联工作和生活,而现在生活在美国,您觉得二者有什么不同吗?您觉得怎样才是一种好的大学教育,尤其在计算机科学方面?Alex:1977年时我离开了苏联,几年后,在美国也找到了家的感觉。现在,我老了,我经常重读年轻时读过的书:有Tolstoy托尔斯泰,Dostoevsky陀思妥耶夫斯基,Gogol果戈里,Pushkin普希金等的作品。我也花很多时间读过去伟大数学家们的经典书籍:有Euclid欧几里得, Gauss高斯, Dirichlet笛里西列特, Euler欧拉, Klein克莱因等的。我觉得,美国的大学和美国社会,一般说来,对科学和文化的认可程度不比俄国。但现在俄国的认可程度也不行了。我还听说中国学生中新的一代人更愿意赚钱而比较轻视知识。这是令人悲哀的。 大师的修炼之路
1950年11月16日,Stepanov先生生于苏联莫斯科,在莫斯科大学研究数学,但他从未成为一名数学家。因为他实在不能对Tamagawa算术、Coxeter群等一些纯数学的东西感到兴趣。Stepanov先生的想法很单纯,他要脚踏实地干事。对他来说最幸运的事情是,他能够看到很多伟大的数学家是如何做学问的,也就使他更清楚地看清计算机科学中一些司空见惯的伪数学。因此,能成为一名程序员对他和计算机科学来说真是一件好事。另两位大师对他的影响是显而易见的,一位是计算机程序设计艺术教授高德纳(Donald Knuth)先生, 另一位则是计算机科学大师Edsger Dijkstra。他深情地说:“前者告诉我答案,后者则引我深思。”而他对高德纳先生的《计算机程序设计艺术》一书的推崇,也使我们找到了提高自己编程水平的杀手锏。1984年,他成为纽约布鲁克林理工大学助理教授。他说:“教授计算机科学使我受益匪浅,我要对付各种研究生课程。在此过程中,我学到了很多新东西。我还用Scheme语言开发了一个巨大的数据结构和算法库,这项工作导致了Ada泛型库的诞生(这是和Dave Musser合作的)。在贝尔实验室短暂地研究了一段时间,设计了一个新的C++算法库,在1998年去了位于Palo Alto的惠普实验室。在那儿,先花了四年时间研究存储系统 。1993年,得到了一个回头研究泛型编程的机会。而STL就是这次研究的结果。1995年又到了Silicon Graphics,在此,组建了一个小组继续进行STL的开发工作。”他现在是Adobe公司的首席科学家。Adobe是一家生产诸如Acrobat和Photoshop之类桌面软件的公司。问:您的生活是怎样和计算机联系到一起的?Alex:1972年时我的一位朋友推荐我到莫斯科研究院工作。从那时起就开始了我的编程生涯。很幸运地是, 我参加了一个容错小型机开发小组从无到有白手起家的开发工作,在它的如系统架构、操作系统和其他的系统软件方面,我学到了许多东西。还分担了操作系统设计中的部分工作,写了一个调试程序,汇编程序和目标代码连接载入器。尤其值得一提的是,我和Alexander Gurevich先生,他是这个项目的主要设计者,有机会一同亲密工作,他是一个非常棒的程序员。问:您怎样教自己的孩子和学生们?

Alex:虽然我现在已经不当教授直接从事教学工作了,但我有相当时间是用来培训Adobe公司的工程师。我的编程信条是:程序设计是基于精确的数学训练的,我的教学内容就是基于此的,希望学生了解到算法是定义在抽象数学结构之上的。我推荐给我的学生们的书是高德纳(Dnonald Knuth)先生的《计算机程序设计艺术》——这是一部关于程序设计技术的百科全书。据说北京的国防工业出版社已经发行了很好的中译本,我衷心希望你们所有的读者去买齐这三卷书。这里面有在我们的一生中应该不断学习的好多东西。我向我的学生们推荐的另外一本书是George Chrystal的《The Textbook of Algebra》,它包括了大部分基本的代数学知识。不幸的是,有些人,哪怕是取得数学学位的仍然不知道Chrystal先生提到的许多东西。我不知此书是不是翻译成了中文,如果还没有,我希望能有人来从事这方面的工作。明年我计划出一本基于我的讲学内容的书,希望将来能有人来将它翻译成中文。图:计算机程序设计艺术大师高德纳先生和他写的一本可以研读一辈子的书至于我的孩子们,有几个是程序员,我的一个女儿从事编译器和效率调测工具方面的研究,另一位则是一家较大的反病毒公司的工程经理。我很少教他们事情,当然,他们也自有主见,很少听我的。 STL的故事
STL是Stepanov先生一生中浓墨重彩的一笔,而这一笔在他的描述中却是那样地不经意。STL也是他个性的重要体现,独立思考,缜密逻辑。要了解STL之父,首先要知晓什么是STL。有一位意大利记者曾向Stepanov先生问过此问题:STL究竟是指Standard Template Library(标准模板库)还是 Stepanov and Lee?Stepanov先生笑着解释他的玩笑:哦,它真的是指Standard Template Library。我曾经在Dr. Dobb的杂志做的那个专访里开玩笑说,STL是指“Stepanov and Lee”,但它只是个玩笑而已。而真正的STL实质上包含了二者的意思。Meng Lee是他的一位无可挑剔的合作伙伴,她使Stepanov先生更专注,她在代码和文档上花了大量的令人筋疲力尽的时间。正是由于象Lee这样的合作者,使得STL最终广为世人传播。问:您是由于什么原因而发明了STL?发明的过程是什么样子的?它对您的生活和研究有什么影响吗?Alex:STL的发明源于我多年对程序灵活性和参数化探索的结果。我对此仍不太满意:因为C++语言上的一些缺憾,使得我不能完全表达我要表达的意思。STL应当做将来要设计的库的草稿。我不知道在我有生之年是否能看得到,但我坚信最终会有一个关于算法和数据结构的标准架构,说不定作为读者的你就是这一发明人呢!我觉得很难形容STL对我生活和研究的影响。STL并未从本质上改变我的生活,因为我没有通过它赚到任何钱。我想向我的几个朋友展示一下正确的编程方法,而 STL正是为他们而做的。事实上将这项工作完成带给我很多快乐,当我听说它帮助某人解决了问题时,我更加快乐。当然也有人说如果让他们设计他们可以设计出更好的东西来,也有人对STL嗤之以鼻。这些攻击也确实伤害到我。和STL形成对照的是OO——面向对象编程。OO的思想困绕着许多程序员,我想:作为一个程序员,这种东东一定是要掌握的,但是……,请看下面Stepanov先生的观点: 问: 您对面向对象是怎样理解的?它是不是一种好的可接受的编程思考方式?有没有学习OO必须的有用的工具?Alex:我尽量避免用OO思考问题,我对他们编程的方法不感冒。在对意大利的一家期刊采访时我曾说过:“我发现 OOP在技术上是有问题的,它妄图用基于单一类型的不同接口来分解世界,为了处理不同的实际问题,你需要不同种类的代数方法以横跨不同类型的接口族;我发现OOP在思想上是不健全的,它声称一切都是一个对象。即使真的是这样这也没什么意思─说一切都是对象跟什么都没说一样;我发现OOP的方法论是错误的,它从类开始。就好像数学要从公理开始一样。你不是从公理开始─你是从证明开始。直到你找到了一大堆相关证据你才能归纳出公理,以公理结束。编程上存在着同样的事实:你要从有趣的算法开始。只有很好地理解了算法,你才有可能提出合理的接口以让其他组件共同工作。”我再重复强调一点:程序是描述算法和数据结构的,而不是描述继承性和多态性的。追根溯源,STL起源于什么?意大利记者的提问对我们将有所帮助。问:STL一开始被设想为今天这个样子吗?即所谓的C++标准库,或者,它是从别的什么项目来的?告诉我们一些关于STL的历史好吗? 答: 1976年,又要说回到苏联了,我因为吃生鱼片得了严重的食物中毒而住院,在精神恍惚中,我忽然意识到并发的加法计算能力是基于加法是结合性的[译注:我对这句 话的理解是:比如说a + b + c = a + ( b + c) = ( a + b) + c]。(因此,STL可以说是细菌传染的结果J)同时,我意识到并发的减法运算是和半群结构类型有关联的,这就是最基本的重点:算法是定义于代数结构基础之上的。我又花了一些年头,意识到必须在正规公理上加入复杂性必要条件以扩展结构的概念,接着又花了15年之久才完成全面的架构。(我直到现在都不能确定我是否成功地让我朋友小圈子之外的任何人理解了这一点)。我相信迭代器理论是计算科学的中心就象环或Banach区间理论是数学的中心一样。每次当我找到一个算法时,我都要努力去寻求它所定义的结构基础。我想做的就是泛化地描述算法,并乐此不疲。我可以花一个月时间去精确地描述一个众所周知的算法的泛化表示。迄今为止,在向人们解释我这种行为的重要性方面,我是异乎寻常的失败。然而,不知何故,这种行为的结果─STL却是如此成功。关于STL还有很多故事:STL如何成为C++标准的呢?Stepanov先生有下面的表述,表述中也有他对C++之父Bjarne Stroustrup先生的精彩描述。问:有一件事情我一直都很惊奇—C++标准委员会那么快就采纳了STL。我的意思是,这些委员会可都是以谨慎和保守而出名的。这一点,你怎么解释?答:Bjarne Stroustrup的支持是至关重要的。如果说Bjarne想要什么东西的话,那就是他真的想把STL弄到标准里,他办到了。他象骡子一样固执。甚至逼着我去改STL——我从来都不会为第二个人这么做——我也是个顽固分子。但他是我所认识的最有主见的人,他花了一些时间去理解STL是干啥的,当他理解之后,他决定使其成功地被大家接受。他对STL的贡献还在于他支持“不止一种编程方法是‘合理的’”的观点——这对立于十来年认同“唯一”方法的无休止的争执和夸大——而坚持把弹性、效率、重载、类型安全结合在模板里以致于STL成为可能。我很乐意明白地声明Bjarne是我这一代人里卓越的语言设计家。 明天和学习的故事
 Stepanov对数学有着很深的感情,数学的情结渗透出他对于学习的态度。这好象是个沉重的话题,大师给我们以说明,说明得干净利落!图:Alex在浙江给大学生演讲 问:请您谈一下,数学和计算机科学有什么联系吗?Alex:计算机科学是建立在数学之上的精确的学科,引用Dijkstra先生的话就是:“程序设计就象同未理顺的复杂性问题打的一场战斗,既然要打这场战斗,智力培训是必需的,这些培训的主要目的就是找出解决这些问题的可行的组织方法,而数学首当其冲,几个世纪以来,数学的作用正在于此,这是我们再熟悉不过的事实。如果将现在生动的数学体系作为实验证据,对于解决人类遇到的复杂性问题,数学还是最有效的。我们已经别无选择了:我们应该将我们的程序设计领域重新改造,将数学家们的方法同样地应用于编程,再也没有别的方法了。”问:您认为编程的好的方法是什么?对于编程来说,一种工具是不是必需的?Alex:我认为学习多种不同的编程语言是非常重要的。我用过Algol-60, Common Lisp, Scheme, Ada, C, C++, Java,和多种汇编语言。然而,也不能仅仅局限于程序语言,它仅仅是种表达算法和数据结构的工具——并且是种有缺陷的工具。一如Niklaus Wirth有句精辟见解:程序=算法+数据结构。 问:您认为计算机语言和人类的语言有什么区别?Alex:没有人尝试过用计算机语言写出诗歌来。计算机语言发展到能允许我们解决一些真正美好的现实生活中的东西,还有很长的路要走。问:您能对IT的将来做一下预测吗?我们将来会用哪种计算机语言?Alex:C++和Java会在近几年得到应用,我期望最终会有某些新的、更完美的语言出现。我希望那一天距离我们不会太远。采访手记
图:Alex、Bjarne和作者在一起当我面对面见到Alex Stepanov先生时,和我面对他的像片时想象的是另一个人,从他的唯一的官方照片上, 我们不难对他有威严的遐想,但实际上那并非他自然的一面——幽默风趣、平易近人才是真正的他——个性鲜明,爱憎分明。OO的思想一直困绕着我,从未有人对OO表达过如此强烈的想法——除了Stepanov先生。对于未来,他的解释方式更加单纯生动容易理解。还有什么好说的呢?只有学好数学,学好计算机,学好英语了!Stepanov 先生在互联网上很低调,既没有个人主页,也很难搜索其电邮。Stepanov先生和C++之父Bjarne Stroustrup 先生是很好的朋友,Bjarne的推荐对我们的采访起了重要的推动作用,他告诉我:Stepanov先生经常有一些有趣的和重要的东西要说。Stepanov先生有着非常严重的个人魅力,他的言辞激进,甚至让人想到“猛烈”“尖锐”等字眼,这可能也正是他对计算机内涵的深刻体会和精深的数学涵养所致——他的眼里容不得半粒沙子。高德纳先生的《计算机程序设计艺术》一书,正是Alex Stepanov先生极力推荐的一部作品,不论电邮中还是面对面时,他反复强调这部著作是一个珍宝库,想要什么,里面便有什么,而他在和这本书打交道的三十多年,从中受益无穷。从他对高德纳先生《计算机程序设计艺术》的巨大推崇上,也对他的个性有所印证。STL代表什么呢?Stepanov and Lee,这不完全是个玩笑,Meng Lee架起了我与Stepanov先生沟通的又一架桥梁。这篇采访中滋润着她的汗水……2004年12月21日
相关链接:
STL之父访谈中文译稿:http://www.jjhou.com/myan-alexander.htm
STL之父访谈英文稿:http://www.stlport.org/resources/StepanovUSA.html
http://www.sgi.com/tech/stl/drdobbs-interview.html
HP公司关于STL论文:http://www.hpl.hp.com/techreports/95/HPL-95-11.html