请见
c++ faq - The Definitive C++ Book Guide and List 这个经典的书单上面的第一本。我一直不明白人家外国人可以把这个作为第一本书入门,为什么中国人就不建议初学者把它作为第一本书看呢,英文不好?有
中文版 啊。觉得翻译的不好?天天在知乎上受
@Milo Yip 、
@vczh 等大神的熏陶,而这本书就是他们审校的啊。为啥不先去看看呢。
另外,据我所知,
@script Newil 提到的那个repo的作者也是通过此书入门的(严格意义上讲,我也是)。为啥总有人非要挑三拣四的呢。非常好奇。
我没啥资格说怎么用好,但有些教训倒是可以分享下:
- 你买的英文版,挺好。我以前总是通过各种中文版的书学C++,很多名词之间的区别都是含含糊糊的,譬如变量和对象,管某对象也叫变量行不行呢?管匿名对象也叫匿名变量行不行呢?从中文的角度来看好像也无可厚非,反正意思差不多嘛。这种例子很多,但其实很妨碍你在Stackoverflow上问问题,名不正则言不顺,试试提问说个anonymous variable?保管一大堆老外给你挑刺。而更关键的是,你会很容易放弃深入思考这些名词之间的差别。一上来就从英文版学起,就天然避免这些问题。有种根正苗红的感觉。(上述内容在2.2. Variables就有说明)
- 别当成案头书,花功夫完整的看完一遍。我以前就把各种大砖头作为案头书,用到的时候在看呗,一直这么想。结果呢?就是解决问题总是要比别人花更多的时间。究其原因,是我总需要去一遍又一遍的复习基础知识,总想着多看几遍就记住了。结果呢,还是反复在看。要知道,学编程语言不是背语法,记住语法有用吗?c++11又多了好多语法,c++14也出来了,又去记?真的是一辈子“学C++”吗?这种办法学编程,换种语言就嗝屁。完整的看一遍书的意义在于理解这个语言的思路,为什么要有这种语法,为什么c++11要引入新的语法机制?为什么引入类,为什么引入模板,范型?看完书,就能够理清楚这个思路,把握一个脉络。遇到问题,就能够迅速抓到关键,不去纠结那些语法细节。
- 做习题,别以为看懂了就万事大吉了。我以前从来不看习题,或者就是扫一眼,觉得应该会,就放过去。其实这是大忌,习题是检验你是否掌握核心知识最好的工具。看完一小节,把书扔一边,认真写出每一道题的答案,你就会发现你到底是不是真的掌握。别笑,我经常看到某些概念分辨题,不知所措,觉得很显然,但就是说不清。这就是没掌握。习题的另一个功效就是,可以帮助你摆脱牛角尖。我曾经看书看的过细,好像一本书就能把整个C++的诸般神技都能讲到似的,这样的后果就是:停滞不前,看不下去。典型的:“想的太多,看的太少”,其实很多面对初学者的疑问,看到后面就引刃而解了(如新手如何阅读《C++ Primer》?里面,这哥们读了几页就开始纠结this指针了)。如何让自己别想太多呢?习题。只要习题没涉及的知识点,完全可以跳过去。
- 善于利用stackoverflow,请看习题答案 及 StackOverflow上的讨论 ,这个技巧被很多人忽视(包括我)。首先你能提出问题,而在SO上不被vote down,表示你深入思考了;其次SO上的各位大牛,面对基础题,几乎都是抢答,你只需狂按F5,然后慢慢消化他们的评论及答案就好了,他们的只言片语,能够让你学到本书以外的很多东西,如编码习惯,一些术语(jargon)等等。而且讨论本身就会很自然的让你记忆的更加深刻,实在是有诸多好处。
我说的啰嗦,但都是我的血泪史,人蠢真是没办法。。。你尽量少走些弯路吧。
最后说可能有的疑问:
- 看不下去?你也看到了,最上面那个书单里,这本书是第一本,如果都看不下去,请直接放弃C++。
- 看完我会很牛逼吗?请见这个答案:认真学完 C++ Primer 后,C++ 语言到了什么水平?恭喜你,已经入门了,但仅仅是入门而已。
======
更新:
- 评论里有人不知道中文版的审校都有谁,封面右下方就有嘛。其实还有一位非常有名但不怎么上知乎的: @刘未鹏
- 有人提到第四版,第四版和第五版区别还是蛮大的,连章节都有点对应不上了。第五版着重介绍 C++11 的理念,长远来看,这些很值得了解的。从我个人来讲,四、五版都有,曾看完第四版,但再看第五版的时候,还是感觉在看一本新书。如何选择,自己权衡,反正开卷有益。