软件技术领域就业大纲(3)——编程语言
前言
这是软件技术领域就业大纲系列文章的第3篇,从Java、Go、C/C++、Android&iOS、Python等编程语言的角度,介绍一下软件技术领域的就业情况。
Java
后端服务器开发、终端上的Android开发。
这个是市场上招聘岗位最多的技术栈,从银行、运营商到软件公司、互联网大厂,从世界500强到几个人的创业公司,绝大多数的后端开发岗位都是Java。
但也是我最不想说的,实在是没什么可讲。
GO
互联网服务
国内在Go的使用上,主要还是后端服务器开发。
因为Go语言为高并发而生,特别适合互联网这种大流量高并发的业务场景。国内一些头部互联网公司,像字节、知乎、B站据说用Go比较多。
云计算
因为DevOps生态中占据垄断地位的Docker、K8s,还有prometheus这样监控系统,都是使用Go语言开发,所以在云计算技术体系中,往往大量使用Go语言。
其它
虽然也有前端、游戏的使用场景,但国内还很少遇到。
Java 还是 Go?
对于想走后端开发路线的同学,到底是学习Java还是Go呢?个人经验判断如下:
1、当一个人学校学历、实践能力等各方面实力比较强的时候,建议学Java。
因为Java是主流的后端开发语言,市场是供、需都大,一个人的公司、项目、职级、工作年限确定之后,市场上的猎头、招聘单位就能计算出这个人的价格,那些各方面实力过硬的人是不怕被计算的。
2、当一个人背景很差的时候,如,跨行转码、学校很差等,建议学Java。
对这部分人来说,找到工作是最重要的,中国市场上海量中小企业基于云服务和Java技术体系来构建自己公司的系统,学Java找到工作是最容易的。
3、当一个人综合水平中等偏上,想剑走偏锋,博一博那些需要跳一跳脚才能够到的公司时,建议学Go。
这个市场供、需都小,双方匹配有一定的随机性。需求是客观存在的,但第一梯队的人才都去卷Java了,第一梯队的公司从第二梯队的人里面选Go概率就比较高了。
这个逻辑跟下面要讲到的Android、iOS开发面临的情况很相似。
C/C++
高性能服务器开发
C++的运行效率高、开发效率低,在大型复杂工程开发中的生态完善度弱,所以,只有在对高性能有特别高需求场景下才会使用它做服务端开发,比如,处理音视频流的多媒体服务器、游戏服务器等。
网络应用
Nginx、防火墙、流量分析、监控、负载均衡、路由器、基站等,因为涉及到信号、流量的处理,且对实时性要求极高,往往都是C/C++开发。
大计算量软件
这里主要涉及到那些大量计算、图形渲染等工作的软件。
高性能的存储服务,比如,数据库存储引擎。
工业软件中的研发设计类,如,EDA、CAD、CAE、Matlab等。
搜索、推荐、广告场景,因为对实时性有极高的需求,有大量C++的开发商场。
多媒体&排版
图形、图像引擎类,比如,OpenCV,OpenGL、OpenCL、Unity、Cocos2DX、Unreal、Skia、QT等引擎,PhotoShop等大型工具软件。
多媒体处理类软件,如,OpenCore引擎、各类播放器、直播软件、短视频(抖音)、视频处理软件(Premiere)等,因为涉及到音视频多媒体流的处理,处理数据量大、对实时性要求高,往往使用C++开发。
排版布局类的,如,Office和WPS系列,Chrome、Sofari浏览器。
游戏终端
不管是PC端还是移动端,对游戏来说最重要的就是性能、体验,C++的运行效率高,十分合适开发游戏。
对于移动端游戏来说,Android、iOS两大平台的开发语言不同,厂商为了降本提效不可能完全做两套,就往往使用C++开发引擎、游戏核心,然后在两个平台上通过应用层加壳的方式来做。
操作系统相关
不管Windwos、Linux、OSX、Android,都大量使用C++。
围绕着操作系统的驱动开发,编译器、解释器、IDE等。
芯片配套体系,DSP二次开发、CUDA工具包等。
嵌入式
单片机、机器人等大量的终端设备上,存储、计算等可用资源很少,这时就需要C/C++这类运行效率特别高的语言。
金融软件
高频交易系统中,我的下单速度如果能比别人快几十毫秒,就会有大量的利润。股票行情类软件中,需要实时处理大量数据。
恒生、金证这类金融软件厂商,市场上做量化交易的私募公司,做交易终端产品的公司,都会有大量的C++需求。
终端安全领域
当考虑到源码级的终端安全防护时,Java、Python之类的语言是没有保密性可言的。
做加解密、安全认证之类的软件,自身源码逻辑需要极端保密的软件,往往使用C++实现。
终端安全需要定义好切面、收集数据,并以此制定防护策略,这些切面也需要C/C++开发。
就业方面来说,市场上的安全类公司,安恒、安奇信、绿盟、360等,都会大量招聘C++开发工程师。
汽车生态
三电把汽车变成了一个大号手机,汽车的软件化、智能化成为软件技术投入的重点领域,AUTOSAR、高性能计算平台、自动驾驶、智能座舱等,都在大量使用C++开发。
算法实现
算法是计算密集型场景,尤其手机、汽车、机器人等各类终端上的算法,非C++莫属。如果走算法方向,C++是必选。
综上,C++的适配领域是杂的,语言本身只是基础,工作前3~5年基本就到顶了,再往后发展如何主要看所从事领域在市场上的发展情况了。
Android&iOS
这两个平台的开发岗位在不到十年的时间内,经历了兴起、兴盛、衰落、低飞的全过程。
16年之后,市场上Android、iOS这些移动端开发供大于求,很多应届生慢慢不学了。但市场上对于移动端开发的需求虽然少了,但还是持续会有,基本会维持在一个比较低的水位。从概率上讲,那些愿意剑走偏锋学Android、iOS的人反而更容易获得大厂的offer。
从就业角度来说,如果是单纯进大厂,现在学习这两个平台的开发反而有优势。
至于远期发展,看似移动端领域狭窄,技术门槛和天花板低,但即使是市场供给充沛的Java,大头兵们不也是35岁就失业么。
移动端虽然市场整体需求小了,但除了主流的互联网公司依然会有需求之外,很是有很多领域也持续有需求的,比如:
服务人员,如,美团、饿了么、滴滴这类平台企业的供给端,商家、外卖员、快递员、司机使用的App、POS机、把枪等。
非手机智能终端设备,如,快递柜、电视机、零售机等等。
控制类App,如,新能源车主App,机器人等智能家居类设备的控制App。
移动端的开发跟随手机的发展而发展,如果随着5G、AI等底层技术的更新,一个新的消费级终端出现时,如,AR/VR等,移动端会再次兴盛起来。
Python
Python虽然上手极其容易,在大型复杂软件工程方面是有缺陷,但被广泛用于算法开发、数据分析等领域,可以说,它是一门牛逼的工具语言,但不是牛逼的工程语言。
AI&数据&计算
AI领域,主流的AI Infra,如,PyTorch、Caffe、TensorFlow基本都支持Python。还有很多算法库,如,Scikit-learn、XGBoost、LightGBM、Keras、Eli5、SciPy,以及NL领域的NLTK、SpaCy等。
科学计算,如,NumPy、Theano等。
数据分析,如,Matplotlib、Pandas等。
基于Python的这些特性,在算法和数据领域,Python成为最常用的开发语言之一。
脚本
因为灵活性很好,很多时候会拿来编写脚本,比如:
安全领域内,一些在工程方面要求不高,但又与算法模型联接紧密的地方,用Python实现比较多。另外,一些自动化地扫描工具,也会使用Python。
至于爬虫,纯粹是变化频率,因为对方变化一下,爬虫就得调整,不过工程复杂度低,特别适合Python。
由上面的分析也可以看出,指望着Python去应聘专业壁垒高的软件工程师是很难的,它所使用的场景,对于软件工程上的要求其实都并不高。因此,不建议走软件工程师方向的人花太多精力在这个语言上面。
前端技术栈
主要包括JavaScript、HTML、CSS等。
只要一个软件设计出来是跟人打交道的,就需要有界面。前端因为跨平台、开发成本低的特点,不管是PC网页、手机H5、微信小程序,还是五花八门的终端电子设备,只要配个浏览器内核,再开一套Hybridge API,就可以低成本又高效地开发前端页面,同时还能尽情调用终端设备的一切能力。
前端开发领域,除了基础技术理论、软件工程师理论之外,对找工作来说最重要的就是框架体系了。
目前市场上最主流的两大框架:React、Vue。React在互联网大厂使用的最多,而Vue用于很多中小企业,toB/G的项目中。
如果大家的就业目标是互联网大厂,最好走React路线。
其它
国内市场上,除了上面这些主流的语言之外,还有其它很多非主流的,如,C#、PHP、VB、Delphi、Perl、Ruby、Rust、Scala等,但我已经没有分享的欲望了。如果想走软件技术路线,不要轻易进入那些非主流领域。因为技术学会了是要卖的,小众市场里面生意会很难做,且不说待遇高低,合适的坑都很难找到。
#Java##C++##Go##Python##iOS#该系列文章都是作者花费大量业余时间整理、分享出来的,建议软件技术方向的同学收藏、阅读。