软件开发工程师可以分为应用型、研究型和胶水型三种。
所谓应用型开发工程师,主要做行业应用开发,比如一个医疗挂号系统、一个OA系统、一个电商网站的商品展示模块、一个流媒体平台的广告管理系统等等。他们的主要工作,是了解业务,使用某种编程语言+某些框架,结合数据库等数据处理手段,实现业务需求。简单讲,是搭积木。其发展方向是:如何更好的搭积木、如何把搭积木搭得更有效率、如何使得搭出的积木建筑更稳定更易于维护和扩展。
应用型开发工程师在软件开发工程师中占比最大,其门槛较低,薪水较低,未来发展空间比较有限,工作5~8年,技能水准和收入基本都会见顶,这也是你看到开发者群体整天讨论35、40这种年龄歧视问题的原因。(参考:你的收入何时见顶?怎么办?)
见顶后基本出路如下:
-
横向复制、螺旋成长,即不断用已有技能做新项目,在最新项目中淬炼已有技能或根据需要学习一些新技能。这些新技能,基本也都是应用型的。大部分开发者在这个道路上挣扎。
-
转管理。这是很多人选的路,不过从概率上看,15~20%左右的开发者会走上管理路线。
-
做架构。一个技术方向足够深,然后拓展技术宽度和视野,立足业务,成为T型人。能做到这个程度的,在应用型开发者群体中,也算是出类拔萃的。
-
转型做其他的工作。
所谓研究型开发工程师,主要做算法和底层构件的开发,比如音频算法、机器学习算法、图像处理算法、网络传输算法等等。他们的工作,更为专精,基于抽象的算法或者底层模块来解决偏技术层面的问题或者已抽象为技术问题的业务问题。
常见的研究型开发工程师,有音视频算法工程师、机器学习算法工程师、深度学习算法工程师、图像处理算法工程师、数据挖掘算法工程师、推荐算法工程师、搜索算法工程师、自然语言处理算法工程师、语音识别算法工程师、数据科学家等等。
这些方向有几个特点:
-
学历和专业要求高。很多公司的JD中都标注数学、物理、计算、模式识别等相关专业硕士或博士。这一点去拉勾或猎聘都说我说的职位就可以确认。
-
需要持续不断在一个方向积累,既有知识、技能和经验非常重要。
-
报酬高。50k、80k一个月的JD,相当不少,做这类工作的,年薪百八十万的大有人在,翻过百万达到百十多万甚至数百万的,也不少见。
-
职业寿命长。这是由工作性质导致的——算法本身的更迭没那么快,而且往往是渐进性的。比如神经网络是几十年前的东西,这几年又大放异彩;比如噪声抑制、语音增强,都是发展了多少年的算法和技术。
在研究型开发工程师中,又有两类,一类是只做算法研究和实验,不怎么写代码的;一类是负责用编程语言把第一类研究的算法实现出来的,这类也要求很深的算法功底。
研究型开发工程师的未来方向比较明确:专家。
所谓胶水型开发工程师,是介于研究型和应用型之间,比如做SDK开发和API设计的,这类工程师,一方面衔接底层的算法,一方面对应用层提供接口。
胶水型工程师的要求比应用型要高一些,需要理解算法,需要有更好的程序设计能力。
这类工程师,更多存在于比较大型的公司或者转做技术解决方案的公司,因为只有这两类公司,才会投入资源在技术上做分层架构