怎样招聘程序员

在招聘程序员方面,没有所谓的神奇“银弹”!但我能够分享一些建议和诀窍,它们通过个人实践证实是有效的。这些方法我多年来一直在用。我把它们总结以下:程序员

  1. 首先,要求经过几个简单的“Hello World”在线测试。面试

我知道这听起来很疯狂,但有些自称是程序员的人根本没写过代码。时至今日,还有人经常过来告诉我:他们在面试过程当中碰到一些应聘者连最基本的编程测试题目都不会作,真是难以置信!正则表达式

那也是为何要把简单的编程测试做为任何面试流程的第一步的缘由(若是你足够理智的话)。这些测试应该是在线的,目的不是为了证实应聘者是否是编程天才,而要确认他们最起码知道编程是怎么回事。是的,这听起来有点悲哀,使人沮丧,真的有必要这么作吗?然而,若是你不作这种检查的话,相信我,你必定会后悔的!编程

有一些网站提供这样的在线编程测试,好比Interview Zen、codility等。(我相信还有其余更多的网站提供相似的服务,但我目前只了解这两个。)数组

  1. 提出要看看他们的文件夹。安全

任何称职的程序员都应该有一个“文件夹”,里面收藏了他曾经作过的东西。这些东西无须奇特。我只是在寻找你在互联网上留下的蛛丝马迹,以印证你有多了不得。若是你是Stack Overflow的用户,你能够给我看看你的介绍页面,让我知道你是怎样跟人沟通的,以及你是怎样去帮助别人解决问题的。若是你参与了某个开源项目,那么给我一个链接到开源代码库的地址。或者你有一个专业的博客?一个微博?在用Twitter?或者其余我从没据说过的东西?有这些就太棒了。咱们能够一块儿来看一看。分享一下你设计过的应用程序或者你作过的网站,并指出哪些部分是你作的。数据结构

看看应聘者之前作过什么样的工做,他在网上展现了什么样的做品,这对了解这我的是极其有帮助的——经过这些,能够去理解他作过的东西,而且判断出他擅长什么(或者不擅长什么)。ide

  1. 只雇用认同公司文化的人。测试

像GitHub同样,我发现应聘者对公司文化的认同每每比他们高超的编程技能更重要,前者更能决定咱们是否可以成功。网站

咱们在招聘过程当中会谈到哲学,咱们对此是很认真的。咱们想让任何可能进入GitHub公司的人都知道,他们将在一个怎样的环境里工做。咱们要确保他们跟咱们可以合得来。为了达到这个目的,咱们可能跟他们一块儿吃午饭,而且谈论好比文化、哲学、咱们犯过的错误、计划等方面的话题。

在早期,咱们曾经单纯由于一些人的高超技术而雇用了他们,但忽略了他们怎样融入到咱们公司文化中去的问题,或者他们是否理解咱们对人处事的哲学。很天然的结果是,那些人的工做表现不如预期。所以,在咱们关注应聘者技能的同时,他们是否能“变成”咱们也是一个主要的考量因素。

我意识到,不是每一个行业都为他们正在作的事情建有一个社区,但若是你有幸拥有一个社区的话,你应该尽量从社区里找出人才来,而且雇用他们。这些人天然已经被扯进了你正在作的事情,他们被你公司的磁场所吸引,并且他们的行为彻底是自觉自愿的。这些人可以适应公司文化的几率超乎寻常地高。他们就是你要找的人!

你发现有些用户基于你的游戏开发了使人惊异的衍生版吗?有人发现了一个暗藏的安全漏洞,并尽快通知了你吗?当即把这些人雇用进来!

  1. 作一个周详的结构化电话面试。

上面3件事情一旦作完以后,该给应聘者打个电话了。我得提醒你,电话面试不是为了聊天,重点是要筛选(或者说淘汰)。电话里谈论的应该都是技术方面的问题,并且要以结构化的形式进行。这样的话,若是你发现应聘者不合适目前的岗位要求,能够立刻结束通话。咱们在后面有一节“如何作好电话面试筛选”专门来探讨这个问题。这里只是简单总结以下:

1.     作一点即兴编码,好比“在一个整型数组里找出一个最大的整数值。”

2.     作一些基本的设计,好比“设计一个表示法,用于HTML的建模。”

3.     脚本编程以及正则表达式,好比“把某个目录下包含特定格式电话号码的文本文件都列出来。”

4.     数据结构,好比“在什么状况下你会使用哈希表,而不用数组?”

5.     位与字节,好比“为何程序员开玩笑说10月31号跟12月25号是同一天?”

译者注:1031号用英语表示为Oct. 31,是万圣节(也叫“鬼节”);1225号用英语表示为Dec. 25,是圣诞节。Oct.原本是October10月)的意思,而程序员能够把它解释成Octal(八进制);Dec.原本是December12月)的意思,而程序员能够把它解释成为Decimal(十进制)。因而,八进制的31等于3 x 8 + 1,结果等于十进制的25,也就是Oct. 31 = Dec. 25

