为何会有这个标题先解释一下:在*乎上瞎逛看到了这个提问,当时虽然会心一笑想一跳而过,但不由自主的还是停下来思考了一下,毕竟自己的饭碗也是C++,下面随便阐述一下看法吧。
2022真的没公司在用C++?这个不用申辩肯定是错误的,毕竟我大C++在语言排行榜上也是一直占着排名呢。C/C++作为一门底层编程语言,诞生时间较早,学习成本相对较高。在桌面和PC互联网时代,C/C++是主流的编程语言,但是随着移动互联网兴起,学习门槛低,需求更强的iOS、Android、Java、Go等编程语言逐渐兴起,于是C/C++就稍显落寞。
主要是前些年互联网过于火热,大家都把眼光聚集到了前端开发或者java后端上,有的人会用java写后台+用js做前端,就开始号称全栈工程师了,具体水平只能入职实际工作才能看出来。这也带来了一些现象,大多数院校的计算机专业学生在确定语言方向时会选择较热的互联网常用语言java或前端js框架,然后市面上C++从业人员相对变得较少。另外发现一个不知道是否普遍的现象,大多数从事C++的开发人员都不是计算机专业出身,而是从其他专业跨过来的,个人眼界见识有限,不知道是否真的如此。
但要把坐标区域范围缩放到二三线城市一下,会发现这个命题有了一定的成立空间。翻阅一下各大雇人的平台,如果你把地点选到三线城市,搜索C++的话还真找不出几家像样的公司(除了10人以内的不知名公司); 当然选择在三线做开发工作本身就有问题,要么是自身有充分理由没得选择,要么就是head有坑,开玩笑哈哈。
说一下自己稍微熟悉的吧。我有个朋友在三线城市做C++开发,关于工业设计软件开发的。出于性能考虑,各种设计软件大多数都支持用C++做开发或扩展。面试的话可能问的很多,数据结构、算法,各种C++基础,,但是当你真正入职的话,前几年你很可能一直在做假的C++,或者说叫桌面UI开发工程师。描述一下具体工作内容:设计人员将思路讲解给你,你用UI工具拖一个雏形确认需求,然后通过后开始去代码库或网上找类似交互功能代码或者可能用到的简单算法;假如你所在的软件超过五年积累,几乎大部分需要的代码都能找到类似的,因为很多交互场景及用法都有迹可循,当然性能不说了,可能优化过了,也可能是跟你一样的新人在三年前写的,,,你的工作可能是Qt或者MFC界面设计越来越熟练了。
开始可能会很开心,毕竟键盘只要Ctrl + C + V 键不坏就不影响开发进度,可三五年后你如果没有承担后台基础库开发或性能优化等看不见的工作而是一直在做业务设计开发,你可能慢慢变成真正的螺丝钉了,并且随岁月变老变锈蚀,新来的螺丝钉可以快速替代你。这个时候你如果不慌,那你是真的准备当螺丝钉,准备接受薪资倒挂了,毕竟谁有耐心跟一个螺丝钉讨价还价?
C/C++是具有旺盛生命力的语言,很难被淘汰,它的应用场景也在随着时代不断的扩展延申,特别是在物联网、元宇宙、机器学习等兴起的当下。目前C/C++的主要发展方向如下图所示,供大家参考:
从C++目前的活跃程度,以及应用现状来说是完全能够肯定C++仍然是软件工业的基础,也不会退出历史舞台的。另外从Boost,Loki这些库中我们也能够看到C++的发展非常活跃,对于新技术新思维非常激进,C++仍然广泛受到关注。 从ACE在高性能通信领域的应用,以及MTL这样的库在数值计算领域的出色表现,我们可以看到C++在高性能应用场合下的不可替代的作用,而嵌入式系统这样的内存受限开发平台,C++已经发挥着并且将发挥更大的作用。 可以预见的是以后的软件无论上层的应用怎么变,它的底层核心都会是由C/C++这样的系统级软件编写的,比如Java虚拟机,.NET Framwork。因为只有这样的系统级软件才能完全彻底的发挥机器的功能。
特别是随着工业设计软件或基础软件出现“卡脖子”现象,国产化的呼声越来越高,其中有真正要突破的,也有趁机捞钱的,反正桌面端国产化设计软件的开发公司越来越多,招收C++开发的也越来越多。
1、服务器端开发:很多游戏或者互联网公司的后台服务器程序都是基于C++开发的,而且大部分是linux,unix等类似操作系统,所以说,你如果想做这样的工作,你需要熟悉linux操作系统及其在上面的开发,熟悉数据库开发,精通网络编程。
2、游戏:目前很多游戏客户端都是基于C++开发的,除了一些网页游戏可能不是,这个领域需要学习的东西就比较多,个人不太了解就不多说。
3 、虚拟现实仿真:这个也是发展很快的计算机领域,目前各种数字地球,数字城市,虚拟地理环境什么的,出现了计算机图形学的大量应用,不过也不限于这些方面,比如科学计算可视化也是其中一个方向。这个方向重点需要学习的是图形学。
4 、数字图像处理:现在市面上有很多VC++图像处理的书籍,可见在这个领域的应用软件开发也是占了很大比重,需要深入学习数字图像处理和模式识别等课程。
5 、音视频解码:这个原来主要是音频视频处理,但随着直播和居家办公在线会议等越来越发扬光大。
说到C/C++开发,有些人第一反应是Qt或MFC,因为这两个是大部分人入门时候用来写示例程序的IDE集成环境。各大雇人网站也对此有要求熟练掌握,不过MFC停止更新以后,用的人越来越少,多数转到了C#或Qt上,毕竟单单就界面设计开发以及美化来说,MFC还是太难用了,除非你引用进一步的封装库。Qt相对来说在界面上优化美观等甩的几条街,当然主要是跨平台。本人是2014年左右了解的Qt,但对比2022年来说,目前Qt应用范围是越来越火爆了。但是Qt和MFC不单单有界面,虽然大多数新手入职要求就是会拖界面,实现相应的控件功能。 更应该关注的是它的其他一些隐藏知识,例如多线程并发、多进程、消息响应机制、内存优化等等不限于这些。
假如只是为了界面开发及简单控件功能实现的话,用前端来画界面可能更实用一些。见到的就有QCefView和QWebEngineView,web端的界面可以直接嵌套进Qt里面,然后通过后台交互处理,省去了桌面端界面开发工作,界面还可以做的炫酷吊炸天。。。
1、找准一个方向,精耕细作。
2、如果目前没方向,那就尽量完善自己的C++知识库。
3、多看开源代码,改代码来验证猜想。
4、尽量做一些难度高的工作,例如性能优化。
5、没事刷刷算法题,可能记不住,但业务优化用到时候可以快速找到并拿来使用。
6、多关注C++发展,保持行业警惕性。
7、多学一门手艺,炒菜、打铁、种地、养牛。。。。