[转]给C++初学者的建议和推荐书目
今天早上搜索我的书的时候无意看到的一篇东西,不知道是哪位前辈写的。虽然放在这里有为我的书“做广告”的嫌疑,但是我觉得这篇东西的内容和评论对广大初学者来说还是具有一定参考意义的。同时,正如这位前辈所说,我的书还是存在着一些缺陷,他/她给我的建议也很中肯,在此表示感谢!我一定会好好策划第二版。以下正文:
————————————————————————————
给C++初学者的建议和推荐书目
看到网上有不少想要学些C++的朋友在问看什么书比较好,群里面的网友也经常问我,到底看什么书才能入门。我一直说,能让你们入门C++的书有很多,但是要根据自己的情况而定。大家的基础不同,受过的教育不同,天赋不同,任何一本书都有它的定位,不可能人人都合适。所以我决定以一个过来人的身份,花一点时间把大多数热门的C++入门书介绍一下,希望能对各位C++初学爱好者有一些帮助。如果有说得不对的地方,也请各位指教。
钱能著,C++程序设计教程:http://www.
这本书比较古老了,99年写的,很多大学里用这本书做教程。应该说,钱能老师在C++教育教学方面也走在很前面,这么多年来想必是积累了不少的经验。这本书基本上把C++的语法基础和概念基础都涵盖了,而且条理也比较清楚。但是与大多数教科书一样,这本书的内容还是显得比较枯燥的,很多概念并没有着重地去研究分析。所以,这是一本好教科书,但是并不适合各位自学的朋友,特别是一点基础都没有的朋友。如果你以前学过C或者VB,那么这本书还是可以考虑一下的。
钱能著,C++程序设计教程(第二版):http://www.
这本书是2005年出的,当初我还特意去买了一本看看。相对于第一版来说,改进还是蛮大的,比如程序代码更符合标准,介绍的内容更为全面。同时,也看到了不少有趣的语言和比喻,我个人认为这个版本的书越来越像外国人写的书了。但是这本书也有个很严重的问题,内容之间互相穿插。其实C++很多知识本来就是相互穿插的,但是读者学习的时候只能按照一个路径学习,否则就会很晕。所以,我认为这本书比较适合已经基本掌握C++的朋友当参考书看,要靠这个自学基本上很难。
谭浩强著,C++程序设计:http://www.
大家对这本书的褒贬不一,分歧比较严重。我虽然没有通读整本书,但就阅读的几个章节发现了问题。首先是文辞的问题,我觉得这本书实在太枯燥了!要知道对于自学C++的人来说,没有兴趣就是没有希望啊。正如网上众多网友评论的,这本书也只能做做教科书了。其次是篇幅的安排。我觉得这本书对于面向过程和一些流程控制语句的介绍单薄了一点。C++的面向对象固然重要,但是流程控制毕竟是所有语言最重要也最难掌握的东西。在我这里有很多朋友,都说自己能看懂程序但是不会写程序,原因就在于此。
潘嘉杰著,易学C++:http://www.
最近这本书很火,据说是上海的一个大学生写的C++教程。我在CSDN上找到了电子版的片段,第一感觉就是,这的确是一本给零基础初学者的好书。很多对初学者有用的细节在那本书里面都有介绍。(很多网友看了钱老师或谭老师的书问我,怎么创建一个C++的程序,怎么调试之类的。)从语言上来说,也是比较生动活泼的,让很多没有概念的朋友一看就能理解。我推荐了几位群里的朋友去看,他们都反映很好。不过这本书也有缺点,就是讲C++讲得不够深入。虽然C++的主要和重要内容都有,但要靠这本书学到很完整的C++是不太可能的,所以如果你有别的语言基础,就可以不用看这本书了。如果你没有任何语言的基础,那么这本书是较为合适的。我看到作者说打算写第二版,如果作者有幸看到我的这篇文章,也考虑采纳下我的建议,我很看好这本书。
潘爱民译,C++ Primer第三版(中文):http://www.
是不是因为这本书名字里面有个Primer(入门),所以就有很多朋友就把这本书归类为入门书了呢?很遗憾,第三版这本书我完整地看过,但并不觉得这本书适合给入门级的朋友。当然,如果你有别的语言的基础,并且有耐心看完这本书,这本书是不错的选择。从译者的水平来看,第三版的翻译是最自然的。这本书的内容比较全,而且也有很多讨论到C++细节的地方。因此,如果你学过C或者看完了易学C++,那么来看这本书是不错的选择。
李师贤译,C++ Primer第四版(中文):http://www.
与第三版一样,这本书注重细节,但也与第三版一样并不适合初学者。C++很多知识都是互相穿插,并且对读者的接受能力都是极大的考验。在尚未教会他们写一个程序之前,就把指针、命名空间之类的东西交给他们只会成为他们的负担。所以给出的建议也与第三版类似,请看完入门书再来读这本书。
张引译,C++大学基础教程第五版(中文):http://www.
这本书是买完以后才知道原来是个缩水版,里面没有模板等内容。从内容、翻译和细节上来说,这本书的确是一本非常不错的C++书籍,也是一本优秀的国外教科书。特别是一些针对细节的tips,对大家的实际编程都是比较有用的。只不过我对这本书的内容编排顺序不敢苟同,似乎他把面向对象和UML都作为重点放在了书的较前部。正如我先前所说,会读不会编大多是因为没有掌握好面向过程,所以当务之急应该是先教大家能熟练运用各种语句,然后再来讲这些抽象的概念。毕竟光靠这些抽象的概念是什么程序都编不出来的。
裘宗燕译,C++程序设计语言(特别版):http://www.
最后来讲这本经典书。大家都知道这本书的作者是谁吧?C++之父Bjarne Stroustrup。我也不知道怎么会有人推荐初学者去看这本书的。打一个形象的比喻,让C++初学者看这本书就相当于让一个打算学英语的人直接去背字典。China-pub上也有众多的朋友在那里建议初学者不要轻易尝试看这本书。如果说C++ Primer的特点是细节和全面的话,那么这本书的特点便是细节加全面加权威。别忘了作者可是C++之父,没有人比他更了解C++很多地方的动机和原理。裘老师的翻译没有什么大问题,不过就那个“在线函数”和“内联函数”让大家觉得有些别扭。
最后的建议:
学习C++,对于零基础的朋友来说兴趣是非常重要的。如果你选一本超过500页的书来入门,我估计你看到200页左右就看不下去了。这并不是书的质量造成的,而是它给你带来的巨大心理压力。考虑周全的书往往在内容穿插上要花很多的功夫,所以一不小心就让初学者摸不着头脑。在此,我建议没有基础的初学者先去看《易学C++》,对最基础的东西有一些概念之后,再来看钱能老师的《C++程序设计教程》第二版和《C++ Primer》第三(四)版。如果这些都看完了,那么最后再来看C++之父写的《C++程序设计语言》就会比较舒适了。
如果你有过学习C或者VB的经历,那么建议直接去看钱能老师或者谭浩强老师的书。迅速掌握C++的一些特点之后,再去看《C++ Primer》之类的,这样能充分利用你以前学过的相关知识,加快C++的学习速度。
还有如果想在面向对象方面做一些深入研究的,建议去看看UML和设计模式方面的书,这些都有助于让你了解怎么才能运用好面向对象的功能。
最后,感谢大家花那么多时间看完了我的文章,如果有什么不同观点,欢迎提出,如果赞同我的观点,欢迎转贴。