招聘优秀的程序员






4.80/5 (42投票s)
如何招聘优秀的程序员。
引言
这是一篇关于如何只招聘到最优秀程序员的通用文章,包含了很多很棒的建议。
背景
本文档适合技术和非技术IT人员,包括管理层。它将为您提供一个关于如何招聘到最优秀程序员的绝佳起点。
作者:Chris Johnson @ intrin.sc
招聘优秀的程序员
软技能
为您的组织招聘到合适的程序员可能是您被分配到的最重要任务之一。绝不能掉以轻心,只有团队中最有经验、沟通能力最强的开发人员才应该尝试面试程序员。让任何非技术人员主导面试都是在惹麻烦。有些人可能会对此感到惊讶,但大多数程序员的时间将用于编码,因此面试大部分内容应该是技术性的。程序员还将花费大量时间进行需求分析(通常需求是不完整的,因此程序员总是需要直接与用户一起完善)、理解高层设计和完成技术设计。这应该是面试中的第一个问题。您可以简单地问他们:“当有人给你一套需求和文档时,你会怎么做?”如果他们的回答不是诸如“我通常需要处理不完整需求和技术设计,并进行完善,直到开发人员可以直接使用它们”,那么他们就不应该被考虑为候选人!
根据我的工作经验,程序员基本上可以分为三(3)种类型:
1) “代码搬运工”:这种人可能花费大量时间,甚至全部时间用于编码,而很少考虑外界,通常也不会深入考虑技术设计(很可能未完成)。他们希望立即开始编码,因此会做出很多假设,并试图尽快完成工作。通常,他们会用更多的假设来应对遇到的任何复杂情况,以更快地“完成”工作。
2) “架构师”:这种人似乎总是有正确的答案,并以其立即回答任何和所有问题的能力让管理层赞叹不已。他们花费大量时间“研究”新技术,因此,他们总是想提出更好的方法来做事,而自己可能完全没有这方面的经验。他们很可能无法按时完成项目,但他们总能为管理层提供一个详细的解释,说明为什么他们总是无法按时完成工作。
3) “创意开发者”:这种开发者总是会主动提出正确的问题。他们通常会给出上面提到的第一个问题的正确答案。当遇到挑战时,他们不会立即开始编码,而且似乎并不了解所有答案。然而,他们总是在开始时提出问题,并在开始任何开发之前澄清任何模糊之处。他们在任何时候似乎都不了解所有答案,但他们通常能按时完成项目,更重要的是,他们第一次就能做对。开发人员能否提出正确的问题,并完善需求和技术设计至关重要。如果在项目初期不做这些,项目很可能会失败,任何利益相关者都会对您未来交付项目的能力失去信心。当然,这样的开发者很有创意!是的,您确实想要那些会思考多种解决方案,并愿意深入学习任何新技术以实现最佳解决方案的程序员。这类程序员总是希望超越自己过去的工作,并尝试“为自己树立声誉”。他们乐于分享知识,并会竭尽全力确保项目成功。
万一您还没弄清楚要招聘哪种开发者,那就是第三种!您应该避开第一种和第二种。他们可能会在开始时看起来知道某个问题的答案,但事实通常并非如此。第一种和第二种通常能欺骗任何经理,有时也能欺骗开发者,当您问他们某个特定问题时。但这对刚开始任何任务并不重要。您需要第三种;他们会提问,提出正确的问题,他们会深入学习他们不知道的任何技术,并且不会用烟雾和镜子来欺骗任何人。在进一步进行面试之前,淘汰第一种和第二种非常重要。这可能需要一小时左右的时间才能完成,但这是非常值得的。您还希望让面试对每个人来说都尽可能愉快。您希望候选人感到舒适,并能自由表达自己,而不会感到过于紧张。总的来说,您应该模仿您公司开发人员日常经历的工作环境。
沟通技巧
如果您的团队用英语沟通,那么他们的英语必须非常出色。无论是口语还是书面语,都一样。就是这么简单:沟通问题源于开发人员不理解其他团队成员,或者其他团队成员不理解开发人员。如果一个人的沟通能力很差,这对团队中的其他人来说是非常不公平的。他们的表现将远远低于可接受的水平,而且由于沟通不畅,完成项目可能需要 2 到 3 倍的时间。经理应该明白,即使开发人员的薪水低很多,他们的产出每美元($)很可能远低于那些薪水高得多但表现优异的开发人员。别忘了,如果一个项目做得不对,由另一位开发人员重写将极其昂贵。我过去曾受雇重写另一位开发人员的工作,因为它不符合预期。我清楚地知道,当时他们应该招聘最优秀的程序员,而不是最便宜的,因为当项目不如预期时,您肯定会花更多的钱来修复这些程序员的错误。因此,正如您所见,沟通技巧是开发人员的另一个关键部分,绝不应被忽视。
这一切当然是在技术面试之前。
技术技能
在花足够的时间进行“软技能”面试后,您可以继续进行技术面试。这可能需要 30 分钟到 2 小时。您也可以允许他们在家里完成技术部分,但他们可能会试图抄袭解决方案,因此您需要有方法来检查。如果您在现场进行技术面试,可以从一些基本的技术问题开始,让他们习惯回答这类问题。问题可以逐渐变难,但您应该混合一些诸如“你将如何处理这种情况?”之类的问题。请记住,如果您问关于开发人员简历上某种技术细节的深入问题,而他们已经 3 年没用过了,即使是最好的开发者也很可能无法正确回答。一个例外是,如果您招聘的是一个为期 3 个月的合同职位,并且开发人员需要立即在该领域工作,那么他们需要精通该技术。如果您招聘的是长期合同或永久职位,那么知识的深度就不那么重要了,因为好的开发者通常能很快掌握新概念,而且这不会影响他们的表现。此外,请记住,如今对程序员期望记忆的知识量是人力不可能完成的!如果您问某人关于微软 .NET 技术(例如)的每一个领域,迟早他们都会没有答案,因为我怀疑任何开发者能在 10 年甚至更长的时间内记住该技术栈的每一个概念。更重要的是要看看他们如何着手解决问题,以及他们如何学习他们缺乏知识的任何特定领域。
如何不面试
在面试程序员时,您希望让您的面试团队看起来尽可能专业。不要让初级开发人员参加面试。如果应聘者用一个问题来回答,初级人员可能无法澄清他们的疑问,这看起来总是不好!永远不要让经理问技术问题。我见过经理问其他开发人员写下的问题,以及正确答案。但是,如果开发人员的回答方式与经理预期的略有不同,或者与他们写下的答案不符,经理可能会认为答案是错误的,而实际上可能是正确的!这是不专业的,通常应聘者会察觉到这一点,并认为您的团队没有条理。不要让沟通能力差的人提问。您需要确保开发人员理解每一个问题,并且根据他们的回答提出正确的问题。
做出录用决定
当您最终决定了认为适合您组织的开发人员(或多名开发人员)后,您需要确保他们愿意长期留在您的组织(除非当然是短期合同)。您不想低估他们的价值或支付的报酬低于他们(或您)认为的他们应得的。他们可能会接受职位,但会开始寻找更好的工作,这对双方都不好。正如我之前提到的,如果他们的过往业绩证明了这一点,那么支付比平均水平更高的薪水通常是可以的。通常,他们更高的产出远远超过那些薪水较低但表现不佳的开发人员。因为糟糕的开发工作导致任何项目失败,是您无论如何都应该避免的。