![更多课程](/zhuzhan/img/btn-course.png)
![选择中心](/zhuzhan/img/btn-center.png)
![logo](/zhuzhan/img/logo.png)
C/C++培训
达内IT学院
400-111-8989
![](/zhuzhan/images/weixin.jpg)
C++语言之父 Bjarne Stroustrup简介
图BS先生在他的办公室,这是他的个人网站上的相片
许多重要人物之所以成名,或者是因为其改变了历史或者是因为其创造了历史,Bjarne Stroustup先生,C++之父,属于后者;归结个人成功的原因,理由可能有多种,但他只有浅显的两个一点点:他比多数人天真和理想主义那么一点点;比多数人花在解决问题上的时间多一点点。
BS先生,1950年生于丹麦港口城市奥尔胡斯市,1975年在奥尔胡斯大学毕业,1979年获得剑桥大学计算机科学博士学位。他是C++语言的设计者和实现者,现在是得克萨斯州A&M大学计算机系教授。1979年他来到美国的新泽西州并加入贝尔实验室,与C语言之父、1983年图灵奖得主Dennis Ritchie以及大名鼎鼎的Brian Kerighan(两人合著《C程序设计语言》,Kerighan还著有《程序设计实践》一书)共事多年,期间参与了贝尔实验室的C语言标准化活动。他的研究兴趣十分广泛,包括分布式系统、操作系统、仿真、设计以及编程,Bjarne还积极推动C++的ANSI/ISO标准化。
20世纪90年代以后,Bjarne Stroustrup步入人生的最辉煌时期。1990年,Bjarne荣获《财富》杂志评选的“美国12位最年轻的科学家”称号。1993年,由于在C++领域的重大贡献,Bjarne获得了ACM该年度的 Grace Murray Hopper大奖并成为ACM院士(成立于1947年的ACM协会是历史最悠久、目前世界上最大的教育和科学计算协会,成为ACM院士是个人成就的里程碑)。1995年,BYTE杂志颁予他“近20年来计算机工业最具影响力的20人”的称号。
除了他的专业研究领域外,他对历史,通俗文学,摄影,运动,旅行和音乐等有广泛的兴趣。他对C++语言的推广也做出了极大的贡献,他写的书“The C++ Programming Language《C++程序设计语言》”已经成为这种语言中最为流行的学习资料,至少被翻译成18种语言。
给中国程序员最美好的祝愿
2004年12月8日,杭州,C++之父Bjarne Stroustrup(BS)先生再次来到中国。我们有幸采访到了这位大师!请看大师给中国程序员的最美好祝愿。
问: 您对中国和中国的程序员有什么认识?您想对他们说点什么吗?
BS:中国是个大国,并且她有许许多多有趣的文化。我想和中国程序员说的和对其他国家的程序员说的是一样的,所以我有如下的回答:优秀软件所具有的特点和技术在全世界都是通用的。
图 给中国程序员最美好的祝愿
问:您对后面的中国之行有什么期望吗?如果不是秘密,您能和我们透露一下吗?
BS:这不是什么秘密。我要在杭州市举行的国际会议(ICESS 2004, #/icess2004/)上做一个主题演讲,演讲的内容是嵌入式系统。我觉得嵌入式系统程序设计是一个不仅有趣而且重要的领域,它也是C++应用大规模化和增长迅速的领域。在这一要求苛刻的应用领域内,我将会解释怎样通过比C代码更好的高级C++来实现某些应用。Alex Stepanov,STL之父,也会到场。你们正好也可以采访他?他经常有一些有趣的和重要的东西要说(注:后面我们将采访Stepanov先生,他确实有许多精彩的言论,和BS先生相比,毫不逊色)。值此机会,希望再次一睹中国的风采。
现在,成为一名电脑高手是许多年轻学生的梦想,面对BS这样一位大师级人物的出现,最令我们感兴趣的问题莫过于:BS先生成为大师的历程是什么样子的呢?
BS先生出生的奥尔胡斯市是日德兰半岛东海岸的一个美丽的小城,那里每家都有自己的小公寓,公寓里有个小院,小院是孩子们踢足球的地方,那时,成为一名足球明星比成为一名电脑高手是更可行的想法,做一名电脑名星好象是很遥远的事情,因为个人不太可能拥有一台昂贵的计算机。很幸运,在大学时他就用上了系里的计算机,它叫GIER,是一台旧的丹麦计算机,有一个房间那么大,程序都写在磁带上面,他用它学习Algol 60程序设计。
而对BS先生生活产生质的变化的事情是什么呢?
他认为在他的发展生涯中最关键的一个项目是在剑桥大学攻读博士学位时用Simula67计算机做的模拟分布式系统。做这个项目除了使他成为一名顶尖的程序设计高手外,更使他养成了程序员应具有的沟通和交流能力,这为他后来的发展奠定了坚实的基础。设计这种程序要求苛刻,与你仅仅为了自己或者朋友的需要而简单地写一个能运行的程序有着巨大的区别。另外,在程序语言的设计决策和具体技术实现等方面,他曾经从事过的计算机架构方面的研究工作也起了积极的影响。
他对自己的成功的归结更加浅显:与别人不同的地方也许在于,他比多数人天真和理想主义那么一点点;比多数人花在解决问题上的时间多一点点。
B与C
BS先生和C有缘。
BS先生和中国(China)有缘,对他来说中国是一个神秘、美丽而有趣的国度。
BS先生两年前曾在中国有过长时间的旅程,而在杭城的日子恰逢阴雨,这次到来对晴天的期望是强烈的,何况有杭州西湖美景。作为丹麦人,也就是卖火柴的小女孩诞生的地方,也就是安徒生童话诞生的国度,和中国有着很深的渊源,安徒生童话里恰巧里面有一篇《夜莺》,那里写到了中国,而BS先生对于C(中国)的认识又是什么呢?
他的回答很微妙,作为丹麦人,他自然知道安徒生童话,他刚好也很喜欢它们,《夜莺》中描绘的中国纯是虚构,与当时的中国可能有也可能没有任何关系,安徒生创造了那个“中国”来泛指多个国家及其统治者。而作为一个教育者,他对中国的教育老祖师孔老夫子也有自己独到的见解。
作为第二个C,自然就是C++了。勿庸置疑,C++对于IT的分量,和对于BS先生个人的影响,都是巨大的。还有一个C,就是计算机,且看下面他如何描述自己与计算机的联系。
问: 您的生活是怎样和计算机联系在一起的?
BS:我也不晓得自己到底是怎样和计算机联系在一起的。当我上高中时,不知什么原因总觉得计算机科学是数学的某种实用形式。当然不是这样,或者从根本上说软件的发展并不是如此,但正是这种误解使得我在还不知计算机为何物时选择了 “计算机科学数学” ,作为我学习的专业,并获得了我的硕士学位。我写完第一个程序后,就不可避免地继续下去了,曾没有回过头。正象大家所看到的,很幸运,我找到了一个使自己的才能可以很好地发挥的位子。
问:您怎样教育自己的孩子和学生们?您对孔夫子有什么看法?孔子是中国古代的伟大教育家。
BS:多数情况下,我是通过实例来进行教学的。我认为多数人过高的估计了语言的影响力,并且过低的估计了这种影响力是怎样达到的过程。我尽量通过把理论和实践相结合起来以更好地达到目的。这样可以比仅用理论或仅用实践示例来教育更能取得事半功倍的效果。我在教育过程中也想做到因材施教,并且尽量从这些情况当中得出一般的规则和概念。
关于孔子的问题,到目前为止是你问的最棘手的问题。自然,我不是一个孔子问题专家,但是我曾经访问过中国并且我比其它西方非孔子研究者读过更多的关于中国历史的书,但事实上关于孔子的影响力,人们对他有不同看法,他的教育我也知之甚少。当然,我最喜欢他的“人合”的观念,但是就我个人的感觉而言,他的观点有点僵化呆板,权威化,太过于等级化,并且太注重传统的形式,同时他还强调建立一个有秩序的国家,这很容易把人仅仅按照事先定好的地位来对待,并且把个人仅仅看作他的性别,年龄,和等级等的一个代表。这有很大的局限性,我还认为和我的注重实例,实验的,和科学的教学观念相比他过分的强调道德,书本的学习和对人的控制。我希望我的这种评价不会对孔夫子不公。如果你认为我误解了他,请不要太介意,这种曲解更大程度上是无知而不是恶意造成的。当然孔子的思想也是可以理解的,毕竟2500年以前没有人对经验,技能和科学象今天的人理解的这样清楚,因此他们注重道德,统治和社会机制。
我不知这些观念被译成汉语会被怎么看待,但是我更注重个性化和实效的方法,但也不是所谓的忘我或者不负责任,每个人都应该尽力为他的家庭、国家和整个世界争取福利而不是从中索取,我们应该在我们离开世界时感到比我们以前看到的更好。
C++是怎样炼成的,是什么促成了C++语言?这象迷一样绕在我们的心头;那什么又是计算机语言呢?后者弄懂了,前者看起来也许就更简单了!且看大师的回答:
图 生活照
问: 您觉得计算机语言和我们人类的语言有什么不同呢?
BS:计算机语言要比人类语言简单的多,并且精确的多,那也是它应该具有的方式。我不赞成用自然语言去指令电脑的想法。一种程序语言是专家们的工具,并且和普通人相比,是对所有的专家来说用更加专业、定义的更加精确的符号和术语来表达的工具。
当然两者也有相同之处。那些用的较多的语言比那些使用率较小的语言拥有更多的俗语、表达方式、词汇,这一点无论是计算机语言还是自然语言都是一样的。语言还有一个倾向就是简洁和使用方便,并且越来越易学,象C++和英语。在两种语言当中,我们都希望能从最初的基本的应用到真正的掌握。另外一个相同之处就是语言都要适应一个群体的需求,并且一个大的群体或者说社区本身就有重要意义,因为作为这个群体的一部分可以让你有更多的人来进行互动并且有更多的作品可以使用。所有鲜活的语言都是通过获得新的术语、俗语和表达方式来得到发展的。在C++中我们已经看到了关于模板技术的迅猛发展,从STL开始,并且通常作为一种普通计算机语言和元程序来提及。以后几年里,我们将会看到ISO C++被更新版本来更好的支持这种应用,并且来为其它的需求提供服务,这些需求最初在1998年标准就出现了。
那么,究竟是什么促成了C++语言呢?
他的研究生涯给了他很大灵感。AT&T是一个光荣的群体,那里有许多有名的IT人物,他们彼此间的影响也十分深远,他曾经和C语言之父Dennis Ritchie亲密接触十多年。而对于C++来说,尤其值得我们推崇的是:作为一种学术性语言,他是从商业性语言的重围中杀出的。
1979年BS先生在剑桥完成学业后,到了位于美国新泽西Murray Hill的AT&T贝尔实验室从事研究工作。1985-1988年,AT&T曾拔款5000美元作为市场预算,创建一门语言的决心可能由此而始。在那里,开始研究几个与分布式计算有关的项目(使用局域网)。可是工作进展得并不顺利,因为那时几乎所有程序设计工具都不适合完成此类工作。所以,他决定自己开发一个名为“带类的C”的工具,它既允许以类似于Simula的方式组织程序(这种方式现在被称为面向对象),同时也支持在硬件层次上进行系统软件开发。“带类的C”后来被应用于贝尔实验室的很多应用领域,在应用过程中,他又学到了很多东西,而C++正是以“带类的C”为基础并结合了一些我们学到的新东西发展而来的。
生活中更有意义的事情
对于BS先生来说,生活中更有意义的事情是什么呢?对于学习和教育,看起来象个沉重的话题,而在BS先生身上却显得如此生动,作为教育家,BS先生本身便是一个成才的典范,他出身于农场和“蓝领工人”家庭,他在专业领域孜孜耕耘,取得了不菲业绩。先是AT&T的研究者,现在又兼任教席,BS先生从研究室又走进了大学,直接面对大学的新学生!
C++是BS先生生命中最重要的事情,而还有一些更有意义的事情。
他对大学教育情有独衷,他现在是A&M大学的教授,这种行动便是很好的说明,在这里,以一种在AT&T研究所中无法采用的方式将研究和教学结合起来。他认为教学是一种与工业生产不同的能影响世界并使其变得更加美好的方式,而且大学里的研究工作的成果与曾经进行的工业研究的并不相同 - 不是说它更好,仅仅只是不同而已。
他的一些教育观点也非常值得我们深思:
他说,不要只学习计算机和编程,要积累一种或多种领域的经验,要有其他专业知识,这样就能明白什么东西值得我们去编程实现。另外,学习多种语言也是他一再强调的,如果只学一种,容易导致想象力的僵化。他本人爱好广范,精通多种计算机语言。
图 摄影者的风景
问:您觉得怎样才是学编程的好方法?学习语言时一种好的工具是不是必需的?
BS: 这是过去一年左右里一直占据我大部分注意力的一个问题。我志愿教给电子工程/计算机工程专业大学一年级的学生编程,我认为我们目前教编程的传统方法活力不够。我们社会的文明是建立在软件上的,因而必需培养更好的软件专家。我认为已经到了开始培养新手程序员的时候了,在我个人经验中,把更多的精力放在专家上。我最初的设想就是让学生成为专家,并且最终能够编制出别人必须依赖的软件的专家,这就意味着比在培养新手时要求更高,要将重点放在正确性保持和错误的解决能力上。既然目标是为了制造现实世界中可用的软件,我一般把重点放在标准库的应用和设计上。对于C++标准库工具,例如向量和字符从第一周应该开始应用,在第一个月之内类class就应该介绍,在第二个月之内介绍图形graphics 和继承性inheritance。这种方法从根本上与那种传统的方法不同,那些教学方法往往花费数周的时间来区分那些令人迷惑的C++基本类型,并且浪费宝贵的时来处理那些迷人耳目的细节。我称我的方法为“深度优先法”,因为我们首先教我们的学生足够的知识去做有用的工作,并且在最初比较狭窄的基础上拓宽他们的理解能力和对工具的应用能力。
我所有的教学都是在实例的基础上进行的。我通过典型的例子来使学生理解,用亲身的体会来解释一些规则。自然地,后面需要学生写大量代码—如果你不读也不写大量代码的话你就学不会编程。第一阶段如下,学生必须经过亲身写代码,体会解题过程中出现的实际问题;第二个阶段必须好好体会亲身所犯的错误,并且学会克服他们。这其中,调试、错误处理,还有学会将大问题分解成小问题,从最小的部分来编程是最基本的。
问:数学和计算机科学有什么关系吗?
BS: 两者并没有很强的直接联系,但是有一部分编程的实质包含在里面---象学数学一样,编程有时也需要很灵活的思维。自从古希腊以来,数学就被用来训练人们的逻辑思维,并且我觉得如果不用数学的话很难想象怎样才能编出好程序来。当然也有一些计算机领域,在这些领域当中高深的数学知识是基础。然而,这些领域通常是非常专业的。数学,特别是数学思维是计算机的一个支柱。经验主义是另一支柱,通过观察和测量来帮助理解什么真正地发生了,并且改变了我们的系统,也改变了我们的行为。两方面我们都需要。计算机科学不是仅仅用来证明定理的,也不是仅仅用来收集数据的。为了有效地实践计算机科学和发展高质量软件,更需要二者都具备。
问: 您以前在欧洲学习而现在在美国工作,您觉得欧美有什么学术传统区别?怎样才算是一种好的大学教育呢?尤其对计算机科学来说。现在的大学有部分学生中途退学,您怎样看待这一现象呢?
BS:这很难回答。欧洲和美国都有很多不同的学术传统的。真的不好总结,并且在两个大洲都有一些伟大的部门具有这种伟大传统。
很少有学生离开学校去开公司,更多的是离开学校去从事一些有较高收入的工作,但大多数人还是完成了学业。我强调的是那些放弃了计算机科学学习转而投入工作岗位的是会为此感到后悔的。从长期来说学位对一个好职业来说是重要的,特别是学生在他们最后一年或最后几年学到的。事实上也确实有几个相反的例子,但那些人通常永远不会再从事真正的技术工作了。他们成了商人,并且如果那就是他们想成为的人的话,那一个学位并不是必须的。我一直坚持:一个学生如果还未获得学位,最好不要离开学校。
面向金钱、面向未来和面向对象
面向对象是个有趣的问题,C++正是和面向对象有着非常联系的语言,作为一种非商业化语言,他已经影响了世界范围数十亿美元的设计决策。而还有许多语言具有这种特点。
当有人问BS先生:有人说Java是纯粹面向对象的,而C#更胜一筹,而还有很多人说它们纯粹是面向金钱的。以您之见呢?
BS先生的回答非常风趣:我喜欢“面向金钱”这个词 :-) 还有Andrew Koenig的说法"面向大话"我也喜欢。C++可不面向这两个东东。对这点我还想指出,我认为纯粹性并非什么优点。C++显著地强项恰恰在于其支持多种有效的编程风格(多种思维模型吧,如果你一定要这么说)及其组合。最优雅最有效也最容易维护的解决方案常常涉及到一种以上的风格(编程模型)。如果一定要用吸引人的字眼,C++是一种多思维模型的语言。在软件开发的庞大领域,需求千变万化,起码需要一种支持多种编程的设计风格的通用语言,而且很可能需要一种以上呢。再说,世界之大,总容得下好几种编程语言吧?那种认为一种语言对所有应用和每个程序员都是最好的看法,根本就是荒谬的。
他上面的回答很好地告诉了我们面向对象和面向金钱的关系。
问:您对面向对象是怎样理解的?它是不是一种好的可接受的编程思考方式?有没有学习OO必须的有用的工具?
BS:OO技术是现在软件发展的基础,但并不是唯一的组成部分。我指的是一般的程序,象用C++ 模板和其它的方法支持的语言,这些方法必须通过综合考虑来评价一种语言:一流的、最可读的、最可维护的、最能易于执行的等。但没有任何一种方法是适合所有要求的。
我主要通过C++作为工具来编程。我觉得C++是一种学习和实践OO思想很好的编程语言。
图 敢问路在何方
问: 您能对IT的将来做一下预测吗?将来我们最有可能用什么语言?
BS:一个聪慧的幽默大师曾经说过:预测是困难的,特别是对将来的预测。但是我认为十年之内我们用的东西在今天的实验室里是能够得到的。另外我们将用的最主要的语言也是今天最主要的。我们不可能因为一些新东西和一些更好的东西的出现就重组整个工业领域,因此在五到十年之内,我们还将用C, C++, COBOL, Fortran, Java, Perl, Python,也许还有C#,和其它许多种语言。没有一种语言能适合所有用途,并且好的程序员都懂并且都能用好几种语言。懂好多种语言和多种程序设计技术会使我们可以更好地编程。
对于IT我不想说太多,很显然:我们完全依赖IT并且它会延伸到越来越多的领域。当然,肯定会有失败,通常是因为过度的热情引起的——但是在十年以后我们受IT的影响肯定要比今天大得多
采访手记
很幸运,通过电邮采访的同时也终于有机会和大师面对面,想象中的大师和面对面见到的有太多的意想不到,用一个词来形容是“谦逊”。
BS先生到杭州下了飞机,便扑向美丽的西湖,同去的是他的好友STL之父Alex Stepanov先生。在未去杭州之前,BS先生通过电邮告诉我杭州城的美;去了之后,少有的好天气让我们碰上了,爽;夜里在旅馆见到了久违的大师,一夜之间见到两位大师,更爽!
我对Bjarne Stroustup先生有着特殊的感情,觉得他象位慈父,而他正和我的父亲同样的年纪。大师,慈父!接触越多,对BS先生的感触越深。到了杭城,见到大师其人,这种感觉越来越浓厚,他又象海,既有热情,又能包容。
采访大部是通过E—mail进行的,采访的过程中对我的问题孜孜以求,给我的回答细微备至,E—mail的好处在此发挥到了极致,大洋这边的我沐着阳光,那边的他在挑灯夜书。
唯有谢谢众多C++程友和非C++朋友对我的支持,唯有大师再来杭城时,到最好的茶馆将上好的龙井泡上,亲手送到大师的手中!
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!