本节书摘来自异步社区出版社《告别失控:软件开发团队管理必读》一书中的第2章,第2.4节,作者: 【美】Mickey W. Mantle(米奇 W.蒙托) , Ron Lichty(罗恩•利克蒂),更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.4 程序员的工作要求与能力
要想成功地招聘和管理程序员,首先要认识到每个程序员都有其独特的能力。就像雪花一样,任何两个程序员都不会是完全一样的。我们常常会说,程序员之间写代码的能力可能相差一个数量级。这种差异是怎么出现的呢?教育、经验、天赋以及直觉,还有其他无形的因素,都有可能导致这样的差异。
多数程序员不需要借助显式的排名或者头衔,从直觉上就能理解同行之间的差异。但是如果能把程序员的类型与等级正式记录下来,并简要描述每种类型与等级的职位要求与能力(见表2-1),那么管理工作将会轻松很多,项目经理将更容易找到各种任务和项目的最佳人选,高级管理层也将能对组织及其构成有更深刻的认识。
每个程序设计等级[3]都关联着一组评价标准,程序员必须符合相关条件才能被录用或者提拔到该等级。当然,对工作年限的要求不是绝对的,但可以用于粗略地指出相应程序设计等级所需要的经验。每个程序员都有自己独特的技巧和经验,上述提法并不意味着很有天分和经验的程序员会因为工作年限不够而受到压制。最后,评价程序员不能看他们在入职时能带来什么,而要看他们在入职后能产出什么。
根据Ron和Mickey的经验,最优秀的程序员往往并不是最有经验的,也不是薪酬最高的。希望大家不要把这种情况看成一个问题,而要将其视为一种机会——用更高的薪水或更好的特殊待遇对出类拔萃的程序员进行奖励的机会。一旦有了程序员等级,这样的奖励将会更加恰当。我们为明显很优秀的程序员争取奖励时极少会遭遇来自高级管理层的阻力,不过这样做也会影响对表现欠佳的程序员的处理。
表2-2展示了前面讨论过的不同程序员类型,应当如何安排程序设计等级。
制定一组能够与程序员的成长相适应的、要求逐步提高的程序设计等级评判标准是非常重要的。表2-3给出了针对客户端程序员的等级评判标准。本书最后的“工具”部分提供了一份完整的等级系统示例,读者可在修改后应用于自己所在的组织。
当然,对于这个程序设计等级的描述来说,你真正想要的是每种职位的详细职位描述。程序员以崇尚自由和轻视正式文件而闻名,但根据我们的经验,程序员也非常希望获得职位描述,非常希望清晰地了解所在组织的晋升之道。尽管也存在一些例外,但绝大多数程序员在有了这套体制,并清晰地知道你和组织中的其他管理层对其所处等级的看法之后,会干得更好。
制订详细的职位描述是一项非常艰巨的任务。在过去的15年中,Mickey探索出了一组能反映前述程序设计等级的结构化的职位描述。图2-1以程序员3为例,给出了这些职位描述的基本格式。
如该例所示,职位描述包含以下三部分内容:
基本信息,包括头衔、部门、直接领导、状态、工作地点;
职位概述,包括工作职责和预期表现;
岗位最低要求。
这一格式稍作改动之后,几乎可用于任何职位描述。但我们建议大家不要只写一份职位描述,而要多写几组,以体现不同工作的能力要求。根据我们的经验,写一组职位描述所需要的时间比只写一份职位描述多不了多少。如果每个职位都有一组职位描述,就能很容易地回答职业发展和晋升方面的问题了。前期多花几分钟,后期能节省好多个小时的时间。这样做的话,你不仅会成为HR部门眼中的英雄人物,还能获得一件有助于管理程序设计团队的优秀工具。
本书最后的“工具”部分提供了一些职位描述的示例,你可以根据所在组织、部门和职位的具体需求加以修改使用。