我一生都和C有缘——与C++之父Bjarne Stroustrup接触

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

寻迹

当IT爆发式膨胀的同时,有一些人曾默默地奉献,他们可能开创了一个时代,他们的作品可能是IT发展中的一个里程碑……2005年,我们开启了“寻迹”这个栏目,我们的记者会不定期亲身采访那些具有代表意义的软件或者软件技术的开创人员,发掘他们的思想、发掘他们的精神。

 

我一生都和C有缘

——与C++之父Bjarne Stroustrup接触

特约记者赵玉勇

了解Bjarne与C++

这是Bjarne通过《电脑报》对全国程序员的祝愿

许多重要人物之所以成名,或者是因为其改变了历史或者是因为其创造了历史,Bjarne Stroustrup先生(以下简称Bjarne),C++之父,属于后者;归结个人成功的原因,理由可能有许多,但他只有浅显的两个一点点:他比多数人天真和理想主义那么一点点;比多数人花在解决问题上的时间多一点点。

1979年Bjarne来到美国的新泽西州并加入贝尔实验室,与C语言之父、1983年图灵奖得主Dennis Ritchie以及大名鼎鼎的Brian Kernighan共事多年,期间参与了贝尔实验室的C语言标准化活动。

1990年,Bjarne荣获《财富》杂志评选的“美国12位最年轻的科学家”称号。

1993年,由于在C++领域的重大贡献,Bjarne获得了ACM该年度的Grace Murray Hopper大奖并成为ACM院士(成立于1947年的ACM协会是历史最悠久、目前世界上最大的教育和科学计算协会,成为ACM院士是个人成就的里程碑)。

1995年,BYTE杂志颁予他“近20年来计算机工业最具影响力的20人”的称号。

C++程序设计语言是一种承前启后,被数以百万计的程序员应用在各个领域中的语言,我们正在使用的Windows操作系统,我们上网用的浏览器IE无不是出自C++的手笔。

C++是一种重要的和比较流行的计算机语言之一,它是一种通用的应用广范的程序设计语言,是一种既支持传统的结构化程序设计,又支持面向对象程序设计的系统复杂的编程语言。

 

Bjarne和三个C

Bjarne先生,1950年生于丹麦港口城市奥尔胡斯,他是C++语言的设计者和实现者,现在是得克萨斯州A&M大学计算机系教授。最近,在杭州,C++之父Bjarne来到中国,我们记者也有幸采访到了这位大师!

“我和和C(China中国)非常有缘”,Bjarne告诉记者。对Bjarne来说中国是一个神秘、美丽而有趣的国度。Bjarne曾两度亲密接触中国,第一次是2002年,曾在中国的几所大学讲学,而第二次是在浙江大学参加ICESS国际会议。作为丹麦人,也就是卖火柴的小女孩诞生的地方,也就是安徒生童话诞生的国度,“我和中国有着很深的渊源,安徒生童话里恰巧里面有一篇《夜莺》,那里写到了中国。”Bjarne谈到中国非常高兴,不过在安徒生创造了那个“中国”来泛指多个国家及其统治者。

作为第二个C,自然就是C++了。勿庸置疑,C++对于IT的分量,和对于Bjarne个人的影响,都是巨大的。还有一个C,就是计算机(Computer),Bjarne告诉记者:“在他上高中时,不知什么原因总觉得计算机科学是数学的某种实用形式。而事实不完全是这样,或者至少从软件的发展上看并不是如此,但正是这种误解使得我在还不知计算机为何物时选择了 ‘计算机科学数学’。”当初,在他上高中的时候,Bjarne完成第一个程序后,他开始着迷计算机,没有回过头。正像大家所看到的,Bjarne找到了一个使自己的才能可以很好地发挥的位子。

 

C++是怎样炼成的

究竟是什么促成了C++语言呢?C++对C语言的扩充首先由Bjarne于1980年在贝尔实验室提出的,并于1983年命名为C++。尽管C++的“祖先”C语言是世界上最受喜爱和应用最广的专业程序设计语言之一,但C++的发明是必需的,因为C++可以让程序员理解和管理更大更复杂的程序。

C++的诞生是Bjarne的研究生涯给了他很大灵感,他所在的AT&T贝尔实验室是一个光荣的群体,那里有一群非常出色的研究人员,那里有许多着名的IT人物,他们彼此间的影响十分深远。Bjarne和C语言之父Dennis Ritchie共事十多年,他们的办公室相距不远,C++语言受C的影响是巨大的。而对于C++来说,

