C语言能找什么工作?能拿多少钱?

在《C语言到底能做什么》一文中提到,C语言主要用于底层/系统开发 +关键组件/模块的开发 + 贴近硬件的开发,这些开发场景非常关注运行效率,或者响应时间,或者硬件资源。

如果对应到工作岗位的话,大概有以下几种:

岗位

说明

单片机/嵌入式工程师

可以开发应用程序、驱动、固件、标准库/运行库,甚至适配操作系统。

系统软件开发工程师

可以开发操作系统内核、编译器、文件系统等底层软件;随着云计算和物联网的兴起,优化和定制操作系统的需求不断增长。

应用程序开发工程师

设计和实现应用程序中的某些模块,尤其是那些对运行效率和响应时间有着极高要求的场景,比如金融领域的高频交易软件(HFT)。

游戏开发工程师

负责实现游戏引擎的核心功能,比如 2D/3D图形渲染、物理模拟等。

网络编程工程师

开发网络工具(比如类似 Nginx 的服务器),或者通信协议(类似 UART、I2C 的协议),实现数据的交互。

数据库开发工程师

一些高性能数据库系统,比如 MySQL、Redis,其核心部分使用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++,你就可以开发比较大型比较复杂的项目了,不但你的工资会增加,就业范围也会拓宽。你除了能够更好地胜任以上几个岗位,也可以选择其它的岗位,比如:

岗位

说明

C++ 后台开发

也叫 C++ 服务器开发。面向业务的网站后台主要使用 Java、PHP、Python、C# 等语言开发,但是那些非常注重运算性能、响应时间,或者大数据量、高并发量的后台,就可以使用 C++,比如高频交易软件(HFT)服务器、游戏服务器、分布式文件系统、分布式计算、云计算、大数据、负载均衡 SLB、网络分发 CDN 等。

C++ 客户端开发

也叫桌面软件开发,或者 GUI 软件开发,也就是开发在 Windows/Linux 上使用的带界面的软件,比如 QQ、微信、迅雷、WPS、火绒等。

工作和工资

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++ 的技术栈往往是和具体业务/方向绑定的,不同业务/方向需要不同的技术栈。