咨询培训 著译作品关于荣耀 Bjarne Stroustrup 网络资源 浣石山房在路上 联系站内搜索首页

Bjarne Stroustrup

Bjarne Stroustrup谈C++教学

荣耀 张成 译

www.royaloo.com

//: 您离开贝尔实验室接受德州A&M大学的职位,与好奇的大学生共处。这是多久前的事情了?为何作此选择?

Stroustrup: 我三年多前离开新泽西州来到德州。

学生们没有好奇。教学是我去学术界的原因之一。如果不去教学,我可以留在AT&T实验室,我在那儿的工作是全日制研究。我认为经过25年多的研究和应用后,有一些自己的东西值得传授给学生。不幸的是,普通教授从未对他们的说教进行实践,有时这会削弱他们所传达的内容。

到了该改变的时候了。今天有多少人能25年如一日地从事一项工作呢?这是最富变化的“工作”,实际上,我还在做它的一部分,因为我并未彻底断绝与AT&T实验室的 关系(他们不允许:-)),因此,我的项目还在继续。学术界在很多方面和业界不同,有些是好的,有些则不太好,但这是不同的,“不同”就是刺激。

德州A&M大学是目前少数几个在质量和数量正处于大发展时期的主要大学之一。例如,今年我们计算机科学系聘了4个新的助理教授。你可以看到并感受到系部正在迅速改善。很高兴能成为这个不断发展壮大的团队的一分子!今年,我与同事在POPL和OOPSLA都有发论文,无论如何,写论文在学术研究中的地位要远比在业界重要。

//: 您教什么样水平的学生?

Stroustrup: 我教新生和研究生。目前,我以C++0x为案例教研究生实用语言设计技术。在此之前,我集中于分布式编程(包括CORBA、.Net以及J2EE)的软件框架。我认为研究生了解很多关于计算机科学的知识,但对构建高质量的软件缺乏理论和实践。例如,他们往往只知道自己用的算法、数据结构以及机器架构等,但不知道如何结合运用这些学术领域的知识,构建有着现实软件规模的可维护的、性能良好的软件。

所以,我打算教授新生一些设计和实现软件的更有效的途径(基础知识)。在富有经验的同事的帮助下,我已经教了工程学新生第一门程序设计课,从今年秋季开始该课程将成为计算机科学 系新生的标准入门课。

我们正在彻底修订本科课程表,我预计研究生课程也必将加以修订,从而与本科课程表保持匹配。

//: 您从观察学生学习C++中有何心得体会?

Stroustrup: 他们很聪明,但被错教了。在中学里他们所受的训练远远多于受到的教育,对于如何在今天的世界取得成功,他们被灌输了不切实际的想法。大多数人认为做得好就是反馈信息,能够计算出同类问题的答案(之前看过很多类似的问题)!看上去,对答案的现实探寻工作,以及从部件合成为系统,对于大多数学生来说实在是太新奇了。大多数聪明的学生(大多数工程 学学生在自己的班级里都名列前茅)发现在中学里很容易获得成功,而令他们感到惊讶的是,在大学里做了更多、更聪明的练习,成绩也不过平平而已!

虽然这些与C++关系不大,但是教新生重要的一点是重新调整他们对自己所需掌握技能的预期。如果我们没有能够让他们得到成长,无疑将会给他们带来严重的伤害。

幸运的是,很多聪明、充满抱负的学生,看上去深受新挑战和新培养方式的激励。

//: 这影响了您对C++的思考以及C++的未来发展吗?我们能看到标准语言和库的什么变化,是因为受到你在教学过程中心得体会的影响?

Stroustrup: 我的看法并没有根本上的改变,但一些看法得到了加强。我认为C++已经变得过于“专家友好”了,为教学带来了不必要的困难。我希望C++0x能消除一些不必要的复杂性,但这 个任务太艰巨,因为标准委员会中每一个有投票权的都是某方面的专家,其注意力自然而然会集中到那些对专家有利的语言和库的特性方面。我不断地试图将他们的注意力拉回到初学者——“各种背景的初学者”,因为只要我们持续学习,我们在 某些方面必然都是初学者。

关于具体的例子,可以参考“C++0X概览”

//: 目前JAVA在大学课程中很流行,这种境况有无改变?具有C++知识的大学毕业生会不会越来越少见?

Stroustrup: 我没有经过全面的观察故无法肯定地回答这个问题,不过似乎大多数学生都具备一些C++知识。C++在性能要求(时间或空间) 严格的地方,或JAVA与机器的距离成个问题的领域,仍然占据统治地位。我已经发现一些学校最近转为教授C++,而且很多嵌入式项目(主要是在业界)也转向使用C++。C++程序员明显短缺,部分原因是需求在增长,并且C++教学(无趣的PC题目)与C++使用需求增长的领域(耗神的、大规模、高性能、高可靠性的应用)不匹配。

在我的主页可以看到一个简短的C++应用清单

有趣的是,我们(我个人和TAMU计算机科学系)接收到来自业界(有名的公司)大量的请求,要求增强对软件开发技能的关注,强调培养学生接近硬件编程的技能。这当然指的是C++,我渴望这意味着使用现代C++,而不是“华丽的”以C风格表达的汇编代码。

//: 市面上有大量的C++专业书籍(其中包括您写的或编辑的),但是C++教科书就少很多了。对于现有的C++教科书您有什么看法?您的课堂上使用什么教材?将来我们能看到由Bjarne Stroustrup写的教科书吗?

Stroustrup: 我对当前针对C++初学者的书籍(Francis Glassborow 和 Koenig&Moo写的书是个例外,而且它能满足市场)没有什么印象,所以,我不得不从头准备程序设计入门课程的材料。当然,我使用C++。在经过几百名新生几年的实地试验后,这些材料明年可能会成为可用的教本。

我将我的做法称为“深度优先”。其目标是尽可能快地开始编写现实的代码(如第6周就涉及文件处理,第8周就开始进行图形用户界面编程),同时强调正确性和可维护性。

我们教授STL的基本用法、实现的基本原理和一般性原则。

在这个迅速变化的时代,基础知识是最重要的,因为基础知识的变化最少。

//: 您认为谁撰写了莎士比亚的经典名著?

Stroustrup: 没想法。我不是一个真正的莎士比亚迷。相较而言,我更喜欢历史。不妨尝试世界上最古老的博客。

-完-