1979年Bjarne在剑桥完成学业后,到了贝尔实验室从事研究工作,20世纪80年代,AT&T曾拔款5000美元作为市场预算,创建一门语言的决心可能由此而始。在那里,开始研究几个与分布式计算有关的项目。可是工作进展得并不顺利,因为那时几乎所有程序设计工具都不适合完成此类工作。所以,他决定自己开发一个名为“带类的C”(“C with Classes”)的工具,它既允许以类似于Simula的方式组织程序(这种方式现在被称为面向对象),同时也支持在硬件层次上进行系统软件开发。从1980年开始,“带类的C”被应用于贝尔实验室的很多应用领域,在应用过程中,他又学到了很多东西,而C++正是以“带类的C”为基础并结合了一些我们学到的新东西发展而来。1983年夏天,Rick Mascitti给起了C++的名字,这个名字也象征着两种语言之间巨大的渊源,C++这个名字正式被使用是在1983年12月。

 

BjarneIT的预测

一个聪慧的幽默大师曾经说过:预测是困难的,特别是对将来的预测。Bjarne还是告诉记者,他认为未来十年之内我们用的东西在今天的实验室里是能够看到的。另外我们将用的最主要的语言也是今天最主要的。我们不可能因为一些新东西和一些更好的东西的出现就重组整个工业领域,因此在五到十年之内,我们还是用C、C++、COBOL、Fortran 、Java、Perl和Python,也许还有C#,和其它许多种语言。没有一种语言能适合所有用途,并且好的程序员都懂并且都能用好几种语言。懂好多种语言和多种程序设计技术会使我们可以更好地编程。

“对于IT我不想说太多,很显然,我们会继续依赖IT并且它会延伸到越来越多的领域。当然,肯定会有失败,通常是因为过度的滥用引起的——但是在十年以后我们受IT的影响肯定要比今天大得多。”

在本期G13版是我们的特约记者和Bjarne的真实对话。

(下转G13版)

 

 

人物印象

很幸运,通过电邮采访的同时终于有机会和大师面对面。想象中的大师和面对面见到的有太多的意想不到,用一个词来形容是“谦逊”。

Bjarne到杭州下了飞机,便扑向美丽的西湖,同去的是他的好友STL之父Alex Stepanov先生。

我对Bjarne Stroustrup先生有着特殊的感情,觉得他像位慈父,而他正和我的父亲同样的年纪。大师,慈父!接触越多,对Bjarne的感触越深。到了杭城,见到大师其人,这种感觉越来越浓厚,他又像海,既有热情,又能包容。

采访内容大部分是通过E—mail进行的,采访的过程中对我的问题孜孜以求,给我的回答细微备至,E—mail的好处在此发挥到了极致,大洋这边的我沐着阳光,那边的他在挑灯夜书。

 

Bjarne先生个人网站:http://www.research.att.com/~bs/homepage.html,

 

寻迹

C++之父谈编程

 

编程中的教与学

    编程爱好者自然是无比关心自己学习的方法、进度等的,那么教的方法在一定程度上也指明了自学者的方向。就让我们先来听听大师对于教与学的看法和主张。

问:能否谈谈你对传统编程教学的看法和你的主张?

Bjarne这是过去一年左右里一直占据我大部分注意力的一个问题。我志愿教授电子工程/计算机工程专业大学一年级的学生编程,我认为我们目前教编程的传统方法不够严谨也不够广阔。我们社会的文明进步是建立在软件上的,因而必须培养更好的软件专家。

我认为已经到了我开始培养新手程序员的时候了,在这之前我都是把精力放在专家上。我基本的设想是让学生成为专家,使他们最终能够编出可靠并且别人可以信赖的软件,这就意味着在培养新手时要求更高,要将重点放在对程序正确性和处理错误的训练上。

这种方法和传统的方法不同,那些教学方法往往花费数周的时间来区分那些令人迷惑的C++基本类型,并且浪费宝贵的时间来处理诸如声明和循环上的一些迷人耳目的语法细节。我称我的方法为“深度优先法”,因为我们首先教我们的学生足够的知识去做一些有用的工作,然后才在这有限的基础上拓宽他们的理解能力和对工具的使用能力。反过来,学生们学习编程的态度或者理念我认为也应该如此。

 

问:能否谈谈您的具体教学方法?

