看孟岩对C++ PRIMER第四版所写的书评

    很多人可能还记得2002年C++ Primer第三版在国内计算机图书市场上创造的辉煌成绩,当时这本书在价格相对较高的情况下仍然受到了广大C++学习者的热烈欢迎。几年过去,相信已经有不少读者通过这本书掌握了C++基础语言。在日常的程序设计实践中,该书也是相当出色的参考手册。关于C++语言本身的各种问题,几乎都可以在这本书里找到答案。全面,被认为是C++ Primer的特色。但事实上,第三版不是一般的全面,其全面和详尽的程度不仅大大超过了一本名为“Primer(入门)”的图书所应该达到的程度,也远远超过前两版的水平。之所以会如此,实际上有深层的原因。

    C++ Primer第三版写作时,C++语言ISO标准已经落定。人们在等待了很长时间之后,似乎终于可以喘口气了。但是当时在C++社群里发生的很多事情表明,这部厚厚的语言标准里蕴藏着某些东西,使得整个社群不但不可能在其基础之上稍事休憩,反而还有可能迈入一个新的,或者激动人心,或者是兵荒马乱的变革时代。当时很多人已经认识到,标准C++的出现将带来C++编程风格的一次激烈变化,但是究竟会发生哪些变化?会对C++的其他方面产生怎样的影响?这些影响中哪些是经得起考验的?那些不过是那浮云?特别是,新的C++风格将给C++教育和C++图书的编写方式带来怎样的冲击?这些在当时都是无法预计的。传统的思路依然行之有效,新的变革却已经呼之欲出。那些必须讲解,那些可以抛弃,当时还不清楚。为了维系C++ Primer的“光荣传统”,只能是兼收并蓄,言无不尽。因此,Stan Lippman不得不把C++ Primer的第三版写成一本真正的“巨著”。他必须要在这本书里包含当时处于变革过渡状态下的C++的全部基本内容,必须既按照传统的思路来讲解C++基础知识、底层细节,又充分突出标准C++的新组件、新特色。这种做法的结果,C++ Primer 3/e的篇幅空前巨大,内容覆盖非常全面,然而其教学思路却体现出一种过渡时期不得以的犹豫不决。这种犹豫不决,直接表现为整本书在技术层次上全面而缺乏重点,高层技术与低级细节交织在一起,在风格上缺乏鲜明的倾向性。从正面看,Stan Lippman的这种保守做法保证了该书书的全面性传统,使得第三版成为极佳的使用手册。而从负面看,作为一本教程,这本书就远不是无可挑剔的了,至少其内容远非精炼,教学思路远非清晰。因此,这本书出版以来,在国外C++社群中的形象并不是一本教程,而是不折不扣的案头参考书。其结果,虽然无论是在语言使用上相对求稳的Douglas C. Schmidt,还是比较激进的Bjarne Stroustrup、Francis Glassborrow和Andrew Koenig,在向初学者推荐C++教程的时候,都没有把C++ Primer 3/e列入其中。相反,Andrew Koenig和Francis Glassborrow分别写了Accelerated C++和You Can Do It!,以表达自己对于新时代下C++教学思路和风格的观点。就连Stan Lippman本人也意识到这个问题,并写了一本Essential C++来弥补。

    让我们看看从那之后发生了什么。2001年,Andrei Alexandrescu的著作Modern C++ Design刷新了人们对于template能力的认识。稍后,Boost库开始成形并产生影响,逐渐将template在泛型和模板元编程方面的能力发挥到极致。大约在2002年,Bjarne Stroustrup意识到不必要地滥用template会严重地影响C++以应用为本的发展方向,于是通过自己主编的C++ In Depth系列开始予以矫正。类似Applied C++这样的实践型作品,在技术风格上虽然还有附庸风雅之嫌,但已经平易务实了很多。而Bjarne Stroustrup将C++ Network Programming列入C++ In Depth系列,无异于在事实上认可了ACE的务实主义风格。这种努力见到了明显的效果,在2003年之后,Boost库中新增的组件越来越务实,而近几年比较流行的C++专业图书,也多以实用性和领域知识制胜,而不再追求纯粹的语言技巧。我们从标准委员会先后提出的C++性能报告和C++ 0X TR1也可以看出,标准委员会对于纯粹语言技巧上的创新持审慎态度,而对于真正有益于提高生产效率的改进则不遗余力地予以支持。整个社群对于C++编程风格的讨论,也越来越趋向理性和务实。自动内存管理机制的必要性得到广泛的认同,Boost中一些风格和做法受到批评,对Python、Lua等脚本语言的态度也趋于友好,而过去一直背着“保守”和“异端”这是经过了长期的实践,总结了正面和反面的经验教训之后,整个C++社群做出的务实选择。

    C++ Primer第四版就是Stan Lippman在这样一种务实的气氛中,与合作者Josee Lajoie,Barbara Moo共同推出的。而且这次新加入创作团队的Barbara Moo,是C++大师Andy Koenig的夫人,Accelerated C++和Ruminations in C++的合作者,对于新风格C++的讲授有着充分的经验。本书整体思路的一些变化,显然受到了Barbara Moo的强烈影响,篇幅相对于第三版,已经大为精简。这主要是因为作者已经清楚地知道C++发展的必然方向,从而也就明白哪些内容不再必要,敢于大规模地精简。随着内容的精简,该书所倡导的C++风格也变得明晰起来。细心的读者会发现,第四版中把标准库中的string和vector放在数组和指针之前讲授,在第一部分的随后章节中,标准库的应用渗透其中,其意图在于让初学者首先建立标准库组件的概念,培养他们“以标准C++为母语”的自觉,这种做法对于年轻的C++初学者,应该能够产生巨大的示范意义,让他们能够在直觉之下写出更为安全和清晰的代码。

    更值得注意的是本书中对于“类”概念的讲述线索,可谓匠心独具。类作为C++表达概念的主要手段,在第二章中就开始讲授,随后才介绍各种语言要素和控制结构,这是为了使读者建立以类为中心的概念。然而有趣的是,本书并不像一般C++教程,在介绍类的基本概念之后急迫地介绍作为抽象数据结构的类,进而介绍面向对象程序设计,而是在基本语言元素讲述完毕之后,就进入标注库组件的全面介绍,这种体系可谓是前所未见,相当大胆。在介绍标注库之后,才回到基于对象级别上的类,接下来才是面向对象和泛型程序设计。我认为这种次序正是体现了几年来对于C++应用方式的反思结果,即:以类为中心,以标准库为基本设施,强调基于对象层次上的务实技术,而将面向对象和高级泛型编程作为提高内容。而全书收尾的第五部分,其主题已经涉及到C++语言中最为晦涩和容易出错的部分,绝对是“拔高篇”。这样一来,全书在技术上的层次感就非常分分明,与第三版形成了鲜明的对比。

    正因为C++ Primer第四版的这些变化,使得这本C++的经典著作重新恢复了教程的面貌,并且成为新时代C++程序设计风格的一个出色的注释。我相信,新一代的程序员,通过这本书来学习C++,可以形成更清晰的概念,建立更正确的直觉,形成更务实的风格,少走一些弯路和极端。而对于老手来说,这本书跟以前一样,还是出色的手册,而且在内容组织上条理更清晰。

    这几年来,C++的应用领域有所缩小,而相比之下,C++开发者的数量下降就更为迅速。事实上,而国际上高水平C++开发者相当紧缺,很多关键领域对于C++开发者的需求还是非常大的,这种语言的独特优势使它仍然具有良好的发展前景。希望C++ Primer第四版能够帮助更多的初学者迅速成为合格的C++程序员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值