C++ Primer的本书书评
(1)优点:作为最经典的一本C++入门书籍,其最大的优点就是内容全面,遵循标准,讲解细致。C++语言的所有基础知识在这里都可以一览无余。在作者极其细腻的笔法下,C++这头猛虎变得不再可怕。书中不仅教你C++语法,也教你怎么写程序(当然只是初级的层次)。很早就引入C++标准库是书中的一大特色,也许刚开始作为初学者会觉得有点失措(注意知识本身并不难,因为流和容器的概念本身并不难理解),但作者这样安排无非是向你传达这样一种观点,即学习语言是为用它来写程序,而不是成为语言专家。这是我们学习任何计算机语言最基本的原则(当然搞计算机语言研究的学者除外)。有人说这更像一本C++编译器参考手册,这我不敢苟同。众所周知,C++是一门难学易用的语言(候捷语)。难学是因为C++语法本身很复杂,功能很强大,支持的编程范式也很多,每种语法糖又有很多特例和不推荐使用的设计风格,因此对语法的介绍必须细腻全面,只是要注意介绍语法糖时要以写程序为目的,而不是为了语法而语法。作者时刻让你知道,每种C++语法都有何用处,应该怎么用。而易用则是因为C++标准库(特别是STL)设计得非常优雅,抽象程度非常高,非常好用,用起来简直就是赏心悦目。三个核心概念容器、迭代器、算法对于一个有计算机学科基础(如数据结构和C语言基础)的人来说并不难理解。另一方面,即使标准库中没有你要的东西,只要你的C++基础扎实,凭借它强大的表达能力(可以肯定地说,C++是所有语言中表达能力最强的),要设计出抽象程度高的库来并不难。
(2)缺点:笔法细腻经常会带来另一个后果,那就是语言啰嗦。我在阅读时经常感叹,为什么很简单的一个概念要说得这么哆嗦呢(与中文翻译无关,我看了英文原版就是这样),有时还要重复几遍。整本书阅读起来还是比较累的,很多东西我感觉用一句很简单的话就能解释清楚,然而在作者的笔下说得却很烦。可能是作者为了照顾初学者,但照顾初学者也不应该失去语言的简洁性,书中很多简单的东西写复杂了。整本书的语言中规中矩,不够生动,相比Scott Meyers的effective C++的语言风格,那就差远。技术书籍读起来本来就比较枯燥,所以我觉得语言风格也蛮重要的。另外,作者是用一个例子来串起整本书的,但这个例子我感觉又不够完整,并没有让读者形成一个清晰的软件设计图景。其实我不太推崇用一个例子串起整本书的写作风格, 这样章节之间关联性会很强,而且一个例子一般不能解释整本书的所有问题。 相反,多个例子则能让读者丰富知识面,也能够把概念或问题解释得更清楚。
(3)学习建议:最好在两个月内读完,我是一个月内读完的。那本习题解答的书籍不能少,书中的每一个习题都不要放过。虽然不一定要求每个题目都要自己做,但至少也要在习题解答书上看看人家怎么实现的。写不出代码来就多看看人家的代码,并模仿、动手、思考,这样往复循环,提高就会很快。一定要树立这样的观念,写程序是学习语言类书籍的核心,实际上对Computer Science来说动手与动脑同等重要。书中的附录也不要放过,这么经典的书籍(而且经过了几个版本的垂练)最好每一页都不要放过。一旦你仔细地把整本书都啃完,你就会有拨云见日的感觉,哦,原来C++就是这样的,你也会发现自己的功力大增。
(4)需要的基础:很多人说这本书不适合C++初学者,我不同意这种观点。人家国外的程序员都用它入门,我们为什么就不能呢?很多人可能是受谭浩强的书籍的影响,认为那样的书最适合入门,这没错。事实上这本书也完全拥有谭浩强的书籍的特点,而且比它还全面,既可以做C++入门书籍,也是资深的C++程序员不可或缺的参考书。中国人学习总让人感觉喂饭似的,需要别人一口一口地喂给你吃,而且还不能太多,生怕咽着;又不能太少,少了又抱怨,这不能不说是一种悲哀。学习本来就是一个探索的过程,没有探索哪来的乐趣。
我觉得只要你有程序设计的基本概念和算法的基本思想(如C语言和数据结构的基础),就完全可以学习这本书,当然如果你有面向对象的基础,或者有面向对象语言的经验(如Java或C#),那看这本书就非常轻松了。