十年以来,Bjarne Stroustrup在不同的场合多次表示过,C++最大的弱点就是它的教学,因此,他许诺要亲自写一本教授C++的书——不同于The C++ Programming Language那样的、真正面向学习者的教程,来正本清源,以一种他认为正确的方式来教C++。《C++程序设计原理与实践》这本书就是他实现诺言的作品。
这本书并非零起点,对于完全没有编程基础的人来说,恐怕并不适合。从技术点的组织来看,也是一如Bjarne Stroustrup一直以来的风格,以一种娓娓道来的方式分布在书中各个地方。光看目录,你很难知道他会在哪里讲到什么技术点。但如果读者有一定基础, 知道编程是怎么回事,然后愿意以从头到尾细细品读的方式来学习C++,那么这本书应该是不错的选择。但知识点的分散也有很大问题,也不是所有人都有那个耐 心从头到尾精读,所以这本书也不能取代其他一些经典的C++书,比如可以当字典查的C++ Primer和The C++ Standard Library,比如可以当博客读的Effective C++。但是有了这本书以后,学习C++的时候确实可以拿它当主干,其他的作参考和补充。
为什么这么说呢?因为C++这个语言有个大陷阱,就是存在很多诱惑和可能性,很容易让学习者早早就走到那些有趣的底层细节和奇技淫巧上,只见树木 不见森林。比如你在一个类的设计阶段就在考虑是否要让它的某个成员函数内联,或者本来要设计一个类,然后动手时成了一个模板类,重构时变成了一个多参数模 板类,这都是疑似坠井的信号。实际上以今天C++语言的成熟程度来讲,绝大多数情况下,程序员可以依赖高级的基础设施完成工作,只在非常罕见的地方需要用 到高度技巧化和底层化的技术。因此,按理来说,一个C++学习者也应该是先掌握这个语言的主体部分,然后才在必要的情况下进入细节的学习。这个应该是正 途,也是这本书采取的思路。这本书讲授C++的最大特色,就是把C++当做一个真正高级的语言去讲,从头至尾充分调动了C++标准库以及其他高级的基础设 施。全书处理的非常平和,看不到技巧的炫耀和故作高深的叫卖,一切看上去都挺自然的。从C++自身的发展来讲,这本书的出版,标志着C++教学度过了长达 20年的青春期,进入了成熟期。
然而,就现实而言,这本书恐怕是来得太晚了。且不说C++的应用领域较之十年前已经大幅度萎缩了,即使是仍然在使用 C++的领域里,也早就充斥了大量的传统遗留代码。这些传统的存在,强迫你必须按照奇技淫巧的方式来撰写你自己的代码,无论你多么不情愿。所以我不认为这 本书,以及C++0X的标准能够总体上改变C++应用的现状。悲观点的说法是,C++到死,也就是这个样了,难以有大的改观。但是如果有人还是以很认真很 严肃的态度来学习C++,也能够有机会在一些领域来做一些全新的工作,这本书应该是可以好好读一下的。
很多人可能觉得C++不行了,我相信在未来一段时间里,C++还有一定的用武之地。云计算兴起之后,服务端的竞争可能还会使得C++在某些领域复 兴,所以C++还是可以学一学的。C++这个语言最好也是最差的地方,就是它万金油,怎么写都能工作,好多种风格都支持,你用着用着总会有个好恶。比如对 我来说,C++这个语言最强的地方在于它的模板技术提供了足够复杂的程序库开发机制,可以把复杂性高度集中在程序库里。做得好的话,在应用代码部分我连一 个for循环都不用写,犯错误的机会就少,效率还不打折扣,关键是看着代码心里爽。那么它最烂的地方是面向对象基础设施,简直不入流,根本不配称为面向对 象语言。从高的层面来讲,C++可以写组件,但是想做周全了挺麻烦的,算不上好的组件语言。从底层来说,C++跟C差不多是完全兼容,狗急跳墙了,我可以 回去写C代码。别人可能有不同的看法,不过有一点经验的人,对于C++的长长短短多少都会有个感觉、有个偏爱。但是我现在觉得,用C++,最重要的一条, 就是心态平和,别较劲,别非要让程序统一到某个你最信仰的风格下,更不用为此花一大堆精力去攒包装(wrapper),什么直接就用什么。你写程序时第一 个想到的路子,也就是你读程序时最容易理解的路子。用始皇帝张艺谋的话说,就是手中无剑,心中也无剑,就是不杀,就是和平。以前的C++程序员们,多少都 有些杀气,有嗔念,要走过很久才回得来。也许这本书能够帮助后来者比较快地获得一颗平常心?没准儿。至少我希望是这样。