C++ 学到什么程度可以找工作?

成长的过程,润物细无声,极难察觉。但那段枯燥痛苦的学习和刷题岁月让我未来的道路受益匪浅。毕业后,我也如愿拿到腾讯游戏年薪近15万(多年前)的Offer,开启了职场生涯。

毕业后,担任过360技术委员会成员,在C++这条路上走得更远了,再给大家一些系统的建议:

一、C/C++入门阶段

这个阶段全力以赴的话,5个月时间差不多可以掌握。

刚入门的时候我们主要是学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法,这对以后的程序员之路非常重要!

所以学习语言更为重要:

面向对象编程思想;类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载;C++编译器对象管理模型分析;类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承。

这个阶段推荐以下两本书:

《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。

《C++ Primer》 本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。

二、C/C++开发进阶

这个阶段非常刻苦的话,需要半年以上时间。

在第二阶段学习的时候,就是比较重要的了,C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。

C++进阶之STL:

STL = Standard Template Library,即标准模板库。这是提高开发效率的极品工具。通过学习此阶段,应掌握泛型编程技巧,理解容器类在C++语言中的应用模式,以及熟练掌握全部STL类的使用方法。

C++进阶之设计模式:

决定一个项目成败最重要的因素是项目总体的设计,通过本阶段的学习,可掌握面向对象编程中重要的一环,是编码前建模的技巧所在。单例模式;工厂模式;代理模式;迭代模式等,这些都是你要掌握的哦。

C++进阶之数据结构基础:

这是所有编程语言中最应该学习的部分,程序组成的基础之一。顺序存储、链式存储、循环链表;

双向链表、栈(顺序和链式)、队列(顺序和链式);

栈的应用、树基本概念及遍历、二叉树;

排序算法、并归算法、选择、插入、快速、希尔。

这个阶段推荐以下几本书:

《Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。

《Inside the C++ object model(深度探索C++对象模型)》 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。

三、C++开发高级

这个阶段几乎伴随了职场后续的整个生涯,只有更精没有最精,C++高手之路,任重道远!

C++进阶之QT开发:

掌握QT类库构架,图形界面开发模型;掌握QT开发技巧,消息机制,图形处理;掌握QT 络编程,UDP,TCP使用方式;掌握QT文件处理方式,序列化;掌握QT在windows,linux,ios,android不同平台下的移植技术

C++进阶之Windows/Linux 络服务器:

掌握Unix/Linux平台开发方式;熟练使用系统调用;熟练Unix/Linux内存管理,进程,线程调度;掌握MFC界面开发, 络编程;熟悉 络服务器开发方式,熟练编写TCP,UCP 络服务程序;掌握同步/异步IO模型在 络编程中的使用方式。

C++进阶之数据库开发:

掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。

如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,这个时候月薪过万都是小意思了!

这就是所谓的程序员大牛了,当下炙手可热的全栈开发工程师,既晓前端,又通后台。快速定位问题,解决问题对他们来说已是小菜一碟,就是人们常说的神秘大牛,只在公司技术攻关的时候才会才看到他们的身影。

这个阶段,在C++领域,你已经飞跃愚昧之巅跨越绝望之谷,进入开悟之破了。推荐以下书籍:

《The C++ standard library(C++标准程序库)》 这是标准模板库字典,你可以在本书中找到STL相关的一切知识。本书焦点放在标准模板库、检查容器、迭代器、函数对象和STL算法上。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细节解说、陷阱、意想不到的危险,以及相关类别和函数等。

《Generic programming and the STL(泛型编程与STL)》 本书阐述了泛型程序设计的核心理念:concepts(概念)、modeling(模型)和refinement(改善),并为你展示这些观念如何导出STL的基础概念:iterators(迭代器)、containers(容器)和function objects(函数对象)。按照本书所述,你可以把STL想象成一个由concepts组成的library,你将学习到STL正式结构并理解其强大的优势。

《C++ template》 这是一本关于C++模板的完整的参考手册和教程,它强调模板的使用实践,包含了现实世界中的例子。每个C++程序员都应该好好读一读这本书。

《Thinking in C++(C++编程思想)》 C++ 领域权威著作,介绍了C++实用的编程技术和最佳的实践方法。

以上是用一年时间应对面试学习C++的建议。

还有一个我最近发现的一个非常赞的视频,是一个国外 C++ 游戏引擎开发工程师录制的一套偏向 talk 类型的教程,比较通俗易懂和深入浅出。

推荐一下:

[中英字幕] C++_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili:https://www.bilibili.com/video/BV1Ay4y1i7Z6

另外翁凯老师无论是 C、C++、Java 的视频都讲得非常深入浅出,值得学习。

这是 易云课堂地址:

面向对象程序设计-C++ – 易云课堂:https://study.163.com/course/introduction/271005.htm

这个答案具体取决于方向,面试级别等等,但一个不争的事实是

C++是不可能精通的

