学习C++

  在学习C++时,最重要的事情就是集中关注概念,不要迷失在语言的技术细节中。学习语言的目的是成为一个更好的程序员;也就是说,使自己在设计和实现新系统时,以及在维护老系统时,能够工作得更有成效。为此,对于程序设计和设计技术的理解远比对细节的理解更重要,而这种理解的根本是时间和实践。

  C++支持多种不同的程序设计风格。所有这些的基础是强类型检查,大部分的目标都是要获得一种高层次的抽象,以直接表达程序员的思想。每种风格都可以在有效管理时间和空间的情况下达到它的目的。来自别的不同语言(比如说C、Fortran、Smalltalk、Lisp、ML、Ada、Eiffel、Pascal或者Modula-2)的程序员应该认识到,要想从C++中获益,他们就必须花时间去学习,以使适合于C++的程序设计风格和技术真正变成自己的东西。这一建议同样也适用于那些熟悉C++早期的和表达能力较弱的版本的程序员。

  盲目地将一种在某个语言中很有效的技术应用到另一个语言,经常会导致笨拙的、性能地下的和难以维护的代码。在写这样的代码时也会备受挫折,因为每行代码和每条编译错误信息都在提醒程序员,正在使用的这个语言是与“那个老语言”不同的。你可以用Fortran、C、Smalltalk等的风格写程序,可以在任何语言里这样做。但是在一个有着不同设计哲学的语言里,这样做既不愉快也不经济。每种语言都可以是如何写C++程序的一个丰富的思想源泉。但是,这些思想必须转化为某种能够适应C++的一般结构和类型的东西,以便能够有效地出现在不同的环境中。去颠覆一个语言的基本类型系统,可能得到的至多是伊皮鲁斯式的胜利。

  C++支持一种逐步推进的学习方式。你学习一个新语言的方式依赖于你已经知道些什么,还依赖于你的学习目的。并没有一种适合于所有人的学习方式。这里假定你学习C++是为了成为更好的程序员和设计师。这就是说,假定你学习C++的意图并不简单地是为了再学一种新的语法形式,要去做某些已经习惯的事情,而是想学习一种构造系统的新的更好的方式。这件事只能逐渐完成,因为获得任何有意义的新技能都要花时间,需要经过实践。请想一想,要学会一种新的自然语言,或是学会演奏一种新的乐器要花多少时间。成为一个更好的系统设计师可能容易一些,也可能快一些,但绝不会容易到或者快到大部分人所希望的那种程度。

  正因为这样,你将要在还没理解所有语言特征和技术之前就去使用C++---常常是去构造实际的系统。通过支持多种程序设计范型(第2章),C++支持在不同掌握程度上进行生产性的程序设计。每一种新的程序设计风格将为你的工具箱增加一种新工具,而且每种风格本身都是有效的,每种都能提高你作为程序员的效益。C++的组织方式使你能大致线性地学习它的概念,并在学习过程中不断得到实际收益。这是非常重要的,因为这就使你得到的利益大致与你付出的努力成比例。

  有关一个人是否应该在学习C++之前先学C的问题存在着长期争论。我坚定地认为最好的方式是直接学习C++。C++更安全,表达能力更强,而且减少了关于低级技术的需求。在你已经掌握了C和C++的公共子集和某些C++直接支持的高级技术之后,你会更容易去学习C中那些更诡秘的部分,而需要它们只是为了弥补C中高级功能的缺位。附录B是一个指南,可以帮助程序员从C++走向C,比如说,去处理那些作为遗产的代码。

  存在着一些独立开发和发行的C++实现,有许多的工具、库和软件开发环境可以使用。成堆的教科书、手册、杂志、通信、电子公告板、邮件列表、会议和课程不断通知你有关C++的最新开发情况,有关它的使用、工具、库和实现等。如果你计划去认真地使用C++,我强烈地建议你去查阅这些资源。任何单独的东西都有其重点和倾向性,所以请参考至少两个来源。例如,参考[Barton,1994]、[Booch,1994]、[Henricson,1997]、[Koenig,1997]、[Martin,1995]

🔚