在《程序员》第9期上的一篇文章,张海鹰的《修车师傅和软件项目管理者》,很形象的说了一个程序员成长的故事。文中指出了一个程序员的职业选择,和以后的发展方向。
在作者的工作环境中,也许看到的是这样的一种“路线”,初级程序员->高级程序员->项目经理。这的确是一种职业的发展路线,但肯定不是唯一的。
软件开发的团队组织结构还是有一定规律的,组织结构是否合理,也确定了这个组织能否发挥组织中各人的最大能力。
对于一个中等规模的开发团队(10-50人),从管理上可以分为两种路线:技术管理和项目管理。在一个组织中,技术管理的最高职位是“软件架构师”;项目管理的最高职位其实就是高级经理,所有的项目经理向他汇报工作情况。
在技术管理的路线上,可以有这样一种组织分布:
“核心技术小组”负责项目的核心库的开发,提供项目小组基本技术支持,并且完成“修车师傅”的“点拨”责任。核心技术组直接向技术总负责:构架师汇报工作,并负责实现构架师的技术设想。从组织结构上看,核心技术组并不是直接归属于项目本身的开发小组,成员都是由资深高级程序员组成,也就是“修车铺的师傅”。
在项目小组中,负责协调核心技术组和项目组初级程序员的是“项目小组组长”,这一职位一般由高级程序员担任,要完成这一工作,此人不仅需要具备技术理解能力和技术学习能力,还要有足够的沟通和协调的能力。在这样的组织结构中,项目组长的角色其实很关键,他必须应付来自3个方面的压力,所以作为他的领导“项目经理”必须要对他有足够的理解和支持,帮助他协调各方的利益关系,这也是项目经理的职责之一。
这样的结构,也可以比较明显的发现程序员自身发展的方向,如果自身在项目小组组长的位置上工作一段时间后,根据自己的特长,可以选择2个发展方向:进入“核心技术组”继续技术研发的生涯,或者选择上升为项目经理,进入管理生涯。
确实“项目管理”和“技术管理”是2种需要不同能力的职业,应该有不同的选择。当初级程序员在数年的工作后,积累了一定的经验,这样的经验同样也会来自不同的方面,应该包括技术经验和管理经验,就看自己的性格特点了,看哪方面更合适,总有一个方向可以发展的。