不要指望从电话的另外一头获得完美的答案,也没这个必要,你须要了解的只是这我的解决问题的方式,还有他们是否真的掌握了相关的技术(上下浮动10%)。你的目标是,不要让一些不合格的人蒙混过关,不然到了下一阶段会浪费你们更多的时间。所以,你不要心慈手软,要对电话另外一头保持火力,而当发现有太多疑点以后,提早结束通话。

提示:咱们将在下一节对电话面试进行更为深刻、详尽的分析。)

  1. 给他们一个“试镜”项目。

译者注:“试镜”是影视制做领域中的一个术语。用拍摄一段影片的方式,来决定某人是否适合当演员,或者某演员是否适合演出一部影片里的某个角色。在这里,做者把这种作法借用到了软件开发领域。

到这时候,应聘者已经经过了“Hello World”编程测试,他的“文件夹”里的东西也很光彩夺目,他融入公司文化没有丝毫的问题,他也成功经过了电话面试。是时候把他叫过来进行面对面的面试了,对吗?别这么急,兄弟!

我见过一些应聘者经过了前面4关,而后加入了公司,结果在实际项目中仍是表现不佳。我没有提醒你吗?招聘程序员是很难的!

这位候选人会不会是一个成功的聘用呢?若是你还心存疑虑,想要抹去这层阴影的最好办法,就是给他一个“试镜”项目。我指的不是那种空泛的、抽象的编程问题,而是现实世界里、实际项目中你须要立刻作的一块实实在在的工做。这块工做你本来是打算让正式员工作的,只是他们如今都在忙着其余的事情,所以这块工做暂时还没分配出去。

这个项目应该以常规的咨询服务的形式进行,按小时计费,而且清晰地定义好项目任务书。选择的项目必定要小,理想状况下几天就能作完,至多1~2周。候选人能够进办公室来作这个项目,或者也能够远程登陆过来。我知道,不是全部的公司都能提供这种“一口大小”的工做分给公司之外的人来作。(他们拼死了也想把全部的事情都在公司内部作完。)可是,我就想了,若是你费劲脑汁仍是想不出一个迷你的“试镜”项目给一位很不错的候选人作(你颇有可能把这我的招进来哦),也许你在现有员工之间的工做分配方面也存在一些问题,至少不够结构化。

若是“试镜”项目作成了,那就太美妙了——你如今获得了一位高度合格的候选人,他的作事能力获得了验证,并且你还有效地给实际项目完成一些工做。迄今为止,我还没见过有谁经过了“试镜”项目的考验但后来还在实际项目中表现不佳的。我很是依赖“试镜”项目来考察一我的的能力;作这种项目实际上跟作正常的工做很接近了,就差没把人家聘用进来了。不过,若是“试镜”项目失败了,也没关系,想一想也就浪费一点点咨询服务费,跟把候选人直接叫进公司、浪费公司的其余4~5位同事的时间去面试他相比,其实仍是挺划算的。何况,你还能够把这个“试镜”项目传给下一位有潜力的候选人去作。

(利用雇佣合同上的试用期也是能够的,它们在概念上很是类似。双方能够预先作好约定,先雇用6~8周做为考察期,而后再决定是否正式录用。)

  1. 找个房间面谈,并最后定夺。

最后,你应该当面见一见候选人。这是必不可少的,而前面全部的步骤都是为了确保,在应聘者走进面试房间那一刻,你已经有95%的把握:他将是一位很棒的员工。

在面谈方面,我绝对不是什么专家,由于我不够温柔。但至少有一点,我不喜欢在面试的时候要人家回答什么谜题。

关于怎样面试程序员,其实我自有妙招:我会让候选人对他们的专业领域作15分钟的演讲和展现。跟传统的面试相比,我认为个人方法要有效得多,由于你很快就能看出来:

·       这我的对他正在作的事是否有热情?

·       他能在小组里有效地沟通吗?

·       他对他的专业领域是否有很好的认识?

·       你的团队是否会喜欢跟这我的一块儿工做?

拿 Steve Yegge的话来讲,每一个程序员都应该学会作一件事,那就是推销本身、推销本身的代码和项目。我对这个观点举双手同意!开始吧,冲我来!

  1. 上面没有哪条是保证奏效的。

前面所说的这些你也别太迷信了!虽然说这些技巧经常是奏效的,但我也见过偶尔不奏效的。你必须根据你的实际状况,保留那些你认为合理的作法,而后把其余的都抛弃(尽管我强烈不建议你跳过第一步)。即便在最理想的条件下,招人仍然是不容易的!工做作很差的缘由有不少,有时候彻底不受任何人的控制。就跟人们常说的那样,人这个东西很复杂!

若是你也以为“工做是在你有生之年每周都要花40小时(甚至更多)的一种重要关系”,那你就应该认真对待此次“约会”。公司和应聘者双方都应该很真诚,尽各自最大的努力去判断彼此是否合适。你的目标不该该只是为了获得一份工做,或者随便找我的来作事,而应该乐在其中,为了一种相同的爱好而彼此靠近、而且走到一块儿。所以,不要匆匆忙忙作决定,除非大家早已相互倾心。

(顺便补充一下,若是你想找到一些方法来吸引程序员,那你千万不要错过SamuelMullen的建议。请上网搜索“Advice on Attracting Good Developers”这篇文章。)

http://samuelmullen.com/2012/02/advice-on-attracting-good-developers/