这篇文章实际上是我自己入门过程的总结,一个尽量少废话的C++入门指南。总结完忽然发现像个读书清单?。
具体总结前,想先回答一个问题——要不要先学C,再学C++?
我作为小白时疑惑过这个问题,在此给后来的小白和当年的自己一个答案。
个人看法是,单就学习C++而言,直接学习C++就可以了,不用先学C。在知乎看到轮子哥在微软维护STL的Stephen Thomas Lavavej都说他当年学C++之前学C语言浪费了大量的时间,早知道就直接从C++开始。
很多老的项目是C语言写的,之后的编程生涯多半还是绕不开学C语言,不过那时候你已有C++功底,构不成啥大问题。
因此,这篇文章基本不提C的学习,直接硬刚C++。不赞同的看客勿喷,右上叉叉就是了。赞同的同学可以往下看。
入门
《Accelerated C++》,《Essential C++》二选一精读。《A Tour of C++》选读。
- 《Accelerated C++》很适合新手,因为她只有短短不到300页,在普遍砖一样的入门书籍里面是一股清流。容易通读完,减少挫败感。就这样的篇幅,还能涉及一些标准库的使用,真的很适合入门。
- 《Essential C++》比较适合有其他编程经验的中手迅速学习C++。内容会比《Accelerated C++》深一些。
- 《A Tour of C++》,C++ creator扛鼎之作,适合刚学完、还有学完很长时间以后看,快速复习 C++知识。
主看书的同时,辅以这几个网站的资料,交叉印证——
- C++ 教程:www.runoob.com/cplusplus/c…
- 你好,C++:zhuanlan.zhihu.com/nihaoCPP
- C++入门系列博客:www.jianshu.com/u/67702c00e…
(目的只是印证,别的资料也可以,网上多如牛毛,这里只是贴了我当时看的)
我当初主看的是 Accelerated C++,在上下班通勤等零碎时间就在手机上看辅助部分的资料,看看跟读书的理解一不一样。甚至有时能意识到资料中某些概念的表述不太准确,此刻会发觉自己真的理解了。
这种交叉印证的阅读法,有人问我有什么必要?(看了几个内容可能重叠的资料)。好处有两个,一是能使自己入门时对基础理解的自信更足些;二是,我没见过哪本书或哪篇文章,可以从头到尾完全清晰、毫无歧义的。交叉着看可以让很多理解尽早明晰无误。
完成这一步后,就可以开始上GitHub看点别人的代码,尝试写点代码。
我的话,学了在xcode下新建C++工程,然后参照这几个链接,写了两个计算器和一个学生管理系统。然后开始搬砖了。
计算器1:blog.csdn.net/jiejinquani…
计算器2:www.zhihu.com/question/28…
学生管理系统:blog.csdn.net/qcyfred/art…
入门这一步是最关键的,你初步了解了各种基本概念,并成功书写和运行起了代码,感觉真棒吧。
接着下面介绍的,就是顺利入门以后的广阔大海,慢慢慢慢慢慢慢慢、好好好好游吧。留心,不要急,千万不要抱有直接把后面的内容一口气学完,再开始干活的想法。因为那样要耗费巨量时间且效果不好,况且C++是学不完的,也没有人敢说精通。请一边投入实作,一边保持学习。
系统化
入门后有时间就要阅读些更系统的书。 具体就是《C++ Programming Language》(现在已经有第四版了)和《C++ Primer》二选一精读。之后有时间可以翻翻另一本。
(强调提示 !!!《C++ Primer》和《C++ Primer Plus》不是同一本书的不同版本,作者也不一样。【不建议】看《C++ Primer Plus》)
函数库
到这里你应该跨过了语法障碍了,要开始了解函数库。可以按顺序看看《C++标准库》、《深入理解C++对象模型》和侯捷老师的《STL源码剖析》。
追逐性能与优雅
现在应该对C++算有小小成,可能会对如何写出更好性能、更优雅的C++代码感兴趣,可以继续看《Effective C++》和《More Effective C++》,《Exceptional C++》。
哲学
能坚持到最后这步,你可能快疯了,疯子喜欢问哲学问题,比如C++是谁、从哪来、要到哪去。
尝试读读《C++沉思录》、《The Design and Evolution of C++/C++语言的设计和演化》。
另外 C++(C语言) 在一众高级语言里面却算是比较贴近计算机底层的语言。多了解计算机结构、存储、运算原理方面的知识,会对C++ 的来龙去脉理解得更透彻,可以读读《计算机科学导论》、软件工程的《代码大全》、操作系统的《现代操作系统》、程序员入门的《深入理解计算机系统》。
2018.10.12 更新
就对于Android开发者而言学习C/C++有没有必要呢,怎么结合起来呢? ——夜幕降流星雨 android开发 @ android
个人觉得必要性要看所在公司的业务领域和你的个人兴趣。比如直播公司涉及的音视频业务,必然是要涉及c/c++的(ffmpeg啥的哪有java代码);类似的需要c/c++的业务一般是些重性能、偏底层的东西。如果你判断自己公司中短期都没这个需要,那就轮到看自己有没有兴趣了。前景的话说句题外话,大前端慢慢侵蚀原生开发,慢慢单纯的Android开发会被替代的,虽然过程应该很很很缓慢。一方面你也可以转大前端,这样比较快速;另一方面就是可以深入做这些偏底层的东西,没那么容易替代,但未来的事情谁又说得清楚呢,哈哈。
Android和C/C++怎么结合起来?
可以搜索ndk、jni等关键字了解,网上铺天盖地的基本教程。这个学会基本使用应该大家都没啥问题,但是如果是更深入一点,比如具有明确功能的代码中,c代码是怎么结构的,生命周期,怎么跟android(java)配合等等,说实话,需要一个项目的实践。这方面我有很好的思考之后会从小白0基础的角度写点文章。