【教程】如何学习 C++
目录
- 了解自己所处的阶段
- C++ 地图
- C++ 通用基础
- C++ 常用知识
- 学习载体
- 进阶学习
- 总结
了解自己所处的阶段
- 当前自己属于什么阶段
- 是 cs 专业的学生,现在需要学习一门编程语言?
- 是从其他编程语言转来 C++,丰富自己的语言栈或满足业务需求?
- 还是非 cs 专业,甚至非理工科专业想要转码的学生或已经工作的人?
- …
- 学习的目的(目标)是什么
- 是仅想了解这门语言?
- 是需要以这门语言作为工作中的主力开发语言?
- 是在校期间想要学习,为以后的就业做准备?
- …
初学者应该基于上述问题,以及类似的未被列出的问题先自己确定自己属于哪一类想要学习的人,然后在确定自己如何去学习 C++。
C++ 地图
C++ 的知识虽不说浩如烟海,那也是何其繁多,别说花一年时间来学习,就是使用 C++ 开发了三,五年的时间,也其实会持续的补充 C++ 的知识。
同时,由于 C++ 强业务相关,做嵌入式需要的 C++ 技能和做量化的需要的 C++ 技能,在知识侧重点上并不一致,因此无需大包大揽,要掌握所有的知识内容。
所以我们首先定下一个学习的目标,那就是掌握基础的 C++ 知识,能够满足最基本的日常开发工作,能够满足 1 年经验的开发能力。
在此之前,我将 C++ 的知识划分成如下的板块。这些板块中,通用基础部分是必须要完成的内容,其他板块则根据实际情况进行补充学习。
C++ 通用基础
首先是,选择一款入门开发工具以及平台。大部分情况下,大家学习 C++ 还是从 win 平台开始的,而一开始学习 C++ 也不希望在配置开发环境上就磨灭了学习的兴趣,所以我比较推荐的工具有两种:
- Visual Studio:这个微软官方旗下的,在 win 平台下的 IDE 工具,几乎没有什么手工配置的地方,开箱即用,下载安装完成后,就可以编码输出你的第一个 Hello World。并且 Visual Studio 也是 win 平台下开发 C++ 的主流工具
- 在线编辑器:现在 C++ 的在线编辑器也很多,直接在网页上就可以编写代码,产生想要的效果,甚至有些编辑器的功能已经非常强大了,足够满足初学时候的需求
等学完了基础部分,你也可以挑战使用 vscode 等编辑器去手工配置,或者 CLion 这种跨平台的 IDE 工具。
然后接着是学习 C++ 的通用基础。其实几乎所有语言的通用基础部分无非就是如下的内容:
- 变量与常量
- 基本输入输出
- 表达式,运算符,限定符和关键字
- 逻辑语句
- 常用的数据类型:整型,浮点型,字符型 …
- 预处理器
- 错误处理:如异常机制
基本上学完了这些,C++ 最基础的内容你就掌握了,你可以轻松的编写一些玩具代码了。
C++ 常用知识
当然学完了通用基础还是不够了,理论上通用基础部分其实主要涵盖了 C 语言的基础,但是作为 C 语言的非严格超集,C++ 自身的一些重要的特性还没有介绍到,下面来看一看。
首先是 C++ 引入的非常重要的特性(编程哲学思想)面向对象。这里面主要掌握面向对象的编程思想,类的相关知识,包括封装,继承和多态等。
然后是 STL(标准模板库)。学习如何使用常见的顺序容器,关联容器等。
基本上到此,C++ 所有基础的,常用的知识就结束了。当然上面的每一个知识深入下去,又都是一个比较大的板块,但是在初期,我觉得能够使用这些特性完成简单的编码就足够了。
学习载体
那么使用什么载体去学习呢?是看书还是看视频,亦或是其他更现代的学习方式(如近几年的交互式代码学习),这个我觉得看个人的学习习惯和学习方式。
以我自己的习惯来说,我比较喜欢通过看书或者文档的方式来学习。
这里我推荐,首先是菜鸟教程上的 C++ 板块,快速入门,大概一周到一个月的时间把菜鸟教程上的所有知识过一遍,基本上就覆盖了上述所有的知识点了。
基于此基础上,我还是推荐《Primer C++》进行更系统性的学习(虽然很多人对此比较诟病),但在此我引用 Bjarne Stroustrup 对学习 C++ 者的一个建议是,基础非常重要。
《Primer C++》涵盖了 C++ 基础所需的大部分知识板块,阅读完后,你就知道以后要补充什么知识点,C++ 有哪些基础知识点的板块,能够做到宏观的看待 C++ 的组成。
进阶学习
再完成上述内容的基础上,你还可以根据实际情况,选择某一板块更深入的学习。
比如你已经会使用 STL 中的容器了,那么可以学习这些容器背后的设计机制和原理;
比如如果你打算做嵌入式开发,可以看看 C++ 在嵌入式中的具体实践;
比如更深入了解 C++11 之后的各代引入的 C++ 新特性(现代 C++);
甚至你可以去学习 C++ 的编译器的工作原理,去看看 C++ 编程语言背后的设计哲学和思想。
等等。
总结
总之,C++ 的学习是一个漫长的,但有技巧的道路,你的目标不是学完所有的 C++ 知识,而是学习 C++ 知识可以满足你当前的需要即可,如果你非常感兴趣,当然也可以深入下去探索。