今年 C++ 输麻了?
The following article is from 小林coding Author 小林coding
文 | 小林coding
出品 | 小林coding(ID:CodingLin )
有很多正在秋招的同学跟我反馈 C++ 求职很困难,而且这些找我反馈的同学, 学历其实都挺好的,985&211 的都有,他们投了很多大厂互联网公司的后端开发岗位,面试机会少得可怜,即使难得有面试机会,也被说对常见的后端组件不太熟悉,或者项目没什么难度而挂了。
我看过很多 C++ 同学的简历,基本人手一个 Webserver 项目,就是基于Linux 网络编程做了一个项目,而实际上后端开发岗位并不需要你来写底层的网络编程的。
后端工作中最常用的是 mysql、redis、mq 这些组件,而很多 C++ 同学针对后端组件的学习都比较薄弱,并且做的项目也没有用到这些后端组件,所以很容易觉得你所掌握技术栈和后端岗位不符,相比于 Java 和 Go 同学就没有优势了。
互联网公司基本没有 C++ 后端岗位,后端语言主流都是 Java 和 Go,主 Java 的互联网公司有阿里巴巴、美团、快手、京东等等,主 Go 的互联网公司有字节、腾讯、滴滴、百度等等。
互联网大厂里有 C++ 后端岗位的就是腾讯,但是腾讯你懂,要进去还是有点难度的,而且腾讯很多项目都开始转 Go了,原有的 C++ 后端项目也是老项目了。所以,C++后端岗位能投的公司本身就不多,自然面试机会就少了,今年美团是发 offer 比较多的公司,美团基本都是 Java 后端开发,所以整体上,今年 Java 同学的秋招是比 C++ 好很多的。
有同学就说了,不是说大厂对编程语言不太看重,主要看重的潜力吗?
是的, 这句话是没错,也有 C++ 同学面进美团转 Java 的,能用 C++ 进互联网后端岗位同学的简历,我也看过,他们简历上项目还是会涉及 mysql、redis、消息队列这些后端组件的,虽然说语言上不匹配,但是后端方面是匹配的,所以关键要让面试官知道你是有后端开发的能力,而不是 C++ 开发的能力。
但是用 C++ 进互联网后端岗位还是少数人,既然都需要转语言的话,招聘方肯定更愿意招本身就熟悉 Java 或者 Go 同学, 毕竟培养新人也是有时间成本的,直接招语言匹配的,能更快上手工作。
C++ 就没机会了吗?
这次讨论的是 C++ 求职后端开发没有优势的问题,如果你明确是要求职后端开发岗位的,建议还是转 Java 或者 Go 语言,这两个才是后端开发主流的编程语言。
另外,C++同学也可以去投互联网客户端开发岗位,这个岗位就不需要后端的内容,面试的内容主要就围绕 C++、网络协议、操作系统、算法这几大块,正好都是大部分 C++ 同学所掌握的内容。
C++ 虽然在后端开发岗位不占优势,但是 C++ 就业的范围还是很广的,嵌入式行业、游戏行业、网络安全、工业软件行业都有 C++ 开发招聘需求,但是不同方向准备的项目就要不一样了,嵌入式行业的求职,你得用单片机做过嵌入式项目才行,比如智能小车、智能机器人等等;游戏行业的求职,就需要注重网络或者游戏类的项目;工业软件的求职,就需要注重 QT 客户端开发。
所以,C++ 是万金油没错,但是得在 C++ 基础上做这些行业相关的项目,才能增加竞争力,而不是用一个 webserver 打天下。
Java vs C++
C++ 同学很大一部分学习时间,都花在语言方面了,看过《C++ Primer 》、《effective C++》、《STL源码剖析》、《深度探索C++对象模型》这些书,可能才能比较好的掌握 C++ 的特性和底层实现,这些书都是很厚的,能坚持看完的还是少数人。
可能会出现一种很有意思的现象,C++同学学了好几个月,都还在学语言特性, 而 Java 同学,可能都做了 1-2 个项目了,主要也是得益于 Java 生态方面发展了很多年了,都一些标准的框架,拿来即用的,开发项目的成本底很多,而 C++开发一个项目的成本还是很高,如果项目引入 mysql 和 redis 组件的,编译还得引入这些动态库这些,关是这编译项目这一步,就卡住很多同学了。
稍微吐槽一点,C++写 sql 真实一言难尽,直接 string 拼接(在大厂也是一样),而 Java 和 Go 都有成熟的 orm 框架,SQL 和业务代码都做了隔离,项目的代码风格会更好,上手门槛更低。
C++ 因为能直接操作 Linux 系统编程和网络编程的函数,所以 C++ 是比较适合和底层打交道的,相反 C++ 的应用框架生态不如 Java 和 Go 成熟,所以 C++ 就不太适合做上层的业务类型的开发。
只有腾讯这种大厂,才敢用 C++ 做后端开发,因为他们花了很多人力,自研了自己的一套框架,而其他中小公司是没有这个实力和时间来搞这套东西,所以中小公司都是用 Java 或者 Go 来作为后端语言,Java 有开源的 Spring、Springboot、Mybatis、spring cloud 的框架,Go 有 gin、gorm、go-zero框架,都是拿来即用的,就很合用来开发后端业务。
学历好的同学,用 C++ 进华为、中兴这类通信类的公司也是可以的,这类公司主要是注重性能,偏向底层软件的开发,而不是后端业务开发,所以学 C++ 没毛病。但是如果单纯只会 C++,后端开发技术栈没学多少,学历再好,也很难进互联网公司的后端岗位,想往后端发展发展的,还是建议学 Java,因为它就是为这个后端行业而生的语言,即使互联网公司进不去,还能去求职国企、银行,这类公司同样也是以 Java 为主。
学历没有优势的同学,想往后端方向发展的,别冲 C++,大厂进不去,小厂C++后端岗位需求也少,到时候求职就很难受了,中小厂的后端公司主要以 Java 为主,岗位会比较多,学历没有优势的同学,学 Java 会更好,能获得面试机会也会更多一些。
当然 C++ 不是非后端不可,想往嵌入式、音视频开发、图像处理、游戏开发、工业软件方向发展的,那还是得选择 C++。
虽然 C++ 可以投的岗位很多很多,但是C++ 同学不要用 webserver 一个项目投天下,不然会输的很惨,而是:
C++ 结合后端项目(应用 mysql、redis、mq 的项目),投后端开发岗位 C++结合嵌入式项目(应用 stm32 单片机、机器人的项目),投嵌入式开发岗位 C++ 结合音视频项目(应用 ffmpeg、视频编解码的项目),投音视频开发岗位 C++ 结合游戏项目(应用Unity、Unreal游戏引擎的项目),投游戏开发岗位 C++ 结合QT客户端项目(应用QT的项目),投工业软件开发岗位
最后,说一句,语言没有高下之分,任何一门主流语言,无论是C++还是Java,只要付出努力,都能收获成功。
每个语言适合的行业是不同的,选择行业的时候,最好先做好功课,看下这个行业主流的语言是什么,而不是学校学了这门语言,你就用这个语言,投所有行业的开发岗位。