985高校热议:掌握C++后,你能做什么?

发表时间: 2022-09-16 18:07

大家好,我是柠檬哥,专注编程知识分享。

欢迎关注@程序员柠檬橙,编程路上不迷路,

最近很多同学私信柠檬哥,问到C++的应用方向和工作方向,这就安排。

C++和C语言相比于Java和Python,可以说是比较底层的语言。不像Java有GC,在C++中内存需要程序员自己管理,也正是因为C++给程序员提供了足够大的自由度,C++能做的事情很多,精通C++不那么容易,但探索的路上有人一起,学习也不难。

一、C++应用领域

今天,我们就来聊聊C++的应用方向,学完C++能做什么?

1、嵌入式开发

嵌入式相关的岗位需求比较多,主要是硬件产品的驱动开发,很多大公司,比如华为、小米、vivo和一些芯片公司都在大量的招聘嵌入式开发工程师,而且薪资也不低。

要求熟练操作Linux系统,C/C++语言以及相关的编译和调试技术,精通Linux平台相关驱动开发技术,精通bootloader移植、内核剪裁等技术。


2、客户端开发

一般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话一般是C++和QT,Qt 是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序,C++客户端开发岗位也比较多。


3、游戏开发

游戏开发是C++的一个就业方向,很多游戏引擎就都是使用C++开发的,做游戏的大公司比如腾讯、网易、哈游、莉莉丝、暴雪都招聘C++岗位,薪资也是非常可观,比如王者荣耀传闻年终奖几十个月。

游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习Orge,UE4等开源引擎实现。


4、音视频图形处理

短视频和直播是如今大火的赛道,人人都能参与直播,直播短视频未来肯定还会大放异彩,而音视频处理也是C++的专长,这两年短视频特别火爆,抖音、快手、B站都发展的特别快,很多公司也有音视频方向人才招聘需求,感兴趣的同学可以尝试这个方向的C++学习。

常见的音视频开源库和方案有FFmpeg、WebRTC、Mediasoup、ijkplayer ,音视频开发最主要的技术栈就是C++。


5、服务端开发

C++服务端开发,也就是我们常说的后端开发,如今互联网后台开发主力语言是:C++、Java、Golang,C++的主要优势是性能十分优异,极致压榨CPU,Java和Golang更适合写业务代码,对性能有严格要求的后台会优先采用C++开发,百度、腾讯等大公司有很多用C++语言开发的后台服务,博主本人也曾在鹅厂担任C++后台开发。在高频交易领域比如量化私募企业、证券公司也在使用C++做服务端后台开发。

后台开发要求精通C++、STL、Linux网络编程等,熟悉设计模式、熟悉常用数据结构和算法,以及各种后端中间件。

6、人工智能

深度学习工程化开发,深度学习只是一项技术,它终归需要落地,想落地就需要工程化,人工智能目前可以落地的主要领域,个人认为主要还是安防和自动驾驶,这块都会使用C++开发,包括深度学习算法SDK,深度学习框架开发等。

上面这些就是C++大体的应用方向,大家可以根据自己的兴趣去学习相关的内容,一开始不要贪多,找准一个方向发力,学有余力再去学习其他方向。


二、如何学好C++

学好C++ = 看入门视频+经典图书+大量的代码练习+小项目+成熟大项目

可以先来看下,一般的C++初学者的学习顺序:

刚开始接触C++时,如果是学校开了C++课程的话那就更好了,可以跟着老师的进度学习,在课余时间可以多做一些习题或上机练习。如果你是完全自学,你可以找一本面向大学生的教材,掌握了一些基本的C++概念了。

那就开始学习面向对象的部分了,这部分内容比较多,初学者理解起来也会感觉比较吃力,建议多上机练习。在基本了解了C++的面向对象之后,可以开始学习模板库,比如STL,因为STL在我们的软件开发中非常重要,甚至有些招聘都要求会STL,(STL:标准模板库),这里面包含了大量的数据结构和算法的实现,有些可以直接拿来用,但是如果你对数据结构有特殊需求,那么你就要自己去实现这些数据结构。

如果你已经进入了C++的世界,那么你就可以进阶学习了,学习了这些你或许感觉有疑惑,为什么我不能开发出一个带界面的程序呢,呵呵,如果你又这样的需求,那么你可以学习一些界面库,比如QT,MFC等,这两个是比较常用的,QT入门稍微容易些,但是往后深入会比较困难,MFC入门起来会麻烦一点,有很多人也就是因此而放弃,但是甜头在后面,只要入门了后面的路将会是一马平川,障碍比较少。

你如果对某一领域感兴趣,你就需要去了解和学习相关的库,比如三维图形库OPENGL,网络通信库ACE等等,这些库基本是都是标准C++写成的,一般都是跨平台的。

也许有很多会有疑问,我学习了C++以后能做什么样的软件开发工作?

目前C++软件开发主要集中在以下领域:

1、服务器端开发:很多游戏或者互联网公司的后台服务器程序都是基于C++开发的,而且大部分是linux,unix等类似操作系统,所以说,你如果想做这样的工作,你需要熟悉linux操作系统及其在上面的开发,熟悉数据库开发,精通网络编程。

