原文地址:http://www.codinghorror.com/blog/2012/03/how-to-hire-a-programmer.html

译者:刘永新

日期:2012年4月4日

招聘程序员没有什么妙招,但是我可以分享一些我认为有效的且多年来一直在使用的技巧方面的建议。

1. 首先,通过一些简单的”Hello World”在线测试

我知道这听起来很疯狂,但是一些自称是程序员的人勉强能编写出来。时至今日,我仍能经常听到有人告诉我他们的候选人失败在最基本的编程测试上

这就是为什么非常简单的编程测试成了任何明智的招聘过程中的第一步。这些测试应该是在线的,目的并不是为了证明候选人是一些编程天才,而是让他们应该知道什么是所谓的编程。是的,这有点可悲甚至有时是令人沮丧的,但是如果你不做这个明智的测试,相信我——你会后悔的。

部分提供在线程序测试服务的网站(我确信还有好多,但是我就知道这一俩个)有InterviewZencodility

2. 询问一下他们的履历

任何称职的程序员都应该有一个他们的工作履历,它不一定有多吸引人,但通过它我能发现一些蛛丝马迹,了解到你放在网上的那些对别人有用的大手笔。一份Stack Overflow的个人简历,我就能了解到你是以何种方式进行沟通的,你是如何解决问题的。给我一个你的开源代码库的链接,一个专业的blog?一个Tumblr?一个Twitter?或者我从来没听过的,最好能给我们展示下。分享下你设计的应用程序,或者你参与过的网站,并且描述下哪些部分是你做的。

仅仅看下他们做过什么样的工作,他们创建过什么样的网络产品,对于获得他们什么在行,什么不在行非常有益。

3. 聘用文化背景相适的

正如GitHub,我发现相比整天埋头编程,文化背景相适应更是成功的前兆。

在招聘的过程中我们的谈论[哲学],我们很重视这件事。我们想让每个我们潜在的GitHub职工知道他们即将进入的是个什么样的公司,确定是否真的适应公司的环境。其中一步就是一起晚餐,一起谈论比如文化、哲学、曾经做过的错事、规划等乱七八糟的东西。

在早期,我们根据技能招聘,很少考虑到他们如何融入公司的文化或者他们是否懂得哲学。自然,这些招聘没有起到有效的效果。因此,当我们关注一个有潜力的职工的同时,他们是否能理解我们的做法也是一个重要组成部分。

我知道并不是每个企业都有业务相关的社区,但是如果你确实有,那么当你需要招聘的时候务必从你们的社区中挑选,这些伙计自然而然就融入到你们的工作环境中,这些候选人适应文化的可能性将是异常的高,而这就是你想要的。

有没有一些用户对你的游戏进行了惊人的改造?他们是否曾发现一个不起眼的安全漏洞并尝试去告诉你?立刻聘用他们!

4.做一个详尽、结构化的电话约谈(phone screen)

一旦上面所说的都已经通过,现在是该给候选人打个电话了,记住,电话约谈不是聊天而是面试,通话应该是结构清晰的技术性问题,因此如果确实不合适,双方可以立即终止面试。电话约谈涵盖一些基础要点,概要的说:

1、一点即时编程(on-the-fly coding)。“查找一个整型数组中最大的整数”。

2、一些基本的设计。“设计一个HTML模型的表现层。”

3、脚本和正则表达式。“从这个目录中提取一个包含特定格式的电话号码文本列表文件给我。”

4、数据结构。“你什么时候会采用哈希表而不是一个数组?”

5、位和字节。“为什么程序员认为10月31日和12月25日是同一天这个问题是有趣的?”(译者注:Oct 31和Dec 25,Oct为英文单词十月的缩写,同时Oct为八进制的意思,八进制31转换为十进制是25;Dec为英文单词十二月的缩写,同时为十进制的意思,因此八进制31和十进制25是一样的)

