C语言能找什么工作?能拿多少钱?
在《C语言到底能做什么》一文中提到,C语言主要用于底层/系统开发 +关键组件/模块的开发 + 贴近硬件的开发,这些开发场景非常关注运行效率,或者响应时间,或者硬件资源。
如果对应到工作岗位的话,大概有以下几种:
但是说实话,如果只会C语言,还是有点尴尬的,因为稍微大型,或者稍微复杂的项目,也会使用 C++ 语言。虽然 C++ 的高级部分会消耗很多资源,比如 RTTI、泛型编程、STL 等,但是最基本的、最常用的面向对象的功能,内部实现还是非常简洁的,所以在那些比较大型,又比较注重性能的项目中,还是可以放心使用的。
以上岗位虽然会使用C语言,但也不一定完全使用C语言,仍然有很多场景会使用 C++,比如:
低端嵌入式,也就是单片机,基本都使用C语言;但是比较高级的嵌入式,也就是嵌入式 Linux,就开始大量使用 C++ 了。
GCC 编译器最初使用C语言编写,现在也加入了大量的 C++ 代码;MSVC(Microsoft Visual C++)、ICC(Intel C++ Compiler)、V8 引擎(JavaScript 解释器)主要使用 C++编写。
高频交易软件(HFT)也大量使用 C++。
虽然主要的网络协议都使用C语言实现,但是也有一些网络库使用 C++ 编写,比如 WebSocket++、JRTPLIB 等。
虽然游戏引擎的某些模块使用了C语言,但是整体上使用的还是 C++。
虽然 MySQL、SQLite、Redis、PostgreSQL 等数据库使用C语言开发,但是也有数据库使用 C++ 开发,比如 MongoDB、Neo4j。
C语言和 C++ 都是非常高效的语言,它们往往是不分家的,所以才被称为 C/C++。
C++ 是在C语言的基础上扩展而来的,学了C语言,就学了 C++ 的一半,所以 C++ 的学习成本并不高,这一点将在《C语言、C++、C#的区别和联系》中详细说明。
掌握了 C++,你就可以开发比较大型比较复杂的项目了,不但你的工资会增加,就业范围也会拓宽。你除了能够更好地胜任以上几个岗位,也可以选择其它的岗位,比如:
工作和工资
Java、JavaScript、Python 等语言在互联网公司中大规模使用,并且主要面向业务开发/应用开发。如你所见,这几年互联网公司发展见顶,缩招裁员,发不全年终奖,大部分业务线都受到了影响。此时此刻,Java、JavaScript、Python 程序员的职业生涯也会跟着遭殃,带来了不必要的内卷或者中年危机。
而 C/C++ 的开发场景,远离互联网业务,波动较小,就业环境相对稳定。
除了单片机/嵌入式、客户端开发和游戏后台开发,C/C++ 主要是做底层开发,它们为上层的应用开发/业务开发提供支撑,也就是造轮子,或者造工具。
这几年单片机/嵌入式比较好找工作,有很多程序员都挤进这个赛道。其实也并不一定是单片机/嵌入式扩招了,而是它们一直都比较稳定,都不难找工作,在互联网遭遇滑铁卢的当下,它们显得鹤立鸡群而已。
至于具体工资,则受到多个方面的影响,比如学历、公司、岗位、地域、机遇等,年包(年薪)从 10W 以下到 40W 以上都有。
不得不说,还是互联网大厂给的工资高,去年秋招爆出的 offer,C/C++ 开发能给到 40W~50W 年包,和 Java、Golang 差不多,比 JavaScript 高点,比算法低点。还有华为,这几年围绕鸿蒙开发给出的工资也不错,和互联网大厂差不多。
至于贴近硬件的嵌入式,就算比较顶流的工资,也比互联网公司低 20%~30%,大概在 30W 左右。当然,不排除个别公司给得多,比如 TP-LINK、理想汽车、大疆等,也能给到 40W 年包。
以上工资,不但需要把相关的技术栈学得扎实,还需要一个不错的学历,最起码得是 985/211 本科,或者是双非硕士(注意这是起步学历);二本三本专科的小伙伴,还是放弃挣扎吧。但是不管如何,把技术栈学得扎实了,即使是专科生,也有机会拿到 20W 年包。技术栈不扎实,学历又不好的小伙伴,那就不好说了,四五千都有可能。
最后需要提醒一下,我并不是鼓励大家无脑选择 C++。
第一,C++ 好找工作,是因为掌握 C++ 技术栈的人少,并不是因为 C++ 岗位多。相比 Java、JavaScript、Python 等语言,C++ 岗位要少得多。
第二,Java、JavaScript 虽然卷,但是它的技术栈比较通用,你可以应付各个领域各个行业的开发任务,所以当你跳槽时就会拥有更多机会。反观 C++,它的各个开发方向都有自己的门槛,你不能轻易地从一个方向切换到另一个方向,比如:
你做音频/视频开发,就不能轻易跳槽到客户端开发;
你做游戏引擎开发,就不能轻易跳槽到单片机/嵌入式开发;
你做编译器开发,就不能轻易跳槽到驱动开发。
也就是说,C++ 的技术栈往往是和具体业务/方向绑定的,不同业务/方向需要不同的技术栈。