有技术方向自然就有非技术方向,不过这里只讨论技术方向,谈谈我的理解。
不同的技术方向没有高低之分,不管哪个领域要达到顶尖都很难。朝什么方向发展主要跟个人的兴趣有关。
这是很大的一类,几乎所有的软件公司都需要前端工程师。喜欢做前端的人,一般都有一定的审美水平,甚至有点艺术天赋。喜欢直观,不喜欢复杂逻辑。一般不想深入业务,理解不了系统分析师所思考的问题。很多人(大部分)可以自己开发架设一个网站,前端后端都做,(一些人)从而以为自己有全面的能力,什么都可以做,这只是一种错觉。
也是很大的一类,就叫后端工程师吧。这类人对 UI 兴趣不大,一段时间只对一项技术或一个领域感兴趣,甚至是永远专注于一个领域。如 ETL、报表、工作流、数据库、搜索、大数据等。如果不断拓宽知识面,有可能成为架构师。如果专注于一个技术领域,有可能成为这个领域的专家。基础是否扎实决定了能走多远。
系统分析师是一个技术方向,因为系统分析师首先要有相当深厚的技术功力,对技术有全局的理解。同时,业务理解能力、梳理能力很强。要把错综复杂的业务需求转化成软件系统,业务建模能力极为重要,优秀的系统分析师就有这个能力。做前端的,或者没做过复杂业务系统的,可能对业务建模没有概念,或者认识不深。要做复杂的业务系统,系统分析师必不可少。系统分析师比较适合担任项目经理的角色。优秀的系统分析师可能也是一个合格的技术架构师。
这里说的架构师是指能力水平,而不是架构师的职位。很多职位叫架构师并不是合格的架构师,尤其是小公司的。要求基础十分扎实,知识比较全面,学习能力很强,对技术有很深的的理解。并不要求懂多少具体的技术,而是对技术有全局的理解,需要哪样都可以拿起来。架构师看的东西,可能一般人难以理解。可能前几天看并行计算,这两天看数据挖掘,可能过两天看神经网络,再过两天看数理统计。 架构师负责整个系统技术上的把控,要求从可行方案中找出更好的方案,而不仅仅是找出一个可行的方案。工程师需要务实的品质,架构师尤其需要。基于实际情况考虑解决方案,而不是个人喜好。有些架构师只关注纯洁术,在处理大数据、高并发等技术问题上很有经验,结合复杂业务进行设计的能力稍弱,这就需要系统分析师的配合。业务分析、建模能力很强的的架构师十分难得。
很多公司并不需要算法工程师,但在有的公司算法工程师至关重要。在有些领域,最核心的技术就是算法。不同领域都会需要算法工程师,但其中应用的知识可能是通用的。比如贝叶斯方法可以用在推荐系统中,也可能用在图像识别软件中;蒙特卡洛方法可以用在某个金融软件,对未来利率变化进行模拟,也可能用在计算机棋类软件中。 能做算法工程师,数学和算法都要有深厚的基础。同时,学习能力也很重要,最好能看懂学术论文,了解最新的成果。如果从书本摘个算法就能解决问题,就不需要算法工程师了。一个推荐系统,命中率 0.9 跟 0.8 可能就有本质的区别。最好的算法工程师都是有学术研究背景的。半路出家做算法工程师是不太可能的。
有些公司不需要安全工程师。必备的知识和能力包括,密码学原理,网络原理,协议分析,公钥体系,以及包括防火墙,入侵检测系统,操作系统,Web 前端安全等等。 和算法工程师一样,也是一个很专业的领域。人的精力有限,我不太相信一个架构师同时也是一个优秀的安全工程师,或算法工程师。
DBA 虽然随着 nosql 的兴起,关系型数据库的使用有下降的趋势,但 nosql 并不能取代关系数据库。在很多领域,事务性必须绝对保证,不容妥协。传统的 DBA 仍必不可少。 操作系统底层 做设备驱动程序、嵌入式系统、实时系统、虚拟化、甚至操作系统本身,都需要深入操作系统底层。