小土刀

招聘与工程师文化

当学生的时候以为面试是最后一步,角色调换,才发现面试其实是第一步,万里长征的第一步。


现在看来,刘未鹏五年前的一篇文章 - 《怎样花两年时间去面试一个人》 - 仍旧非常在理,提出利用书单和 Github 来作为衡量的指标。我在中国和美国都找过工作,深刻意识到了目前的招聘流程在根基上的错误(这里主要指 IT 和互联网公司)。自己走上工作岗位后,一直在思考如何去改变这样的状况,最近有了一点初步的想法,在这里跟大家分享一下。

技术面试的局限

国内的招聘我经验不是太多,主要结合我在美国的面试经历,来说说目前技术问题的局限所在。

以做算法题目为主的技术面试和现行高考制度的处境有些类似,即大家都知道有这样那样的问题,在没有找到更加合适的方式之前,却又不得不采用这样的方式。尤其在美国这个多元化的社会,『刷题』确实是最简单粗暴成本低的筛选方式。而有些小公司会在算法题目面试之后给面试者一个星期左右的时间做一个小而具体的项目,以此来检测面试者的具体水平,这种方式对于公司来说省事儿,但对于面试者来说却是挺大的负担。

通过若干轮算法面试来了解一个人,可能不比生辰八字星座什么的靠谱很多,面试内容和工作内容的巨大差异,往往会带来连锁反应:招了不合适的人、培训成本增加、团队建设难度加大,最终成为非常平庸的团队。更何况,道高一尺魔高一丈,从最近几年各类算法题网站的发展就可以看出,整个技术面试已经越来越偏离原来的轨道,造成了人力物力的极大浪费。

那么,怎么办呢?

对于大公司,因为人才的需求量大,这种方式能够保证不太低的下限,有足够的高质量零件让大机器运转。再加上名声在外,不愁没有人来,三个臭皮匠不够,那三十个说不定就够了,这是一种思路。

反观小团队,重要的是质量不是数量,需要的是有较强主观能动性,真正能够独当一面的人,同样用普通的『刷题』面试,就有些缘木求鱼了。目前阶段,我无意加入大公司,因此下文的想法,基本是针对中小团队,以及由中小团队像大团队转变中的一些想法。

一些尝试

刘未鹏提出的方法是『书单+GitHub』,这个组合相当于一个两年左右的面试。没有什么面试比持续两年的面试更具有信息量。还有其他的一些方式,比方说从社交网站入手(微博、推特)、从豆瓣读书的书评入手、从技术博客作者入手等等。这些方式的问题在于人力密度大。所谓人力密度指的是为了招一个人所需要的工作量,像这类通过拉长面试流程(即调查面试者过去可衡量的工作)来保证质量的做法,通常来说是比较麻烦的,可能招十个人的工作量,就是招五个人的工作量的两倍,即扩展性太差。

还有的做法前面也提到过,就是给一个虚拟场景中的具体任务,比方说把一个以 JSON 格式存储的文件转换成 XML。像这种问题不难,但是解法很多,背答案没多少意义的问题,才是好问题。通过具体的问题,可以观察到面试者解决问题的诸多细节:编码系统、异常处理、思维逻辑、开发效率、沟通交流等等。

无论是通过算法题,过去的积累还是具体问题的实践,实际上都是衡量人才的某种评价机制。怎么样能够让评价机制更加全面,更容易拓展又不至于过于主观呢?这需要面试官和整个工程师团队改变对于招聘本身思考的角度。

这里,我给出短期和长期两种方法,算是抛砖引玉,也希望自己在之后的工作中有机会一一尝试。

短期方法

短期方法说简单也简单,说难也难。重点就是在于区别操作、知识、经验和能力这四个维度,《再谈“我是怎么招聘程序员的”》这篇文章解释得很详细。简单来说就是操作和知识是基础,在对经验和能力的考察中其实是其超集。用有标准答案的题目去考察实际上是面试官偷懒不走心。