Bjarne既然我教学的目标是为了学生制造现实世界中可用的软件,我也非常重视标准库的应用和设计。对于C++标准库工具的教学,例如向量(vector)和字符(string)从第一周就该开始应用,在第一个月之内类(class)就应该介绍,在第二个月之内介绍图形(graphics) 和继承性(inheritance)。

我所有的教学都是在实例的基础上进行的。我通过典型的例子来使学生理解,用亲身的体会来解释一些规则。自然地,我要求学生写大量代码—如果你不读也不写大量代码的话你就学不会编程。

第一阶段如下,学生必须经过亲身写代码,体会解题过程中出现的实际问题;第二个阶段必须好好体会亲身所犯的错误,并且学会克服他们。这其中,调试、错误处理,还有学会将大问题分解成小问题,从最小的组件来编程是非常重要的。

 

问:我们经常批评我们现在的C++教育不够现代、不够科学,您是通过“深度优先法”来教授学生的,请再简单谈谈您的教学方法和传统方法在理念上的不同?

Bjarne传统的教授编程的方法是不行的,学完一些课程的学生写不出很好的代码。说得更激进一点,他们甚至不知道什么是好的代码。我的方法可以避免这种情况发生。我已在300名学生身上实验成功。

对于程序员来说这是非常关键的——包括新程序员,了解基本概念和基本技能,但仅仅了解程序设计语言的基本构造是不够的。另一方面,如果没有一种编程语言我们就不可能教授编程的技能和规则,因此,对一种语言工具充分掌握,做尽可能多的练习是必需的。

很显然,这种教育问题不仅仅局限于C++语言。我的方法可以应用于任何其他语言。

面向金钱还是面向对象

既然请C++之父来谈编程,就没有办法回避面向对象这个有趣的问题。C++正是和面向对象有着非常紧密联系的语言,作为一种非商业化语言,他已经影响了世界范围内数十亿美元的设计决策。让我们来看看C++之父对这些问题的看法。

问:有人说Java是纯粹面向对象的,而C#更胜一筹,而还有很多人说它们纯粹是面向金钱的。以您之见呢?

Bjarne我喜欢“面向金钱”这个词,还有Andrew Koenig的说法“面向大话”我也喜欢。C++可不面向这两个东西。对这点我还想指出,我认为纯粹性并非什么优点。C++的优点恰恰在于其支持多种有效的编程风格(也可以说是多种思维模型吧)及其组合。最优雅最有效也最容易维护的解决方案常常涉及到一种以上的风格。如果一定要用吸引人的字眼,那么可以说C++是一种多思维模型的语言。

在软件开发的庞大领域,需求千变万化,起码需要一种支持多种编程的设计风格的通用语言,而且很可能需要一种以上呢。再说,世界之大,总容得下好几种编程语言吧?那种认为一种语言对所有应用和每个程序员都是最好的看法,根本就是荒谬的。

 

问:您对面向对象是怎样理解的?它是不是一种好的可接受的编程思考方式?有没有学习OO必须的有用的工具?

BjarneOO技术在现在的软件发展中扮演了非常重要的角色,但并不是唯一的方法。象泛型程序设计(generic programming),用C++ 模板也是另一种方法。这些方法必须通过综合应用才能创造出:一流的、最可读的、最易于维护的、最高效的程序。但没有任何一种方法是适合所有要求的。

我主要用C++来编程。我觉得C++是一种学习和实践OO思想很好的编程语言。

问:大家都在谈论数学和计算机科学的关系,能否谈谈您的看法?

 Bjarne两者并没有很强的直接联系,但是有一部分编程的实质包含在里面---像学数学一样,编程有时也需要很严密的思维。自从古希腊以来,数学就被用来训练人们的逻辑思维,并且我觉得如果不用数学的话很难想象怎样才能编出好程序来。当然也有一些计算机领域,用到高深的数学知识。然而,这些领域通常是非常专业的。

数学,特别是数学思维是计算机科学的一个支柱,经验主义是另一支柱。通过观察和测量来帮助理解实际的发展,用以调整我们的系统和行为,两方面我们都需要。计算机科学不是仅仅用来证明定理的,也不是仅仅用来收集数据的。为了有效地实践计算机科学和发展高质量软件,更同时需要数学和经验的训练。


赵玉勇 2011-02-23 06:01:31

[新一篇] 精英也如此犯傻 IT精英們不斷上演的十大傻事

[舊一篇] 我希望四年前就有人告訴我的事情
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表