从一个软件开发技术大牛的职业历程谈软件开发工程师前途规划
从正儿八经从事软件开发工作到现在也有4年半时间,我用了这些年的时间从一个初始的软件开发执行到软件开发组长,成为软件开发主管,再到软件开发经理甚至同时带着产品经理团队。这四年半时间积累了一些东西,但不敢说自己是软件开发技术大牛或者自己是软件开发专家。因为这些名头都是相对的,在菜鸟前夸夸其谈也会被人称作专家大牛,但真正说软件开发技术到了什么阶段,其实在整个软件开发领域里面也仅仅在某些方面是比一些人多了解东西,多接触了些东西而已。一直想写些东西,算是给自己这么些年做个总结,对软件开发这个职业做个总结。 当然也仅仅是个人的一些意见
在N年前,进了一家国内较知名软件公司,刚接触软件开发。虽然这个职业在国内已经发展了将近有十年时间了,但是对于初出社会的学生来说,还是相对陌生的(包括现在在软件开发相关学科里面很少有软件开发相关的课程)。那时候有一些自动化软件开发的概念,但是在大部分公司里面其实大多数还是手工软件开发,更何况是刚刚兴起的移动互联网行业,压根就没什么自动化的方式,完全手工。所以一天到晚都是拿个手机对着用例执行、参加各种评审会议、写个各种文档(虽然那时候有敏捷的说法,但是公司还是按照传统瀑布式的流程,于是乎难免就有很多很多文档,很多很多评审)。开始也没觉得什么,毕竟是自己选择的职业,也还算比较新奇的。但是久而久之就发现一些问题:
为什么在一个软件开发团队中软件开发的地位不高?为什么软件开发每天做的都是同样的工作,但是应聘要求要这个那个的?怎么规划职业发展比较合理?
那时候想想都想不明白,但是后来慢慢的都有了答案:
1. 这样一个软件开发团队中,软件开发仅仅是去验证软件是否按照产品的要求去完成相应的功能。不了解完成相关功能如何实现,从而在产品出来后如果有问题就比较被动。如果碰到一些可改可不改问题,开发就会说这个问题解决不了,这个问题就是这样不算问题,我相信很多软件开发都碰到过类似的情况。软件开发仅仅是当做一个用户这样去工作,这样一来软件开发的地位就很尴尬了,随便来一个人只要思维清晰一点就可以代替你的工作。从整个公司管理角度看到的情况就是,软件开发仅仅是来做功能软件开发的,这样的职业门槛很低,所以地位不会得到重视。
要如何去解决这样的问题呢?我目前的做法,软件开发介入产品设计阶段,介入开发设计方案阶段。在产品角度,软件开发对需求的把握程度比开发跟精确,更细致。而且通过对软件开发工程师能力培养,使之能够知道在完成这块功能的时候,需要怎么去设计,会用到哪些软件开发技术。
久而久之就会变成我部门目前的状态:产品经理出了需求后,软件开发和产品经理、开发做大量沟通。后续到软件开发阶段,软件开发俨然就是这个项目的产品经理了,会和开发讨论需求,并监督其在开发阶段按照需求来软件开发。另一方面,在软件开发阶段,虽然软件开发不需要给出一个设计方案,但是很多时候软件开发的方案往往会被开发主管直接使用,或者做参考,有时甚至为一个功能的实现方式争论。后期软件开发阶段,软件开发会按照一些自己的逻辑去执行,覆盖面明显有提高。
这样一来,产品的质量明显提高,软件开发地位也提高。
2. 第二个问题,其实分两个方面来讲。第一个方面,很多公司的HR有时候不大专业,在发布一个岗位招聘信息的时候,往往看了别人信息中写了会LR、会QTP等等等 就往上贴,也不会去考虑自己招的这个岗位具体是怎么个要求。有时候去跟这个招聘的需求方去沟通,相关的软件开发经理也就按照行业内的一些工具,不管三七 二十一就往上贴,显得自己要招的岗位是多么多么牛逼。这样就会出现一些纯粹黑盒软件开发岗位,要求精通代码。做功能的软件开发岗位,要求会用LR。
但是从我的个人角度来看,大部分的要求其实并不过分。一个软件开发如果仅仅做功能软件开发,有时候可能不会用到一些工具。但是如果想更深的去了解实现方式,稍微的代码能力还是需要的。对于不同的项目,可能会用到不同的知识点,可是千变万变就那么些东西,无非是代码,数据库,操作系统,缓存,算法 等等等等 。而其他的一些技能,是对自己提升身价有很好的帮助,也对自己职业发展有很好的帮助。所以我一直认为软件开发是对知识广度要求比较高的职业,既然选择了这个行业就要不停的去拓展自己的知识面。
3.对于第三个问题,也是见仁见智了。很多人选择软件开发转管理,转开发等等 都有。从我角度来看,软件开发发展一般有那么几种:
对软件开发技术比较感兴趣,肯往深的去钻研的,后期发展成软件开发软件开发技术专家,或者专开发成为开发领域的专家,抑或变成软件开发技术管理。对某些领域的软件开发,有很高的软件开发技术修养。
沟通能力,团队概念比较强的,转软件开发管理。当然专管理也是要看机会的。软件开发管理 就有一定的软件开发软件开发技术 和软件开发理论 ,但主要还是管理能力