小白 C++ 入门并发疯学习路线(书单)

这篇文章其实是我本身入门过程的总结,一个尽可能少废话的C++入门指南。总结完突然发现像个读书清单😄。html

具体总结前,想先回答一个问题——要不要先学C,再学C++?
我做为小白时疑惑过这个问题,在此给后来的小白和当年的本身一个答案。
我的见解是,单就学习C++而言,直接学习C++就能够了,不用先学C。在知乎看到轮子哥在微软维护STL的Stephen Thomas Lavavej都说他当年学C++以前学C语言浪费了大量的时间,早知道就直接从C++开始。前端

不少老的项目是C语言写的,以后的编程生涯多半仍是绕不开学C语言,不过那时候你已有C++功底,构不成啥大问题。java

所以,这篇文章基本不提C的学习,直接硬刚C++。不赞同的看客勿喷,右上叉叉就是了。赞同的同窗能够往下看。android

入门

《Accelerated C++》,《Essential C++》二选一精读。《A Tour of C++》选读。c++

  • 《Accelerated C++》很适合新手,由于她只有短短不到300页,在广泛砖同样的入门书籍里面是一股清流。容易通读完,减小挫败感。就这样的篇幅,还能涉及一些标准库的使用,真的很适合入门。
  • 《Essential C++》比较适合有其余编程经验的中手迅速学习C++。内容会比《Accelerated C++》深一些。
  • 《A Tour of C++》,C++ creator扛鼎之做,适合刚学完、还有学完很长时间之后看,快速复习 C++知识。

主看书的同时,辅以这几个网站的资料,交叉印证——程序员

(目的只是印证,别的资料也能够,网上多如牛毛,这里只是贴了我当时看的)编程

我当初主看的是 Accelerated C++,在上下班通勤等零碎时间就在手机上看辅助部分的资料,看看跟读书的理解一不同。甚至有时能意识到资料中某些概念的表述不太准确,此刻会发觉本身真的理解了。
这种交叉印证的阅读法,有人问我有什么必要?(看了几个内容可能重叠的资料)。好处有两个,一是能使本身入门时对基础理解的自信更足些;二是,我没见过哪本书或哪篇文章,能够从头至尾彻底清晰、毫无歧义的。交叉着看可让不少理解尽早明晰无误。xcode

完成这一步后,就能够开始上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基础的角度写点文章。

相关文章
相关标签/搜索