想起了自己学习C++的血泪史/(ㄒoㄒ)/~~

  1. 学习了基本输入输出,条件语句,循环,函数,内心:这玩意也就比C多了函数重载、引用,还有个顶层const与底层const,分分钟搞定

  2. 学习了基本的OO部分,内心:emmm~~~,C++还是有两把刷子的,不过还行还行,开阔了思维

  3. 学习了闭包,泛型,STL,内心:好多要记的东西,好烦呀,感觉不行了

  4. 了解了模板元编程,多重继承,虚继承,多线程,Boost库,内心:

以后见人只敢说用过C++。。。。(C++还有Qt,opencv,opengl,甚至微软的.net等一堆东西

所以Life is short, you need Python

“C++学到什么程度可以面试工作是一个毫无意义的问题。

这个问题等价于“我锤子用到什么程度就能找到工作

锤子可以修汽车,可以盖楼房,可以做装修,但“锤子用到什么程度”这个语句毫无指向性。

锤子只是一个手段,而不是目的。

所以一个人的C++实力得结合具体的工作内容来谈。

目前市场上使用C++岗位不多,且要求都比其它岗位更高,所以题主如果有志于在C++相关的方向上发展,得做好在这个方向上长年累月去投入的准备。

C++有下面这些方向,下面我们一一介绍一下:

1. Web Backend

Web业务后台目前国内使用C++的公司不多,并且使用范围在逐渐缩小,业务后台开发需要的是快速的产品迭代和极高的开发效率,因此C++在web后台开发所使用的份额已经被JAVA和Go所吞噬的差不多了,强烈建议题主不要使用C++走这个Track,如果一定要走,那么要把OS, Networks等科班课程学精,熟读《Linux系统编程手册》《TCP/IP详解123》。这个方向对于C++本身的语法要求并不高,把C++ OOP和STL部分掌握熟练就行,Lambda以及Template了解即可。

2. HPC(High Performance Computing)/AI Infrastructure/ML System

HPC这个方向比较学术性,只会在BATTMD等大公司存在,小公司没有,因此就业比较窄,就业人数也很少,竞争不那么激烈。目前HPC开发更多的是作为AI Infrastructure的一环存在,着重解决的是DL的算力问题。若从事相关工作,需要学习的东西非常非常多,个人认为这个Track是整个CS工作中最累也最难的,需要学习的东西横跨软件,硬件,算法三个维度。首先得学习Computer Architecture等硬件课程,然后得阅读Tensorflow/Pytorch等某个深度学习框架的C++源码,详细了解主流神经 络的结构,最后还得熟悉CUDA编程,TVM/XLA以及编译原理等相关内容。这个方向对于C++语法的要求也比较高,需要深入理解C++11/20, C++函数式编程以及C++ Template,而不只局限于C with Class以及STL。本人认为这个方向很难走,若不是科班毕业并且有几年的积累,不建议走这个方向。

3. Database开发

Database开发,Database的学术性比较高,并且就业岗位比上面两个更多,属于C++中就业压力相对较小的,BAT等大公司才有能力根据自己的业务定制Database,因此相关岗位集中在大公司。Database所需要的技能栈和1比较相似,但对于OS以及Computer Architecture知识的能力要求高于1,需要深入理解Disk架构,对于C++的语法能力要求也高于1。记住,只要和业务性能瓶颈处相关的开发岗,对于C++的语法要求都很高。

4. Networks

Networks这个方向我不是很了解,在此不做过多的描述,此方向的就业岗位主要集中于思科,华为,中兴,诺基亚等公司,岗位较多,和3差不多。Computer Networks的相关的知识是核心,需要精读《TCP/IP详解》。

5. OS/驱动/Compiler

这三个方向的就业岗位相当少,国内也只在微软,华为等少数几个公司存在,严格来说这些方向上对C的能力要求要更多一些,所以把C++中C的部分以及C++以外C的部分学好就行,对于CS的Compiler,OS,Architecture三大件要熟练掌握。

6. Multimedia(图形/视频/语音处理)

严格来说, Multimedia其实属于算法方向,C++只是实现算法的一种手段而不是目的,走这个方向需要对相关音视频图像的处理算法有很透彻的理解,图像的话熟读《Digital Image Processing》,熟练使用FFmpeg/OpenCV等相关工具。这个方向对于C++的语法能力要求不高,把C with class搞明白就OK了。

7. 游戏引擎开发/游戏前后台开发

其实游戏引擎开发严格来说也是一个算法方向,从事这个方向数学要好,尤其是线性代数,熟读《Computer Graphics》,C++主要用来实现相关的图形学算法。游戏前后台开发答主没有经历过,不便做过多的描述,但我可以告知的是此方向就业岗位较多,并且很长一段时间内会非常稳定,题主若有兴趣,可自行搜索相关资料。

以上7个相关的岗位就是目前市场上使用C++最多的7个岗位,当然还有嵌入式,Windows软件开发等稍冷门的方向。题主若想从事C++相关的工作,绝非把C++的语法搞明白这么简单,而需要从技术上深刻理解C++上下游的环境依赖,也要结合具体业务在技术上有所思考。

往期推荐

? 专辑 | 趣味设计模式

? 专辑 | 超硬核 Qt

? 专辑 | 程序人生

回复“1024”,送你一份程序员大礼包。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月19日
下一篇 2021年6月19日

相关推荐