C++具有某些现代语言的特征,同时又有传统语言(比如C)接近的效率,使其对运行效率和开发效率做了很好的折衷,这也是它在超大型项目中长盛不衰的最主要的原因。
当项目属于中小规模的时候,很多高级语言(Java、python等)都能胜任,甚至开发效率比C++高出一个量级。但是当你的软件规模(复杂度、吞吐量、并发量)到了一定的量级,C++便是最好的选择,能限制它的只有编程者的能力。
当然,学习一门语言的目的是应用,更功利地讲是为了找到工作,C++在业界的应用也非常广泛,主要可以分为以下几类:
基础架构部门,全公司通用组件和统一服务基础平台。如缓存、计费、消息队列等服务。
算法部门,用于算法的工程实现,典型的如广告系统、推荐引擎。
云服务核心系统。
游戏服务器后端。
图形引擎。
社交引擎(腾讯)。
智能家居等嵌入式开发岗位(对C的要求可能更多点,华为和中兴的终端、路由器、交换机、云存储、0实验室几乎所有部门所有产品)。
搜索引擎(百度)
杀毒引擎
银行核心交易系统
地图产品
金融公司,高频交易
图形图像处理、音视频处理后端岗位,一般要求ffmpeg、H64、H65、opencv等
客户端开发(Qt)
航天、军工、卫星通信、铁路通信等等
学习路径上面谈到了C++的诸多优势,但它也有缺点——学习曲线过于陡峭,语法复杂,难学难精,这也引申出互联网求职中一个最大笑话,"精通C++"。除了语法复杂之外,C++的难点还在于提供了几种编程模型,面向过程的、面向对象的、泛型设计等,对于初次接触编程的人来说,这些概念只能让人不明觉厉。
因此C++的学习路上一定要有引路人,也许一个简单的提示就能帮助初学者避免很多血泪坑。C++的学习资料在网上不难找到,甚至到了汗牛充栋的地步,很多博主在分享学习经验时上来就列出一个书单,笔者不推荐直接通过各类大部头专著来入门C++,能够坚持下来的凤毛麟角,因为这不符合人类认知规律。
本文粗略将C++的学习分为几个阶段,并提供每个阶段需要的资料以及阐明需要注意的事项。
入门(3~4周)如果是完全没有基础的小白,推荐先去看一下菜鸟教程;
如果曾经有过一些C的基础,也可以从《C++语言程序设计》入手;
当然更加推荐是配合视频进行学习,这里推荐浙大计算机学院教授翁凯的MOOC。
这个阶段你的首要目标是掌握所有编程语言中最基本、都共有的一些概念:
变量、常量、类型、循环、判断、数组、字符串、函数、对象、输入输出等等。
以及C++中特有的一些概念:
namespace、引用、模板、STL等等。
对于STL标准库,需要了解几种常用的容器:
vector:向量
stack:栈
set:集合
queue:队列
list:双向链表
map:地图
string:字符串
deque:双端队列
priority_queue:优先队列
知晓了这些概念后,大部分人其实并未真正理解这些,还需要通过实战练习进一步加深理解。这里推荐一个叫codewars的网站,与leetcode相似,这也是一个编程练习网站,只不过leetcode更加侧重数据结构和算法的练习,而这个网站上还有一些语言特性的练习题。
提高(4~5周)经过入门阶段的练习之后,大部分人应该对C++的全貌有个粗略的印象,并且能够写一些小几百行的简单程序,但还是无法很好地驾驭类的设计。此时就需要一些专业书籍来引导了。
这里推荐两本:
《AcceleratedC++》(Stanford教材,短小精悍)
《C++Primer》(大而全,适合当工具书)
第一本主要