大家好,我是柠檬哥,专注编程知识分享。
欢迎关注@程序员柠檬橙,编程路上不迷路,
最近很多同学私信柠檬哥,问到C++的应用方向和工作方向,这就安排。
C++和C语言相比于Java和Python,可以说是比较底层的语言。不像Java有GC,在C++中内存需要程序员自己管理,也正是因为C++给程序员提供了足够大的自由度,C++能做的事情很多,精通C++不那么容易,但探索的路上有人一起,学习也不难。
一、C++应用领域
今天,我们就来聊聊C++的应用方向,学完C++能做什么?
嵌入式相关的岗位需求比较多,主要是硬件产品的驱动开发,很多大公司,比如华为、小米、vivo和一些芯片公司都在大量的招聘嵌入式开发工程师,而且薪资也不低。
要求熟练操作Linux系统,C/C++语言以及相关的编译和调试技术,精通Linux平台相关驱动开发技术,精通bootloader移植、内核剪裁等技术。
一般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话一般是C++和QT,Qt 是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序,C++客户端开发岗位也比较多。
游戏开发是C++的一个就业方向,很多游戏引擎就都是使用C++开发的,做游戏的大公司比如腾讯、网易、哈游、莉莉丝、暴雪都招聘C++岗位,薪资也是非常可观,比如王者荣耀传闻年终奖几十个月。
游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习Orge,UE4等开源引擎实现。
短视频和直播是如今大火的赛道,人人都能参与直播,直播短视频未来肯定还会大放异彩,而音视频处理也是C++的专长,这两年短视频特别火爆,抖音、快手、B站都发展的特别快,很多公司也有音视频方向人才招聘需求,感兴趣的同学可以尝试这个方向的C++学习。
常见的音视频开源库和方案有FFmpeg、WebRTC、Mediasoup、ijkplayer ,音视频开发最主要的技术栈就是C++。
C++服务端开发,也就是我们常说的后端开发,如今互联网后台开发主力语言是:C++、Java、Golang,C++的主要优势是性能十分优异,极致压榨CPU,Java和Golang更适合写业务代码,对性能有严格要求的后台会优先采用C++开发,百度、腾讯等大公司有很多用C++语言开发的后台服务,博主本人也曾在鹅厂担任C++后台开发。在高频交易领域比如量化私募企业、证券公司也在使用C++做服务端后台开发。
后台开发要求精通C++、STL、Linux网络编程等,熟悉设计模式、熟悉常用数据结构和算法,以及各种后端中间件。
深度学习工程化开发,深度学习只是一项技术,它终归需要落地,想落地就需要工程化,人工智能目前可以落地的主要领域,个人认为主要还是安防和自动驾驶,这块都会使用C++开发,包括深度学习算法SDK,深度学习框架开发等。
上面这些就是C++大体的应用方向,大家可以根据自己的兴趣去学习相关的内容,一开始不要贪多,找准一个方向发力,学有余力再去学习其他方向。
二、如何学好C++
学好C++ = 看入门视频+经典图书+大量的代码练习+小项目+成熟大项目
可以先来看下,一般的C++初学者的学习顺序:
刚开始接触C++时,如果是学校开了C++课程的话那就更好了,可以跟着老师的进度学习,在课余时间可以多做一些习题或上机练习。如果你是完全自学,你可以找一本面向大学生的教材,掌握了一些基本的C++概念了。
那就开始学习面向对象的部分了,这部分内容比较多,初学者理解起来也会感觉比较吃力,建议多上机练习。在基本了解了C++的面向对象之后,可以开始学习模板库,比如STL,因为STL在我们的软件开发中非常重要,甚至有些招聘都要求会STL,(STL:标准模板库),这里面包含了大量的数据结构和算法的实现,有些可以直接拿来用,但是如果你对数据结构有特殊需求,那么你就要自己去实现这些数据结构。
如果你已经进入了C++的世界,那么你就可以进阶学习了,学习了这些你或许感觉有疑惑,为什么我不能开发出一个带界面的程序呢,呵呵,如果你又这样的需求,那么你可以学习一些界面库,比如QT,MFC等,这两个是比较常用的,QT入门稍微容易些,但是往后深入会比较困难,MFC入门起来会麻烦一点,有很多人也就是因此而放弃,但是甜头在后面,只要入门了后面的路将会是一马平川,障碍比较少。
你如果对某一领域感兴趣,你就需要去了解和学习相关的库,比如三维图形库OPENGL,网络通信库ACE等等,这些库基本是都是标准C++写成的,一般都是跨平台的。
也许有很多会有疑问,我学习了C++以后能做什么样的软件开发工作?
1、服务器端开发:很多游戏或者互联网公司的后台服务器程序都是基于C++开发的,而且大部分是linux,unix等类似操作系统,所以说,你如果想做这样的工作,你需要熟悉linux操作系统及其在上面的开发,熟悉数据库开发,精通网络编程。
2、游戏:目前很多游戏客户端都是基于C++开发的,除了一些网页游戏可能不是,这个领域需要学习的东西就比较多,个人不太了解就不多说。
3 、虚拟现实仿真:这个也是发展很快的计算机领域,目前各种数字地球,数字城市,虚拟地理环境什么的,出现了这方面的大量应用,不过也不限于这些方面,比如科学计算可视化也是其中一个方向。这个方向重点需要学习的是图形学。
4 、数字图像处理:现在市面上有很多VC++图像处理的书籍,可见在这个领域的应用软件开发也是占了很大比重,需要深入学习数字图像处理和模式识别等课程。
以上节选自原文链接:C++学习路线-菜鸟笔记
三、再来看下C++学习到底要学哪些东西:
怎么学C++?看书学!最高效的学习方式,看经典图书。
我当初在学习C++的时候,第一件事就是 Google 搜索前辈们推荐的 C++ 经典书单,前人的经验能让你少走弯路,这里我也分享下自己学习C++,从入门到进阶之路看过的图书:基础 3 本,进阶 3 本,现代C++ 1本。
自学C++相比Java和Python还是要难一些,因为C++更接近操作系统底层,需要自己管理内存等等。
关于C++优质视频学习资源这块,这块我整理了一系列优质的C++公开课和教程视频资源:
有需要的童鞋可以后台私信发送 1024 打包下载10个G编程资源学习资料
一定要看的书,总共 7 本书(带封面,方便你找),一年应该看得完。
所谓的现代C++就是C++1X 甚至 C++20 引入的新特性,让C++这门「古老」的编程语言更加现代化。学完上面推荐的书籍,你已经是算的上是掌握了传统 C++ 用法,如何快速上手现代 C++ 特性,入门我推荐开源电子书:
看过Effective C++ 都知道那是多么经典的一本书,这本书的作者和Effect C++是同一位:
20多年来,Scott Meyers的“Effective C++从书”(包括《Effective C++》、《More Effecitve C++》和《Effective STL》)已经为C++程序设计指南的业界设立标杆。他清晰明了引人入胜的、对复杂技术材料进行条分缕析的阐释为他赢得了世界范围内的称誉,也使他成为一名广受欢迎的培训师、咨询顾问和会议讲师。他拥有布朗大学计科学专业的博士学位。
原书在豆瓣评分9.0,这本书有中文版,学习现代C++必备的高质量图书。
本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 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算法笔记