企业如何招聘到高质量的程序员?

openkk 12年前
     <blockquote>     <p>如何招聘到优秀的程序员?似乎是一个老生常谈的问题,但同时也引起企业和个人的持续关注,就这一主题,发布了很多文章,如《<a href="/misc/goto?guid=4958331896542531670">如何面试程序员?</a>》《<a href="/misc/goto?guid=4958331897354526192">高效的面试方式:结对编程</a>》,都得到了网友的热情讨论。近日著名博客 Coding Horror 博主、Stack Overflow 创始人 Jeff Atwood 发了一篇文章《<a href="/misc/goto?guid=4958331898152863048">How to Hire a Programmer</a>》,让我们看看 Jeff Atwood 对该问题有什么高效的解决方法。文章编译内容如下:</p>    </blockquote>    <p> 招聘程序员,永远没有万能的方法。在这里,我只希望分享一些多年来的我个人的招聘经验。</p>    <p> <strong>首先, 进行一系列简单的“Hello World” 类型的在线测试</strong></p>    <p> 对此,你是不是很惊讶呀?但确实有一些自称为程序员的人几乎不会编程。直到今天,仍会有一些招聘者告诉我,他们总会遇到一些应聘者无法通过最基本编程测试。</p>    <p> 所以,任何合理的招聘过程应把极简单的程序开发测试放在第一步。并且这个测试需要在线上进行,目的不是为了证明应聘者有多牛,而是看看他到底是怎样的开发者。这一过程很有必要,如果不进行这一部的筛选,你将来可能会后悔。</p>    <p> 现在有一些服务可以帮助你解决在线测试应聘者的问题,比如 <a href="/misc/goto?guid=4958331898935055708">Interview Zen</a> 和 <a href="/misc/goto?guid=4958331899753455611">codility</a>。</p>    <p> <strong>看开发者在互联网上的个人资料</strong></p>    <p> 任何名副其实的开发者应该有一份关于他们工作经历的简历。它不必十全十美,我只关注应聘者在互联网上因帮助他人而留下来的点点痕迹。向我展示你在 Stack Overflow 上的相关资料,凭此我可以了解你专注于哪些方面的技术信息,同时解决了哪些技术问题;给我一个你曾参与的开源代码库的链接;给我你的专业博客地址?Tumblr?推ter?或其他一些我不曾听过的名字?不错,我可以好好看看。向我展示你曾设计的应用,你曾工作过的网站,及你在其中担任怎样的角色。</p>    <p> 了解应聘者曾做过哪方面的工作及在线创造了哪种类型的贡献,对于招聘者了解应聘者适合做什么、不适合做什么有很大的帮助。</p>    <p> <strong>雇佣适合企业文化的人</strong></p>    <p> 正如 GitHub,我发现很好地融入企业文化比整天埋头苦工更容易获得成功。 </p>    <blockquote>     <p>我们会在面试过程中和应聘者谈论哲学,我们十分重视这个过程。我们希望来 GitHub 工作的员工了解他们将要进入的这个企业,确认他们能很好地适应公司的环境。这个过程包括一块吃饭,一起谈论企业文化、哲学、我们曾经犯过的错误、未来的规划等话题。</p>     <p>早些时候,我们招聘只注重应聘者的技能,而对于他是否适应企业文化,是否懂哲学并不太关注。很自然,这些招聘并没收到很好的效果。所以现在我们不仅注重应聘者的技能,是否能融入我们也是我们考察的重要部分。</p>    </blockquote>    <p> 据我所知,不是所有的业务领域都有相应技术圈子,但如果有,招聘者一定要尽可能地从技术圈子中招人。因为该圈子中的技术人员会自然而然地对你企业所做的事感兴趣,也会很容易融入到与他们意愿一致的企业中。这些应聘者较好适应企业文化的可能性是异常高的。这也正是招聘者乐于见到的。</p>    <p> <strong>与应聘者电话沟通内容需结构清晰</strong></p>    <p> 上面提到的事你都完成了,现在是时候给应聘者打个电话了。记住这个电话不是用来聊天的,而是为了筛选应聘者。所以通话的内容是关于技术话题的,而且结构层次要清晰。如果内容不太合适,你和应聘者都会被带离此次通话的目的。内容应该覆盖技术基础,总结下来有下面几点:</p>    <ul>     <li>快速编程。如:编程实现从 Int 数组中找出最大的 Int 型数据;</li>     <li>一些基本的设计。 </li>     <li>脚本语言和正则表达式。如:请从该目录中提取包含电话号码的文本文件列表,并以特定格式输出。</li>     <li>数据结构,如,你什么时候会采用哈希表 ,而不是数组?</li>     <li>比特和字节,如:程序员为什么问说出“oct (31) == dec (25)”类似这样的笑话。</li>    </ul>    <p> 该举措的目的,是为了到下一流程后,可以节约应聘者和招聘者更多的时间。你一定要坚持自己的立场,如果发现该应聘者多点不符后,尽早放弃该面试过程。</p>    <p> <strong>请应聘者参与实际项目</strong></p>    <p> 应聘者顺利通过了上文提到的四关,是时候进行面对面的面试了吗?现在还不是时候。</p>    <p> 我曾见过一些应聘者,他们也顺利通过了上文提到的层层考验,但最终在实际工作中,并不能很好地完成实际任务。</p>    <p> 如果你想确定无疑地判断他是否是一个优秀的应聘者,那就给他一个实际的项目做。我说的不是一般的、抽象的编程任务,而是你们公司现在正在进行的某产品的一个实际开发模块——你本计划交给公司实际员工做的任务。</p>    <p> 选择一个测试项目,在理想的情况下可以在几天,也可能最多在一个星期或两个星期内完成。应聘者可以在公司里完成,也可以远程工作。我知道不是每个企业都能把他们的项目切分成一些这样的小项目,分给应聘者在公司外完成——但可以尽力尝试让应聘者在公司内完成。我个人认为,如果你无法为优秀的应聘者分配这样一个微项目,很可能说明你为现在员工分配的任务存在不合理性。</p>    <p> 如果应聘者出色地完成了所分配的测试项目。恭喜你,你找到了一个高素质的应聘者,他已被证明可以出色完成各项工作。到现在为止,我所见过的通过该项考验的所有应聘者都能在实际工作中很好的完成任务。准确地说,也不是百分之百保证,但我把该项测试看得很重要,因为在应聘者还未被雇佣前,你可以近距离地观看他在实际项目中的表现。如果测试项目没成功,就把在该项目上所付出的代价看作一笔“退出费”,这相比请公司的 4 或 5 个人来进行一场昂贵的面试过程便宜多了。最坏的情况是,把该项目用于下一个优秀的应聘者。</p>    <p> <strong>是时候与应聘者见面了</strong></p>    <p> 最后,你应该选一个时间与面试者见上一面了。这是必然的,但通过之前所进行的一系列测试,你应该 95% 地确认这个应聘者就是很好的雇佣对象后再与他见面。</p>    <p> 我并非面试专家,但我不喜欢问一些很难的问题,适度就好。</p>    <p> 关于如何面试开发者,我有自己的一套理论:给面试者 15 分钟的时间,请他陈述所擅长的领域。相比与传统的面试方式,我认为这可以取得更好的效果,困为你可以很快地探明下面问题:</p>    <ul>     <li>这个人喜欢做什么样的工作?</li>     <li>他是否擅长在小组中交流?</li>     <li>他能否很好地解决他所擅长领域中的问题?</li>     <li>你的团队是否愿意和他一块工作?</li>    </ul>    <p> 每个开发者都应该知道一件事,即如何推销自己、代码以及项目。</p>    <p> <strong>任何事都无法绝对保证</strong></p>    <p> 请正确看待上文所列举的招聘流程。它们有时很成功,有时也会失败。根据你自己的特殊情况,调整这些建议,贴合你的想法,忽略某些步骤(虽然我强烈建议你最好不要省,即便是跳过第一步)。即便在最理想的环境下,招聘人才也是一件很难的事情。一个工作机会的获得会受很多因素的影响,往往不受人的控制。正如人们说的,人本来就很复杂。</p>    <p> 如果把工作看作一种关系,每周需花 40 多个小时相处的关系,那么公司和招聘者都应该有一种信念,努力找到适合自己的对方。我们的目的不只是找到一个工作,或雇佣一个人,而是为了生活乐趣,为了创造一种友爱的关系。</p>    <p> 英文原文:<a href="/misc/goto?guid=4958331898152863048">How to Hire a Programmer</a><br /> 来自: <a id="link_source2" href="/misc/goto?guid=4958331901283513251" target="_blank">CSDN</a></p>