2、游戏:目前很多游戏客户端都是基于C++开发的,除了一些网页游戏可能不是,这个领域需要学习的东西就比较多,个人不太了解就不多说。

3 、虚拟现实仿真:这个也是发展很快的计算机领域,目前各种数字地球,数字城市,虚拟地理环境什么的,出现了这方面的大量应用,不过也不限于这些方面,比如科学计算可视化也是其中一个方向。这个方向重点需要学习的是图形学。

4 、数字图像处理:现在市面上有很多VC++图像处理的书籍,可见在这个领域的应用软件开发也是占了很大比重,需要深入学习数字图像处理和模式识别等课程。

以上节选自原文链接:C++学习路线-菜鸟笔记

三、再来看下C++学习到底要学哪些东西:

C++知识点

  • 基础:类型、遍历、const 限定符号、声明与定义
  • 标准库和算法:string、vector、bitset、map
  • 数组、指针和引用、动态数组、多维数组
  • 表达式、循环、条件判断语句
  • 堆和栈的区别,mallocl和 new 的区别
  • 面向对象的特性,封装、继承、多态
  • 虚函数、虚函数表、派生类虚表,对象内存布局
  • 重载 Overloading 和覆盖Overriding
  • 析构函数、构造函数,派生类中的构造函数与析构函数
  • 模板与泛型编程:模板定义、实例化、模板编译、模板特化
  • 继承:单继承、多继承、菱形继承、虚继承
  • static关键字作用
  • #define与 const 的区别
  • C++中的强制类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast
  • 异常处理、命名空间
  • 现代C++:C++1X、C++20 新特性

怎么学C++?看书学!最高效的学习方式,看经典图书。

我当初在学习C++的时候,第一件事就是 Google 搜索前辈们推荐的 C++ 经典书单,前人的经验能让你少走弯路,这里我也分享下自己学习C++,从入门到进阶之路看过的图书:基础 3 本,进阶 3 本,现代C++ 1本。

自学C++相比Java和Python还是要难一些,因为C++更接近操作系统底层,需要自己管理内存等等。

关于C++优质视频学习资源这块,这块我整理了一系列优质的C++公开课和教程视频资源

有需要的童鞋可以后台私信发送 1024 打包下载10个G编程资源学习资料

一定要看的书,总共 7 本书(带封面,方便你找),一年应该看得完。

C++基础 3 本

  • 《C++ Primer 》豆瓣9.4

  • 《Effective C++》豆瓣9.5

  • 《More Effective C++》 豆瓣9.2


C++进阶 3 本

  • 《Inside the C++ Object Model》 这本书中文版《深度探索C++对象模型》翻译质量也很高, 豆瓣9.1


  • 《STL源码剖析》 豆瓣 8.7


  • 《C++编程思想》


现代C++ 2本

所谓的现代C++就是C++1X 甚至 C++20 引入的新特性,让C++这门「古老」的编程语言更加现代化。学完上面推荐的书籍,你已经是算的上是掌握了传统 C++ 用法,如何快速上手现代 C++ 特性,入门我推荐开源电子书:

  • Effective Modern C++

看过Effective C++ 都知道那是多么经典的一本书,这本书的作者和Effect C++是同一位:

20多年来,Scott Meyers的“Effective C++从书”(包括《Effective C++》、《More Effecitve C++》和《Effective STL》)已经为C++程序设计指南的业界设立标杆。他清晰明了引人入胜的、对复杂技术材料进行条分缕析的阐释为他赢得了世界范围内的称誉,也使他成为一名广受欢迎的培训师、咨询顾问和会议讲师。他拥有布朗大学计科学专业的博士学位。

原书在豆瓣评分9.0,这本书有中文版,学习现代C++必备的高质量图书。


  • 《现代C++教程:高速上手C++11/14/17/20》


本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。

这本书已在Github开源
changkun/modern-cpp-tutorial

以上,多了也不推荐,看完这 7 本书差不多算是掌握C++,要达到熟练掌握,还需要项目练习和代码量积累,至于找哪些适合的练手项目,点赞超过100再来补充。

两个编程学习资源

认真看到这里的,都是真心想学习的同学,两个编程学习资源分享给你。

程序员写出好代码,参考世界一流互联网公司Google的代码规范:

有需要的童鞋可以后台私信发送 002 获取获取谷歌公司编程代码规范

编程学习书单推荐。学习编程最好的方法是看书+实践,尤其是经典编程图书!另外,即使是把书上的代码抄下来运行一遍,也比光看不练强百倍!

程序员柠檬:100本!计算机编程经典书单,打包带走!

希望对你有帮助

不像Java有GC,在C++中内存需要程序员自己管理,也正是因为C++给程序员提供了足够大的自由度。

C++能做的事情很多,在对底层的操控和运行速度上是Python和Java所不能比的。

在学习的路上,有兴趣的童鞋可以跟着我一起进阶!

我是柠檬哥,专注编程知识分享。

欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:


发送 1024 打包下载10个G编程资源学习资料

发送 001 获取阿里大神LeetCode 刷题笔记

发送 002 获取获取谷歌公司编程代码规范

发送 003 获取10个精美简历模板PDF和Word版

发送 004 获取100道精选 C++ 面试题和答案word版

发送 005 获取获取谷歌LeetCode算法笔记