具体如何考察经验和能力呢?我觉得可以从三观入手:技术观、产品观和数据观(来自《漫谈工程师的三观》)。这几点展开的话都可以是长篇大论,这里简要说明一下:

技术观

  • 基础知识的应用和理解
  • 解决问题的思路和想法
  • 合作讨论的态度和方法
  • 逻辑思维的严密和全面
  • 跳出传统思维的想法
  • 理解技术发展的趋势
  • 阅读计算机学科经典
  • 技术品位和兴趣爱好

产品观

  • 技术架构理解力
  • 系统思考和分析设计能力
  • 掌握基本的产品常识并思考背后的原因
  • 正确处理产品需求,可行性分析与技术优先级

数据观

  • 通过数据多维度考虑问题
  • 站在客户和消费者的角度分析和解读数据
  • 知道检测什么数据,用数据支撑决策

长期方法

长期方法需要整个团队的支持,虽然工作量比较大,但是整个流程一旦建立,对于团队和公司的可持续发展能够起到不可估量的作用,因为在这个方法中,招聘不仅仅是招聘本身,更成为了打造工程师文化的有机组成部分。一般来说,现在所指的工程师文化,大多是自上而下推动的技术平台化建设、开发运营一体(DevOps),配合上自动化构建测试部署流程以及定期技术分享等等。这些都很好,但是更多时候局限于团队内部,有没有一种方法,能够突破这样的限制,对外树立团队品牌扩大影响力吸引高质量人才,对内打造工程师文化建立科学系统的培训流程帮助新人更快融入团队呢?

有!不过在开始之前,我们先追根溯源看看,成为软件工程师的几种途径。

八仙过海

常见的途径有:

  1. 自学
  2. 培训班
  3. 大学教育
  4. 在线教育 MOOC
  5. 公司认证(阿里云 AWS)

不同的方式各有利弊,但总体来说要么容易人云亦云,要么批量生产,要么脱离时代,要么绑定在特定公司,都不算特别好。目前有一种我觉得比较好的方式:诸如 Kaggle 这样和大公司紧密结合的比赛,能够极大培养实战能力,不过重点还是在数据科学上。

有没有一种可能,由公司提供在线课程呢?

由内而外

就以云计算为例,针对新人,可以考虑把原来的零散的技术入职培训整合完善,以此为基础弄一套系列课程,配合内部的 wiki,可以汇总大家工作中的经验教训,提高团队的整体水平。在课程网站上线后,建立团队的编码和设计规范,辅以书单和相关资料,建立团队的价值观。具体的课程设计原则是易于上手,方便快速实验,并把系统中业务的部分抽象出来,结合需要解决的问题设计微项目边做边学。这样在为期两周(估计值)的课程结束后,不但会对公司内部的技术栈有一定程度的认识,也熟悉了内部的工作流程合作模式,能够更快融入团队,潜移默化中也就完成了工程师文化与团队性格的建立。通过逐年迭代,形成自己的一套系统,有条件的话可以开源出去,扩大在技术圈的影响力,进而吸引更多人才。

内部试运行顺利后,可以由公司出资,在不同的时间节点对外限额开放免费的在线课程,好处如下:

  • 技术推广,回馈社区,增加热度
  • 公司形象建立,扩大影响力,后备人才储蓄
  • 培养熟悉了解公司相关技术栈的人才
  • 吸引志同道合的人,可以在完成课程的同学中择优录取优质人才
  • 易于拓展,即使公司规模增大,也可以通过这种方式找到更多人才(不一定局限于一两门课程)

一旦形成这样的良性循环,无论是对公司,还是整个互联网,都能起到很大的正面影响。

结束之前

这个想法是我在体验了 CMU 的在线云计算课程之后萌发的,所有的一切基本都还在筹备中(比方说我就在学如何做网站),但是我觉得挺值得一试的。在这里分享出来,一是鼓励监督自己,二是看看有没有感兴趣的小伙伴,能够把这个事情推进下去。

您的支持是对我创作最大的鼓励!

热评文章