程序员有两大职业通道:管理路线和技术路线。
互联网企业中,软件开发的环节有:需求搜集、需求整理和成型、调配资源。连接所有环节的一个角色是产品经理。产品经理,在公司职位架构中,无论是否被赋予制度上的管理权限,所做的工作,实际上都是管理工作。管理属性,在“调配资源”这个环节,得到充分体现。
所谓调配资源,是在决定开发某项功能之后,根据现有的开发资源情况,指定UI人员、开发人员、测试人员在一定时间段内完成功能开发工作。这些环节中的每一个人员,理论上只需要负责自己这个环节。实际上,任何环节的人员都不是在一个独立的闭环中。一个环节的工作,往往需求其他环节配合。沟通顺畅时,一个环节的人若需要其他环节人员配合,会自己去沟通。一旦沟通不顺畅,可以要求产品经理去协调。这是他们不可推卸的岗位指责。我经历的公司虽然没有明文规定这些,但各岗位人员会知道这些“游戏规则”。
在软件开发中,工作分为两种。
第一种,是软件开发这项工作本身。对程序员而言,是指数据库设计、代码编写、代码调试等纯粹的产出实际的软件产品的工作。这是专业性很强的技术工作。
第二种,是保证软件开发的所有环节有序、高效进行的安排、协调工作。这是管理工作。
软件开发日益复杂,需要管理。如果只有一个程序员,需要开发的功能只有少数几项,程序员能够做完需求收集和开发工作。当需求越来越多,程序员若继续自己搜集需求,会忙得不可开交,开发时间将会被大大挤压。许多程序员并不具备高超的沟通技巧和职位权力。若沟通不顺畅,非但开发时间被挤压,团队的融洽程度也会受损。再严重一些,会导致人才流失。
用古代社会运行体系观念来描述互联网软件开发,从事上述两种工作的人,是统治与被统治的关系。统治者是官,被统治者是老百姓。用现代政治理论描述,就是服务与被服务的关系。产品经理那类人,是为各个环节的专业技术人员服务的公仆、服务员,并不高人一等。
中国某些年轻的互联网企业创始人认为,“劳心者治人,劳力者治于人”。可悲,这种封建流毒思想,在其源头领域,都已被官方主流价值体系抛弃,却在最具国际气息、最新的互联网企业中存在。大氛围如此,除了那些管理者具有“统治者心态”,广大技术人才也深受其害,觉得年龄大了再做技术工作很没有面子。
管理不等同于统治,更应该是服务。它是社会分工日益专业化和需要高效产出催生的。听从别人的安排,不是屈服于别人的淫威,不总是被安排的人迫于压力而不得不服从安排工作的人。技术人才按照管理人才的要求做事,类似于病人按照医生的要求调理身体,类似于公共场合逃生之时按照其他专业人员的正确指导去逃生。认识到这点之后,技术才按照别人的管理或者分工或者安排或者协调去工作,还会觉得自己没有面子、是被统治的一方吗?工作不是赌气,不应该有义气之争。工作的目的,是更高效地完成工作。好的管理,其实可以让技术人员更舒服一些。
管理人员本身不直接创造价值,技术人员才会直接创造技术价值。在中国互联网企业中,仍然存在很强的“官本位”残余思想,缺乏对专业技术人员的必要尊重。这也是大量程序员过早走上管理岗位的原因之一。
互联网企业中,和软件开发有关的管理岗位有:产品经理、项目经理、技术经理和技术小组长。不同的公司,岗位设置可能有些不同。
产品经理,不再分析。
项目经理,是保证项目按进度推进的管理岗位。产品经理,在某些公司架构中,从属于项目经理,管理工作被砍掉,回归其需求分析、文档撰写等专业工作。项目经理的工作技能,包括“上传下达”的沟通协调能力、理清需求、提炼需求、阐述需求、甚至提供实现方案的能力。此岗位,不需要懂技术。
技术经理,是专业人才中的管理人才,专门管理技术人才,负有指导技术人才、确定技术方案、规范技术工作、分配具体工作任务、对外对话的职责。他们往往不需要参与具体的代码编写。他们是否编写代码,视公司人员配置而定。人员充足的时候,这类人有权决定自己是否写代码。
小组长是一线技术管理者,也是专业技术人才,需参与大量代码编写(视公司规定,这类人可能不需要编写代码)。他们是降级的技术经理,突出职责是对内分配工作任务,对外是组内技术人才的接口。组外有问题需要本小组处理,不会直接找到某个组员,而是先找到小组长,再由小组长去处理(要么他自己处理,要么指定相应的人处理)。
上述都是带有管理成分的岗位。高层级的技术人岗位是:技术专家和架构师。
技术专家,是处理非常高难度技术问题的技术人才。这类人也许并非每天都有技术问题需要处理,但却是一种人才储备。他们是企业抵抗技术风险、保证技术领先的财富。
架构师,应该是在大型、复杂系统中才需要的岗位。一般情况下,主力程序员充当架构师角色。
CTO,更偏向管理岗位的职位,和技术已经并无太大关系。
程序员不能一直停留在普通开发人员的角色。这里的普通开发人员,指做普通功能开发的人员。总做这些工作,不能提高技术水平,不能提高管理水平,不能获得与年龄应有的社会对大龄人才应有的期望(大龄人才,应该具备初级人才不具备的、短期之内无法获取的职业技能)。
产品经理、项目经理,所需技能专业性弱,核心竞争力是沟通协调能力和其产品经理、项目经理经验。程序员若要转型为这两个岗位,内部转岗应该优先选用。若外部转岗,HR在挑选简历的时候,会因为应聘者没有相关经验而直接舍弃。
技术经理和小组长,有两个产生渠道:外部招聘和内部产生。外部招聘的决定因素是应聘时表现出来的技术水平和先前的工作经历。工作过的公司越好,做过的项目越有知名度和技术含量,应聘成功的可能性越高。“马太效应”在此表现特别明显。内部产生,决定因素主观性很强。它取决于平时工作中,候选人给相关同事留下的印象:专业技能好不好;沟通中有没有树敌、让别人爽不爽。不会做人、语言表达能力差的候选人会非常吃亏。
需要警惕的是,有些公司把技术经理和小组长打造成不写代码的管理者。技术能力是技术人才的立身之本。养尊处优,丧失了技术优势,换工作的时候,可能无法通过面试中的技术考核。
程序员脱离普通开发人员的第一步,便是成为小组长。
技术专家,是大公司才有的岗位。非计算机专业的低学历者,无法凭借普通公司的工作经历获得此岗位或职级。拥有名副其实的专家技术水平,再加上高技术含量、出名的开源项目,或许有助于获得此岗位。
架构师,或许可以等同高级或资深工程师。
程序员不可过早转型产品经理、项目经理这类管理岗位。想转的时候,随着程序员经验的丰富,机会很多。转岗之初,工资是否下降?通过何种方式转岗?目前没有接触过现实案例。今后留意。
程序员想在技术路线上走得更久一些,最根本的措施是提高技术水平,同时对内要积累良好的口碑,对外要建立个人品牌。