在上一篇随笔<软件架构师之职责范围>中评论,yongfa365希望能看到.NET高级软件工程师的职责范围。我思前想后,还是决定说一下自己在这方面的愚见,希望大家不吝赐教。

  什么是“高级软件工程师“,这个职位到底该做些什么,相信大家都有答案。在目前很多国内软件企业中,如果你是”高级软件工程师“,那么从需求分析

,设计,开发,测试,甚至到客户这一条龙都可能由一个人来负责。那么这个职位到底该做些什么呢?下面是我的认识。

  1,软件开发与测试

  首先,软件开发是软件工程师职责的基本组成部分,这点应该没有问题。其次,此处的软件测试可分为开发前的驱动测试,和开发过程中的白盒测试驱动测试用于分析子系统/模块内部逻辑,用于在开发之前暴露开发过程中可能遇到的大部分问题和对子系统/模块进行更进一步的划分;白盒测试是保证在项目交接到测试团队手中时,能满足基本的项目要求,即能够进行α测试。另外,驱动测试因团队而异,并非必须,但个人更推荐这么做。


  2,子系统/模块分析设计

  在软件架构师做完系统设计,项目经理进行项目分工后,项目就正式进入开发环节。这时候每个软件工程师会拿到自己负责的子系统/模块,首先要做的就是进行分析设计,其次才是开发。开发前进行分析设计,便于从整体上对子系统进行把握,提前隔子系统中的变化点和问题,同时也可以对子系统进行更详细的划分,用于制定个人的工作计划,与项目经理和软件架构师进行具体的沟通。

  在这点上,要及早认识到并不是只有架构师才需要进行软件设计的,软件工程师一样需要,且是必备技能。相信有很多人拿到自己的任务时只是跟项目经理进行简单的沟通,知道自己要做什么,就开始闷头写代码了,这是非常不可取的。

 

  3,撰写文档

  在进行子系统和模块设计的同时,要撰写子系统设计说明书;在开发过程中,要记录技术要点和发现的问题,同时如有需要,要修改子系统设计说明书;在白盒测试时,要记录每个Bug。以上这些文档是为了方便以后进行项目维护,工作交接,问题分析,个人总结等等。

 

  4,定期主动沟通

  在项目开发过程中,项目经理需要和团队中的每一个人沟通任务进度,其主要职责是从整体上把握和控制项目的进度。那么作为团队一员的高级软件工程师通常会负责项目中很重要的子系统/模块,这些子系统/模块往往能决定项目的成败。因此定期主动与项目经理沟通解决遇到问题,与架构师和专家沟通解决技术难题就显得非常重要了。另外,就对个人而言,定期主动沟通也往往表现为个人的主动积极性,对于个人长远发展非常有益。 

 

  5,持续学习

  也许有人会觉得学习应该与职责无关,狭义看来确实如此。然而,不断学习新知识,提高个人技能,于公司而言,能提升工作效率;于个人而言,益于职业发展。因此,工作之余,不管你职位如何,持续学习就显得非常重要且必要。 

 

  6,带新人

  这点也许不是硬性要求,然而据说国外有高手带领新手这样一种师徒习惯,我们也应该学习并发扬。通常情况下新人会与高级软件工程师协同工作,因此带新人一方面,带领新人可以有重新审视自己知识的机会;另一方面能够让新人更快入手,降低学习成本和提高工作效率;同时也能保持良好的人际关系。

 

  以上是个人对高级软件工程师职责范围的认识也许有些比较牵强,然而就对职业发展而言,要想做好高级软件工程师,上面几条是平时工作中必须要做的。

备注:第六点是根据 宇智波Q和 yongfa365 的建议补充。

posted on 2010-08-10 22:26  倪大虾  阅读(9752)  评论(39编辑  收藏  举报