从小白到月薪20K,我的C++学习思路总结!
前言
- 读者定位是两类人群:a.初学者,即将入手 C++ 语言、不知道如何开始;b.已经开始学习C++许久了,却进度缓慢,抓不到精髓,倍感迷茫。
- 本文不会深入到C++语言内部挖掘技术点。
- 如果你自诩C++高手,请绕道;如果你本就是C++高手,开发经验丰富,可以对本文提一些建议。
- 本文将结合我自己的学习经历和经验,谈一谈 C++ 应该如何学习。
- 文章中提及书籍的时候没有评价。我的书籍推荐中列举了一些 C++书籍,都有我的相关评价,感兴趣的可以看一看。
【文章福利】:小编推荐一个C语言/C++交流群:967051845!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加~
为什么 C/C++?
C++ 是一门编程语言,请注意它仅仅是一门编程语言。这句话的意思就是一旦有人在做语言好坏之争的时候,一笑而过即可。特定的语言只是用来在特定的领域解决特定的问题,仅此而已,尤其是现在众多语言纷飞的年代,这句话的正确性不容置疑。
在编程领域里,每个人都会有他/她的入门语言,各持己见。我个人认为 C 语言是一个很不错的选择,语法简单,深度可深可浅,高级语言的鼻祖。很重要的一点是现今的各种编程语言,或多或少都是 C 语言的衍生品,或者是衍生品的衍生品。语言相通,只要 C 语言学好了,上手其他语言问题不大。C 语言的灵魂在于指针,指针可以帮助你更好的理解内存,理解操作系统的工作机理。
C++ 是一门争议性语言,喜欢研究的人很多,吐槽的(包括一些大神级的人物)的人也很多。在 C/C++ 的时代(C/C++刚出道的时候),语言的可选性较少,所以 C++ 干了许多事情,现在时代不一样了,正如我前面所谓语言纷飞,针对性语言众多,程序员的选择性也就多了(有很多的优秀的语言可以去学,C#,java,php,python,ruby……),所以 C++ 不再是必须品。
在你开始学习之前,请慎重考虑一下,为什么要学?如果考虑好了,请继续阅读。
C++新手
选择一本好书
如果你发现以“数字”命名的书籍,请扔掉!(21天学通C++?)
如果你发现以“通”字样命名的书籍,请扔掉!(零起点学通C++?C++从入门到精通?)
如果你发现把“Visual” 和 “C++” 联系起来的 C++ 教程,请扔掉!(太多了,不举例了)
如果你发现“void main”作为实例的书籍,请扔掉!
如果你发现“”作为实例的书籍,请扔掉!
……
有几本书可以供你选择:《C++ Primer Plus》,《C++ Primer》,《C++程序设计语言》
我入门用的是《C++入门经典》,继而读的是《C++ Primer》。其实好书和差书很容易区分,厚度和价位是一个很关键的点,通常薄薄的,又便宜,书名却非常霸气的告诉你如何精通,那你果断扔了,想都不要想。
选择一个好的IDE
请注意我强调的是IDE(集成开发环境),而不是套餐(GCC+VIM/EMACS+GDB+[linux]),对于一个初学者来说,一定要抓住重点。
初学者一定要相信这一点,网上太多人吹嘘学 C++ 不应该用 IDE ,就应该直接 文本编辑器+GCC 用 GDB 调试,进而言语鄙视 IDE 。我不知道你抱着什么心态,我只想说你入门是那样入门的吗?当时有没有 IDE ?你了解 IDE 吗?你公司用什么开发?
对于一个入门新手,一个人性化的调试环境是必须的。当然,作为一个 C++ 程序员的话,GCC/GDB 是必须要去了解的,linux 也是必须要会的。
C++入门(停留在表面)
参考标准:熟练掌握 C++ 语法结构,了解 C++ 主要模块,技术难点。大部分书上可以找到的知识点。
学习 C++ 要不要学习 C ?
作为这样的一篇文章,这个探讨几乎是必须要做的。
我的观点很明确,要学!
因为我先学 C 语言,后学的 C++ 的,而且学习使用过程中无数次穿插的相互学习。我的程序中从来没有刻意的区分这是 C 还是 C++,我把握的标准是怎么样方便怎么来。
就好像文件读写我从来都不用 C++ 的文件流,因为我习惯了 C 语言的 fread、fwrite、 fopen、 fseek、 ftell 等等。
我是站在语言的语法和库的角度来说“要学”的。如果你要学面向对象的话,那就没必要学 C 了,好像也没有学 C++ 的必要了,你可以选择一个纯面向对象的语言去学面向对象岂不更好。
总结,以我的个人经历来说,学 C++ 可以先学习 C 语言(观点已明确,探讨结束!)。
要了解哪些东西呢?总结是两点:语法和库。所有的语言几乎都是一样的。
- 语法[基本类型、标准库类型、数组和指针、表达式、语句、函数等]
- STL[容器,算法]
- 模板与泛型编程
- 类与面向对象
语法熟练的是必须的;熟练使用 STL 编程,面向对象思想不是一天两天就可以有的,需要不断的历练和实战才能培养出来的;面向对象在C++中的实现方式一定要熟(继承,派生,虚函数等);模板的实参演绎要搞清楚。
如何实现入门?
- 看书。《C++ primer》,《C++标准程序库》,《C++ template》
- 多思考,多写小程序。
C++进阶(技术研究)
参考标准:内部机理,奇淫技巧
- 深入C++内部,探究实现的机理[为什么模板不支持分离编译?虚函数/多重继承是怎么实现的?类型转换做了那些事情?异常处理?等]
- STL源码学习[学习别人的设计方法?为什么STL效率高(为达效率,无所不用其极)?学习数据结构和算法?内存池?RTTI?等]
- 内存[理解指针运算?内存对齐?类的内存布局?new/delete 和 malloc/delete的区别?函数变参的实现?存储方式?智能指针?等]
- 编译器在编译,链接的过程中偷偷的做了那些事情。[如何分析编译器的提示?链接错误代表可能出现哪些问题?等]
- 跟上C++库的潮流,研究新标准。
如何实现进阶?
- 看书。Effective 系列书籍,《STL源码剖析》,《C++标准程序库》,《C++沉思录》,《高质量C/C++编程》,《C++编程思想》,《深度探索C++对象模型》等。
- 写软件,遇到问题之后自己折腾,自己探索。
- 逛社区,回答别人的问题。
- 多看看别人的博客。
- 结交自己的技术圈子。
最后
现在的互联网是浮躁的,导致现在的学生是浮躁的,都想一步登天。
现在学习环境的肮脏的,是个人都想出来赚几声吆喝,就拿博客园的首页口水战一样,你喷我,我喷你,其实到最后都不知道大家在喷什么,只知道必须站出来喷一下证明自己的存在!这是多么可悲的一个环境。
最后给大家几个忠告来结束本文吧:
-
多交流:不管你的技术多么硬,你都不可能一个人做完所有的事情,你要学会与别人合作,与别人交流。交流过程中,要注意交流技巧。学会尊重别人,但要不亢不卑。
-
多动手:熟能生巧,这是万能之理。我们干的是技术活,最能证明自己能力的就是干!不是扯淡!
-
多思考:不要做编码机器。
-
多总结:相同的问题不可能只出现一次,尤其是在我们这个行业。总结是为了你在以后更快的解决类似的问题,提高工作效率。
能说的还有很多,让博客待续……
文章福利
对于自己找不到视频、书籍资源的读者,可以加小编的C语言/C++交流群:967051845!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,需要的可以自行添加下载即可~