如何招到优秀的程序员

译者按

这篇译文来自英年早逝的天才少年Aaron Swartz。Aaron在14岁的时候就参与创造RSS 1.0规范。并且是Python框架web.py的作者以及Markdown的主要贡献者之一。Aaron致力于推动互联网信息的开放与自由,曾创办网上免费图书馆Open Library,以及反对互联网审查(SOPA)的Demand Progress。这名年轻的斗士迫于政府以及司法的压力于2013年自杀身亡,享年26岁。

Aaron在这篇文章里着重介绍了他是如何招聘程序员的,然而文中的观点其实同样适用于鉴别任何一个职位的候选人。可能有一些细节方法不太适用于国内目前这个招聘环境,不过大多数思考以及一些要点的提炼都非常值得借鉴。我在摸索招聘的过程中也是从这篇文章受益匪浅,每次阅读都会有新的收获。而对于招聘另一端的求职者来讲,根据Aaron的评判来看自己哪里做的不足,想必也一定会有所收益。

祝大家阅读愉快!

在招聘一个程序员的时候(或者其他任何人)你应该问自己三个问题:他聪明吗?他靠谱吗(能按时交付,原文是:get stuff done)?你愿意跟他一起工作吗? 

那些很聪明但不靠谱的人可以是你的朋友,但不应该是你的员工。你可以在他们拖延自己的工作的时候跟他们讨论你遇到的问题。那些靠谱但是不够聪明的人效率会太低:不聪明的人往往不会变通,跟他们工作很慢并且让人感到沮丧。而那些你不愿意一起工作的人,你为什么要招他?

常规的程序员招聘流程是:a) 看简历, b) 电话上问一些有难度的问题, c) 现场给他们一个编程问题。我觉得这是一个很糟糕的套路。简历上信息很有限,面试中又容易紧张,候选人很可能表现不出实际的水平。编程通常情况下不是一个需要在高压下完成的工作。所以在一个人紧张的时候看他的表现是一件很没有意义的事情。而且面试中的一些问题看起来就像是专门用来折磨候选人的。我认为我是一个很不错的程序员,不过我从来没通过过这些面试,而且估计以后也不会。

所以当我招人的时候,我就去考察这三个问题。评估他是否靠谱,我会问他之前做过什么。如果候选人很靠谱,那么一定做成过一些事——比如程序员都会有项目经验,毕竟现在很容易就可以参与到开源项目中,纸上谈兵不可能成为优秀的程序员。我会要一份代码样例和 demo,然后看代码写的如何。这样你可以快速获取大量的信息,因为你不是在让他应对面试,而是看他们在实际中用到的代码。它们够简洁吗?够清晰吗?够优雅吗?可用吗?你会想把这样的代码放进你的产品里吗?

想要看他们是否聪明,我会跟他们聊聊天。首先,我会尽可能地消除对方的压力:比如地点会约在咖啡厅,会说清楚这不是一个面试,并且尽力使自己量表现得随意和友好一些。我永远都不会问一些标准的“面试问题”——我会像跟在派对上遇到的人一样跟他们聊天(如果你在派对上问别人他们的优点和缺点或者去估算芝加哥有多少钢琴调音师的话,你的问题就大了…)。我认为我在聊天时很容易判断一个人是否聪明,就像我可以一眼看出一个人是否有魅力。

不过如果非要我给出聪明的判断标准,我会着重于以下三点:

第一,他们对事物的认知是什么样的?问他们最近都在思考哪些问题并且深入的问下去。他们看起来像是详细地了解这个问题吗?他们能清楚地阐述它吗(清晰的解释一个问题表示他们真正的理解它了)?关于这个话题他们知道一些你不知道的事吗?

第二,是否有好奇心?他们会回应甚至反问你吗?是真的感兴趣还是只是礼貌地应付?针对你说的东西他们会问后续的问题吗?他们的问题会启发你思考吗?

第三,是否会学习?在对话中的某个节点,你很可能会向他们解释一些事情。他们是真的理解你所说的还是只是点头微笑?有些人会对某个小领域有些研究,不过对其他的东西不感兴趣。有些人会仅仅停留在好奇而不会去真的学习研究,他们问很多问题却从来听不进去。你要找以上三点都满足的人。

最后,我会通过跟他们一起出去待待来判断是否愿意和他们一起工作。很多牛人会在一个小时的交流里表现得讨人喜欢,不过在几个小时后那些反常的特征就会显露出来。所以在聊天结束后,可以邀请他们跟团队一起吃个饭或是在办公室里玩个小游戏。别忘了尽力营造轻松的氛围。重点是看他们会不会让你反感。

如果所有这些都很不错,在确认发出 offer 之前,我会最后做一个基础测试来确保我没被耍:要求他们做一部分真正的工作。通常这意味着选取一部分相对独立的代码工作让他们去实现(如果你坚持想要看一个人在高压下的表现,设置一个 deadline)。如果需要,你可以付给他们报酬,不过我发现对于大多数程序员而言,只要能够事后把自己的工作开源,他们并不在乎完成一个像这样的小任务。这个测试独立存在时并没有意义,不过如果他们满足了以上的三点,这个测试足够证明他们没有骗你,并且能够真正靠谱地完成工作。

(我认识的人有的会说“不如先把这个人招过来,工作一个月然后再看怎么样”。这通常行不通。如果你不能在一个小项目后做出决定,你可能一个月后也同样做不出决定,这样就会使你招到一个不够优秀的人。还不如直接拒绝掉并且着力于找到更好的人。)

我对这套方法非常满意。当我略过以上某一步的时候,我通常会招到一个错的人并且最终不得不让他走。但是当我遵循这个方法的时候,我总是能招到那些让我觉得不跟他们工作是种遗憾的人。最后,我很惊讶这么多公司还在用一些很蠢的方法去招人。

发表评论

电子邮件地址不会被公开。 必填项已用*标注