你在寻找的不是神奇的完美答案,而是探知这个人如何解决问题的、他们是否了解他们的工作职责(加或减10%),我们的目标是确保这个候选人在下一步中测试中不是浪彼此的时间,所以如果有太多不合适的预兆,立场要坚定,尽早结束这个通话。

5. 给候选人一个面试项目(audition project)

候选人轻轻松松的通过了Hello World编程测试,有一个惊人的履历,非常适合企业文化背景,同时出彩的通过了电话约谈,是时候进入面试了,是吗?伙计,并没有这么快!

我曾看到过候选人通过了所有上述步骤,进入公司后,根本无法把事情做好。雇佣程序员确实不容易。

如果你想打消这个招聘是否正确的疑虑,那么给他们一个面试项目。我不是说一个一般的、抽象的编程任务,而是一个你们现在正需要立即解决的真实产品的模块,你原本会将这个模块交给正式的职工去做,如果正式职工都不忙,那么让他做点其他的事情。

这应该是一个正规的操练方式,按工时明确的定义了项目的进度。选择一个可以在1-2周就能理想解决的小项目,无论这个候选人是在办公室办公还是远程办公。我知道并不是每个公司都有这些小模块可以外包出去——但可以尽力让他们在公司内完成。我想说,如果你想不出任何方式让一个不错的候选人参与面试小型项目,也许你现有员工的工作结构构存在不合理性。

如果面试项目成功了,那么太棒了——你现在拥有一个高素质的可以真正完成任务的候选人,你已经完成了要做的事情。时至今日,我从来没有见过有谁通过面试项目而无法胜任工作的。我把面试项目的表现看的很重,因此在雇用之前让他们尽可能的做接近实际的工作。如果这个面试项目没有达到理想效果,那么,就把这个操练的付出看成是退出费吧,这与在公司里和4、5个人进行撒网式的面试过程相比成本少多了,最坏的情况下,你可以把这个面试项目交给下一个不错的候选人。

(招聘的试用期也可以工作,理论上和正式职工没什么差别,在大家一致同意的前提下,你可以在6-8周做“留还是不留”的决定)

6.进入面试、推销环节

最后,你应该选个时间和候选人见上一面。这是不可避免的,但是之前还有一步就是你应该在他们还没进入这个面试会议室之前,95%的确定这个候选人将会是个不错的职工

我还远远不是一个面试专家,但是我不喜欢面试难题让问题温和善意化

然而,对于如何面试程序员我有自己的理论:给候选人15分钟的时间让他们展现他们的专业领域。我认为这比传统面试好多了,因为你很快就会确定……

  • 这个人对于他将要从事的工作充满激情吗?
  • 他们能否的在小组中进行有效沟通?
  • 他们能很好的应付他们所在的专业领域吗?
  • 你的队伍会喜欢和这个人一起工作吗?

每个程序员都应该懂得如何推销你自己、你的代码和你的项目,我完全同意。现在,推销自己吧!

7. 没有任何担保

以上的技巧不要生搬硬套,我知道这些技巧很好用,但是偶尔也有不起作用的时候,因此要要因“况”制宜,调整这些建议适用于你的特殊情况,剔除那些不适合于你的(尽管我强烈建议你不要跳过第一步骤)。即使在最好的环境下,招聘职工也是很困难的。一个工作机遇可能会远远超出任何人的控制,正如他们所说的,人本来就很复杂。

如果你认为工作像维持一种关系,那么余生中你将花掉每周40小时(或更多)时间,每个人理应合理支配时间。公司和候选人都应该真诚的尽最大努力决定对方是否合适。你的目标不应该仅仅是得到一份工作,或者雇用一个人为我工作,而应该寻找乐趣热爱你的选择。不要急于任何事情,除非双方都感觉不错。

(顺便说一句,如果你正在寻找吸引程序员的方式,那么你不容错过来自SamuelMullen的出色建议