如何评价一个程序员的能力级别

发布于 更新于
我好像有点严格

背景

时隔大约一年,由于某些原因,我们项目又开启招聘了,这次依然是招聘一个前端研发工程师。

之前我也感慨过,“当面试官”也是一项专业技术能力,用进废退。为了尽量当一个合格的面试官,最近几天还是花了我一些时间来复习面试题库、技巧、评价标准等工作内容的。

不过至少经验还是在的,最近几天看了一批候选人,我自己感觉相比于一年前,这次的我更加冷静(甚至更加冷酷),更清楚我需要一个怎样的优秀打工仔,看人的眼光也更准了。

之前我在这篇技术月刊的最后一个章节已经分享过我对于P5~P8级别程序员的能力水平的理解。这次我想以管理者(前端组长)的角度,用更贴近真实工作的语言,来重新表达一次。

(注:我在本文中所描述的四个级别,不对应任何公司的职级体系,也不对应对任何具体个人的评价,仅是一种通用的称呼。)

初级程序员

参考工作年限为1年上下。由于大学教育内容与实际工作内容相差太大,因此他们必须花费足够的时间来重新学习,即使对于优秀的科班毕业生来说也无法避免。

这个程度的程序员,对我来说连牛马都算不上,是纯纯的负资产。因为他们的工作产出经常无法达到我的最低要求,为了指导他们我所花费的成本甚至可能大于他们的产出。

那我们为什么会招这样的人?

便宜?不能说绝对没有这方面的考虑,但至少在我这里、在现在的我们公司这里,便宜绝不是主要因素。

实际上,我会要的“初级程序员”,是能够预见在半年左右时间内提升到“高级”水平的那部分好苗子,是作为“准高级”招来的。

不过也有一种观点,或者说在某些工作需求场景下,可以考虑用初级程序员来做简单无脑的工作,在低成本和低收入之间榨取利润。这是一种方案,但是我没有把握执行好这种方案,或者说这样的方案中根本就不需要我这种特质的人存在。

高级程序员

参考工作年限为3年。他们是常规业务工作的主要执行者,工作中应该能够在已有框架的基础上、独立完成填充业务的工作任务。

在面试中的表现重点在于“基础扎实”,即,熟练使用常见框架、了解核心原理(八股),顺利解答easy级别的算法题或者情景编程题,并有足够日常工作所需的软技能,包括IDE、通讯办公软件、翻墙梯子等。(看起来每项要求都好像不高,但是实际上每一项都会刷掉大把的候选人。)

其中,对编程能力的考察,并不是要在面试过程中短短一二十分钟内就写出完美无暇的代码,而是至少要有明确的思路、能够顺利搭建出主要的逻辑框架,漏掉一些边缘case没关系,不能一脸懵逼交白卷或者错得太离谱。

看起来好像还在程序员金字塔的中下部,但实际上这个级别的程序员对应着足够打败大多数同龄人的薪资,这样的好工作,准备面试就不能太随意了吧?

资深程序员

参考工作年限为6年。他们是核心技术骨干,能够撑起一个方向的全部工作,包括突破难点。

例如,一个资深后端、一个资深前端、一个资深产品(再加上一些公共支持资源),这样一个3人创业小组应该要能够解决一个产品生命周期内的所有问题,公司高层对他们应该只有期待和授权,而不需要明显的担心或者支援。

在专业技术上的表现关键词是“达到或接近常规技术的天花板”,在面试中表现没有明显的不足,对业务有足够的广度和踩坑经验,在专精领域内可以讲解得非常深入、甚至讲出一些面试官都不知道的细节。

他应该是一个聪明的人,具体来说,他应该掌握了通用的学习方法,即使在一个(主业相关的)新接触的领域,也能用相对较短的时间达到高级以上的水平。

多数人都可以通过努力迟早达到这一级别,同时绝大多数人的职业生涯最终可能也就卡在这一层。

专家

在“术”之上,则需要悟“道”了。需要一定的天赋或者机缘才有机会达到这个水平。

这种人的存在就是价值,由专家带队或者深度参与的项目,应当有较大概率做成甚至做出优势,而不仅仅是做出来。

由于数量相对稀少,因此他们的专长可能五花八门。可能有研究型专家对某个领域有局部主导的研究实力,可能有行业专家带着起起落落又落落起起的传奇经历,可能有人形魅魔总是能够激发其他同事的干劲和潜力,可能有营销专家跟他的狐朋狗友谈笑间白银万两。

对于技术专家来说,我觉得最重要的在于“动脑”——不仅仅是学习的那种动脑,而是总结和创新的那种动脑。用实践修正理论,用理论指导实践,不断迭代,最终升华,得出属于他自己的核心理论。这种核心理论可以是某种抽象原理,也可以是某种最佳工程实践,甚至还可以是某种政治手腕,关键在于它经得起质疑,经历过验证,它能产出独特的价值并且无法轻易被别人学习和模仿。

这种人在公司往往是明星员工,而且与他们交流时会发现,他们对事务的关注重点往往与一般人不同。

这个级别所对应的职位一般不会通过公开市场招聘,不仅仅是因为价格或者政治,还可能有“成功难以复制又容易被过高的期待打脸”的因素。因此我在这里说的几乎很难用现实来验证,仅仅是我个人正在努力的方向,供大家参考。