C/C++ 开发方向如何选择?坚持 C++ 还有意义吗?
前言
在这里讨论 c/c++的开发方向的好坏,本来就是一个极具争议的话题。就好比和大家讨论:谁是世界上最好的语言一样,个中都有强手。而技术方向也是,每一个方向都存在高薪和出色的公司。所以这里的讨论分享根据个人的看法和普遍行情做交流。
首先就开发方向而言,大致可以分为四大块:
嵌入式开发
桌面开发
游戏开发
后端开发
一、嵌入式开发
嵌入式开发其实可以分为两大类:一类是不带操作系统,一类是针对带操作系统的 Linux。带操作系统的当然还有其他,这里就拿 Linux 操作系统做讨论。
不带操作系统的,大家最熟知的就是 MCU,这是很多同学大学时期就会接触的东西。比如智能家居,或者说给门做一个开关等等,这些对于刚开始做开发的同学来说,是比较酷。但是从这个场景也可以看得到,MCU 是更适合单人或是小团队做的项目,不太适合大项目的多人合作。因为本身 MCU 的特点就在于轻量级,很小。很多公司项目就是一到两个人即可。选择这个方向的很多是以电子,通信,自动化或是机械设计相关专业的朋友,也就是计算机边缘专业的朋友会选择 MCU,那如果是计算机相关专业的朋友可能就会选择 Linux 相关的,选择 MCU 的很少。
那 MCU 到底值不值得推荐呢?
回归到话题本身,对于方向的选择就是个人的爱好与自己经验的选择。有些朋友可能就是喜欢做 MCU,面向爱好编程,这里就不做讨论。这里我们更多讨论的是“面向薪资编程”,可能很俗气,但个人认这是相对客观的选择标准。
说 MCU 好吧,是的,MCU 很容易学,不是很难。如果是想做软件开发,做硬件不行吗?
做硬件是可以的,硬件是软件的支撑。但是对于一名程序员来说,对于运用的多样化还是靠软件去支撑。也因为如此,软件开发的薪资会比硬件多很多。所以,如果不是特别喜欢,愿意为爱发电的化,还是建议大家做软件。
这里不推荐,不是因为没有市场,毕竟国内而言,好的,优秀的硬件大厂也不是没有。只是作为软件开发的角度来看,它的成长性不强,多人协作的能力不强,不适合大项目。这里大项目的理解是人数上的大项目,而不是金额上的。
再说说 Linux 操作系统方向的嵌入式
嵌入式的很多岗位属于制造行业,其特点是靠硬件和人力成本上的利润获利,而软件对于制造行业来说就是半卖半送,不会以软件作何核心来体现。比如手机上的软件,
而 Linux 嵌入式比 MCU 好的点在于,至少是到操作系统的,其使用场景相对复杂。先说应用开发,以上位机,界面化开发为主,能选择的方向:QT 等,其项目单一,迭代时间很长。然后是内核驱动开发,主要是产品厂商,可能会有少部分会有 Java 开发,大概率是的芯片原厂。
那说到这里,不少朋友可能会说,那到底如何选择技术方向呢?
如何判断方向好与不好,主要看两点:
薪资成长性
技术成长性
其实很多现在大家所说的程序员的 35 的危机,大多来自于此,一个方向做了三五年,一眼就看到了八年十年后自己的样子,它的薪资成长性和技术成长性已经看到头了。另一方就是来自于内卷。
就上面已说的岗位而言,MCU 的薪资成长性,从新手到五年,是由区别的,但是五年到十年的提升就比较一般了,技术成长性也会一般。
而嵌入书,上位机,这种,如果是进大疆等这种龙头企业就没法谈,所以我们今天讨论的是一般性,不会拿最顶和最差做特例去谈。
说到龙头企业,这里和大家分享一下 offer 如何选择,特别是对于应届生而言,很多时候对于薪资和平台之间两难。
第一,看公司。公司是在什么平台,平台和公司有关,和你无关,但是公司好不好还是和自己有关的。行业往后排。
第二,看团队。大的公司是有不同的团队的,选择好的团队,也就选对了之后处事的同事人群,这对于自己之后的学习提升会有很大的帮助。
第三,看薪资。在好的平台公司,除非体量差别特别大,如果差不多,就看薪资。
第四,看技术方向。
很多人不理解,为什么把技术方向放在最后。
这么说吧,现在 Java 很火,不少的 c/c++开发的程序员都转了 Java 和 go,原因并不是说看好这个方向,大部分的实际情况还是在于,招聘的大小公司多,薪资高。其实也就是"面向薪资"编程。至于有人说的隔行如隔山,那大家可以想想,同样是编程,这座山能有多高,而且作为一名程序员而言,学习能力是必备的基础技能。
你能够让好的企业面试通过了你,并给你开出满意的薪资,然后让你转一个技术方向。说明他们认可你的学习能力,给你学习的时间。那自己还在担心什么呢? 当然,还是之前说的,自己对于目前的技术方向有追求就另说。
二、桌面开发
桌面开发的技术体系和上位机很像。c/c++的桌面开发以 QT/MFC 为主。其薪资也有很高的。比后端不会低。但是薪资的成长性上,五年和十年也不会太大。
三、游戏开发
游戏开发的好处在哪里呢?你可以完全不用担心没有应聘的岗位,岗位一直都会有,只要 PC 机还在,游戏产业还在。就会有大把的岗位。不像是区块链,搞不好就没有了。
游戏开发的话主要是游戏客户端开发和服务器开发。那这两个方向如何选择呢?如果薪资差不多的话,选服务器开发。
四、后台开发
后台开发就比较泛了,比如前面说过的游戏服务器,还有金融,网络安全等等。但是总体来说,没有桌面开发那么多,更比不上 Java。后台开发有很多,但是 c/c++后台开发不一定每家公司都有。如果说你在的公司目前有 c++后台开发或是以前没有现在准备有,说明相对来说该公司还是不错的。c++面向的是组件开发,要用到 c++后台开发就是需要去造一些轮子。
这里是比较推荐大家,如果是准备扎根于 c/c++这个方向,可以优先考虑 c++后台开发。
原因有四:
第一,c++后台开发是常年公司招人却又招不到人的岗位,不是说它不卷,而是对于这个岗位的公司来说,基本上都是本着宁缺毋滥的原则。所以只要技术到位,薪资还是很客观的。而且大部分是大厂,对于学历的要求也是相对较高。
第二,c++后台开发基本上是大厂必备,对于想要进大厂的 c++程序员,它是不错的考虑。
第三,c++后台开发工程师的培养周期很长,比如说 Java ,你身边有没有工作四五年的 Java 程序员被3个月的新生代顶替掉的现象,而这个确确实实存在。而 c++后台开发很难速成,它的慢也让很多本身是做 c/c++的最后选择去做 Java,python 了。
第四,c/c++后台开发它是比较庞大而复杂的体系。比如 A 公司做即时通讯,B 公司也做即时通讯,但是他们的代码框架是不一样的,日志也不一样,流媒体编码也不一样等等,这也就是为什么招聘的这个岗位的时候更注重程序员对计算机原理,底层技术的理解和学习能力。也正是这种非一成不变让技术岗位更具成长性和竞争性。
既然说了 c++后台开发是 c/c++后台开发者不错的选择,但是面对其要求肯定也让不少人感到困惑:我是不是适合呢?
五、什么样的人比较适合 c/c++后台服务器开发?
从事业务开发多年,对底层原理理解不够深入的在职工程师
从事嵌入式方向开发,想转入互联网开发的在职工程师
从事 Qt/MFC 等桌面开发的,薪资多年涨幅不大的在职工程师
从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师
工作中技术没有挑战,工作中接触不到新技术的在职工程师
自己研究学习速度较慢,不能系统构建知识体系的开发人员
了解很多技术名词,但是深入细问又不理解的工程师
计算机相关专业想进入大厂的在校生(本科及以上学历,有 c/c++基础)
前面咱们也提到了,正是因为 c++的内容很多,所以至今是没有出现 c++大一统的框架来解决所有的问题的。还有不少的朋友甚至觉得做 c/c++后端开发 只要把 TCP/IP 协议学好就可以了。
六、那对于 c++后台开发的技术学习,具体要学习哪些技术内容呢?
这里分享给大家分享一份 c/c++Linux 后台开发的学习技术路线,自己可以对照的参考,查漏补缺。
作为个人目前觉得对于对 c/c++后台开发体系总结完善程度最为详细的学习路线,来自于零声教育的这份学习提升路线:
主要从七大模块提升:
精进基石(数据结构于算法、设计模式等等)
高性能网络设计(网络编程、网络原理等等)
基础组件设计(池式组件、高性能组件等等)
中间件开发(MySQL、redis 等等)
开源框架(skynet、dpdk 等等)
性能分析
分布式架构(消息队列、分布式服务、API 网关等等)
C/C++Linux服务器开发/高级架构师 学习提升资料获取、课程咨询
如果是想在 c/c++后台开发方向得到有效的快速提升(不是所谓的速成),他们的课程体系是大家绕不过的具有参考意义的提升路线。从学习路线中可以对 c/c++后台开发方向的技术栈体系有一个清晰的认识。
从他们的高概率的大厂学员 offer 反馈可以对 c++后台开发这个岗位在目前市场上的需求和薪资有一个更加深层次的了解。
所以不管学习与否,对于这样一个完善详细的提升技术路线,是值得大家去获取参考的。
LinuxC/C++服务器开发/架构师 面试题、学习资料、教学视频和学习路线图(资料包括 C/C++,Linux,golang 技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享有需要的可以自行添加学习交流群960994558
七、配套推荐给大家学习的参考书籍
MySQL:《高性能 MySQL 第 3 版》
Nginx:《深入理解 Nginx:模块开发与架构分析(第 2 版)》(陶辉)
Redis: Red is 设计与实现(黄健宏)
Linux 内核:《深入理解 Linux 内核架构》(郭旭译)
数据结构与算法:《算法导论》(第 3 版)
性能分析:《性能之巅洞悉系统、企业与云计算》
MongoDB:《MongoDB 权威指南》
Ceph:《Ceph 分布式存储学习指南》(Ceph 中国社区)
Docker:《Docker 容器与容器云(第 2 版)》
TCP/IP:《Tcp/lp 详解卷一卷二卷三》
Linux 系统编程:《Unix 环境高级编程》
计算机:《深入理解计算机系统》
DPDK:《深入浅出 DPDK》
评论