评估与识别适合您团队的开发人员 - 在口头面试环节:一种结构化方法






4.92/5 (77投票s)
本文重点介绍一个结构化流程,以在口试环节更好地评估团队开发人员职位的候选人。
介绍
筛选和面试数百名候选人,并找到一名优秀的开发者可能是一个困难且徒劳的过程。很多时候,优秀的候选人会被视为不那么优秀,反之亦然。我见过这种情况发生太多次了。原因是,大多数面试流程缺乏科学的方法,尤其是在招聘开发人员职位时。总的来说,大多数评估是基于“主观方法”进行的。也就是说,面试官通过与候选人交谈并提出大量问题,来依赖自己对候选人能力和技能的“感觉和理解”。结果是,你作为招聘者,面临着识别不合适候选人的风险,并且如果招聘了不适合的人,你会在长期内遭受很大损失。
我非常欣赏乔尔(《乔尔软件》一书的著名作者。如果你还没读过,我强烈推荐你读一下这本书),是他写的这篇文章启发了我开发一个更好的评估流程(在口试中),这在大多数情况下有助于你识别合适的开发者。
请注意,组织中的每个招聘需求可能是独特的,你如何评估候选人取决于该特定招聘岗位的具体需求。但是,如果你有一个软件开发团队,并且经常需要招聘开发人员,那么你需要遵循一个一致的基本结构来评估候选人。
在你的组织中,你可能在连锁面试流程中还有其他步骤(如笔试和实践考试、心理测试等)。但在大多数情况下,对候选人的评估始于口试,而这正是做出大多数招聘重要决定的时候(早晨预示着一天)。本文将重点介绍你在口试过程中评估开发人员候选人时可以遵循的10个评估步骤。
以下是步骤:
1. 让候选人感到放松
在第一步中,你应该在正式面试开始前,尝试与候选人建立个人联系,并让他们感到放松。
你可能是一个随和的人,或者你可能很有个性。但是,相信我,当你正在等待你梦想中的工作的面试时,你肯定会感到紧张。当然,紧张的程度因人而异。但是参加面试与和朋友闲聊不是一回事。对我们所有人来说,情况大致相同。
当一个人紧张或感到不自在时,你不能指望他/她能发挥出最佳水平。所以,当你面试某人时,让候选人感到放松是你的职责。
如何让候选人感到放松?这很简单。微笑着祝他/她早上/晚上好,并与他/她简短地聊聊今天的天气。与他/她进行一些关于候选人个人、教育和职业背景的谈话。
你可以问的一些示例问题
- 你来自哪里?
- 你在哪里上学?
- 为什么你对我们公司感兴趣?
- 介绍一下你自己。
- 你的爱好是什么?
- 谈谈你过去的公司。
评分
权重:5分
必须通过:否
技巧
- 寻找那些能简明扼要地提供大量信息的候选人。优秀的候选人可能会主动提供个人信息。
- 不要在介绍阶段花费过多时间。一旦你确信候选人已经感到放松,就可以进行下一步。
2. 识别候选人的关键特质
好奇心、雄心、梦想、热情……这些是每个优秀开发者都拥有的特质。在这步中,尝试更多地了解候选人的个人方面。尝试发现这些能反映其个性和态度的关键特质。
一些识别这些特质的示例问题
- 你的职业目标是什么?
- 你将如何实现它?
- 你是否相信,如果给你机会,你能在一个特定领域成为顶尖?如何实现?
- 你是否相信自己主要掌握着决定自己未来的能力?为什么,或者为什么不? [这是一个修改过的问题,因为有人建议关于“相信命运”的问题可能涉及敏感话题。见评论。]
- 你是否曾在梦中写过代码?
- 你如何持续学习?
- 什么让你与众不同?
- 你个人的缺点是什么?
评分
权重:10分
最低分数:5分
必须通过:是
技巧
寻找那些雄心勃勃和/或好奇,并且有明确目标,并有清晰想法和计划来实现目标的候选人。此外,寻找那些乐于谈论自己的人。优先考虑拥有这些关键特质的候选人。
3. 评估候选人最近参与的项目经验
一位优秀的开发者会像对待自己的孩子一样对待他/她参与过的项目。所以,当他们谈论过去的项目时,他们的眼睛会闪闪发光,脸上会容光焕发。他们会兴奋地谈论自己做了什么、如何做的、为什么那样做以及为什么没有选择其他方式。
了解过去项目经验的一些示例问题
- 你参与过哪些系统?
- 系统的技术和架构是什么?
- 你为该系统带来了什么价值?
- 你如何将分配给你的任务实现到该系统中?
- 在你的实现中,你还可以采取哪些其他替代方案?
- 你的实现策略与其他策略相比,优缺点是什么?
评分
权重:10分
最低分数:5分
必须通过:是
技巧
- 寻找那些对过去所做的事情有详细了解的候选人。此外,优先考虑那些对相关技术有深入了解并了解其他替代方案的人。
4. 验证逻辑处理能力
每个开发者都能处理逻辑并编写代码,这些代码在大多数情况下是正确的。但是,聪明的开发者编写的也是聪明高效的代码,并且写得很快。
在此步骤中验证候选人的逻辑处理能力的正确性和聪明之处。让他/她编写一个简单易懂的程序来解决特定问题。如果代码效率不高,让他/她改进代码。
一些示例问题
- 编写一个连接两个字符串的程序。
- 编写一个计算N以内所有偶数之和的程序。
- 编写一个反转数组中所有字符的程序。
评分
权重:10分
最低分数:8分
必须通过:是
技巧
- 最好的候选人总能在第一次尝试时编写出最正确且高效的代码。非常好/好的候选人可以先写出正确的代码,然后再进行优化。
- 如果候选人在这一步未能编写出正确且高效的代码,请勿继续进行后续步骤。
5. 验证技术知识/技能
真正的开发者总能快速学习并将知识应用于工作中以开发系统。但工作时需要生产力。你需要按时完成项目并高质量交付系统。所以,实际上,你总是需要那些已经知道自己所需知识并且掌握扎实的人才。
在此步骤中,验证候选人在你偏好的领域的技术知识深度。确定候选人的生产力水平,并在此花费大量时间。
示例兴趣领域
- 面向对象编程 (OOP)
- .NET 基础
- ASP.NET
- SQL Server
- 用户界面 (UI)
评分
权重:20分
最低分数:12分
必须通过:是
技巧
- 不要问任何需要记忆答案的问题。相反,要问验证候选人思考和解决问题能力的问题。例如,不要问“当 GridView 的编辑按钮被按下时触发的事件名称是什么”之类的问题。而要问“GridView 的局限性是什么,你如何克服/规避这些限制?”之类的问题。
- 真正优秀的开发者总是对相关领域拥有深入的技术知识。寻找那些主动并详细回答你问题的人。
- 优先考虑那些对基础概念有清晰认识的候选人。这表明他们总是注重细节。
- 识别那些强调最佳实践的候选人。
6. 判断经验
有时天赋和知识是不够的。天空中有很多未知的东西,只有经验才能解决其中的许多问题。
在实践中,开发者需要根据客户的需求开发系统,并解决现实生活中的问题。有经验的人最有可能为给定问题开发出高效、健壮且合适的解决方案。所以,你需要判断候选人的经验水平。
在此步骤中验证候选人在相关领域的经验。给他/她一些“需求”类的问题,让他/她(口头)在短时间内解决。能够解决这些问题的候选人表明他/她在该领域有经验。
一些示例问题
- 你的 ASP.NET 应用程序有一个 XML 配置文件。当 XML 文件中的配置值更新时,你想立即读取更新后的值。你会怎么做?
- 你有多个 ASP.NET 应用程序共享其应用程序文件夹中的大量通用图像文件。管理层决定将所有图形内容(图像文件)放在共享位置,以便不同应用程序可以重用同一个文件。你会如何实现?
- 你开发并托管了一个 ASP.NET 网站。托管后,攻击者试图通过在短时间内生成大量自动化 Web 请求来使你的网站瘫痪。你如何防止这类攻击?
评分
权重:10分
必须通过:否
技巧
- 经验丰富的开发者可以立即解决分配给他们的问题。此外,他们还会提及他们将遵循的方法的优缺点,并尝试提及其他替代方案。
7. 判断工程技能
开发者首先是“工程师”。工作中,事情往往不像预期的那样顺利,而一个好的“工程师”的工作就是在事情不顺利时让它们运转起来。一个伟大的工程师总是将问题分解成更小的部分,并遵循循序渐进的方法来解决更大的问题。
问一些类似下面的问题来判断候选人的工程技能。经验丰富的开发者可以详细回答并解释步骤。
一些示例问题
- 你被分配为项目中的现有 ASP.NET 代码编写测试代码。你将如何进行?
- 你被分配为需求进行估算。你将如何尽可能准确?
- 你被分配优化一个 ASP.NET 应用程序。你将遵循哪些步骤?
- 你被分配优化 SQL Server 中的数据访问例程。你将如何进行?
- 你被分配了一项涉及未知技术/领域任务。你将如何进行?
评分
权重:10分
最低分数:5分
必须通过:是
技巧
- 拥有良好工程技能的熟练开发者会立即理解问题,并开始分步描述他们的过程。不太好的候选人会杂乱无章地发言,方向错误。
8. 判断团队合作与领导能力
无论你多么出色和高效,你都必须在团队中工作。你的团队由不同能力水平、可能来自不同文化、拥有不同理念的各种人组成。你必须每天与他们打交道,而且你常常会在早上收到模糊的需求,而你的团队必须在晚上之前开发完成。
因此,寻找那些有条理、善于团队合作、头脑冷静的人非常重要。问一些类似下面的问题来判断候选人将如何成为一名团队成员以及他/她如何在你的团队中扮演领导角色。
一些示例问题
- 当你被分配一项不在你领域内的任务时,你如何处理?
- 当你需要修改和处理现有糟糕的代码时,你如何处理?
- 当你与他人意见不合时,你如何回应?
- 当有人对你无礼时,你如何行事?
- 你如何应对压力?
- 当需求模糊不清时,你如何处理?
- 你如何管理同时处理多项任务?
- 你如何确保自己不会错过截止日期?
- 你如何确保交付质量?
评分
权重:10分
最低分数:5分
必须通过:是
技巧
- 具有良好“团队合作”能力的熟练开发者会立即理解问题,并分步描述他们的答案。不太好的候选人会发现理解问题很困难,更不用说形成答案了。
9. 验证聪明才智与智力
你曾多少次对自己的工作感到棘手,又有多少次能够摆脱困境?软件开发者的生活充满了挑战,能够以聪明的方式为困难和不可能的解决方案制定替代方案,这体现了开发者的伟大。
在候选人中寻找制定替代解决方案的能力。问一个类似下面的问题,答案是候选人不知道的。看看候选人是否遵循了聪明且科学的思考过程来制定答案。
示例问题
你的国家有多少家加油站?
评分
权重:10分
必须通过:否
技巧
- 以正确的方式为这个问题制定答案表明该人有能力在不可能的情况下找到替代方案。真正聪明的候选人会立即开始以科学的方法制定答案。其他人则需要你的帮助。不要招聘那些说“我不知道答案”的人。
10. 要求候选人提问
一个真正优秀的开发者是任何团队的宝贵财富。所以,他/她自然会在自己的职位上获得丰厚的回报和奖励。因此,当你为你的团队评估一位真正优秀的开发者时,同时,开发者也在评估你和你的团队。他/她总是会好奇公司的潜力、稳定性、健壮性和增长性。因为,在决定辞去目前的工作之前,他/她会想确信自己正在为自己选择正确的新工作场所。
在此步骤中,寻找候选人提出的智能且成熟的问题,这些问题能体现其成熟度和认真程度。一位经验丰富且专业的候选人很可能会问以下类型的问题
一些示例问题
- 贵公司遵循什么样的开发流程?
- 如果我想在一个问题领域进行学习或研发,你们会如何看待?
- 你们如何衡量员工绩效?
- 你认为为什么贵公司是优秀开发者的最佳去处?
- 贵公司的长期愿景是什么?
评分
权重:5分
必须通过:否
技巧
在此步骤中,优先考虑那些提出成熟问题的候选人。
一些要点
- 聪明且优秀的候选人(在大多数情况下)能快速理解问题,并且总是直奔主题。糟糕的候选人会说很多与核心问题无关的事情。
- 伟大的候选人总会尝试在他们的回答中提及上下文、优缺点以及他们偏好方法的替代方案。
- 能够切题地回答问题并有条理地进行阐述的候选人表明他们具备出色的沟通能力。
- 聪明的候选人倾向于通过提及他们喜欢的关键词来主导面试。不要落入他们的圈套,确保你主导面试,而不是他们。
- 在提问编程相关问题时,尽量让他们多写代码。
- 至少应该有三名面试官评估候选人,并将他们的平均分数作为最终分数。
- 许多面试官倾向于通过提出不必要和不相关的问题来展示自己的知识深度。请不要这样做。
- 不要在一个特定的步骤上花费过多时间。除非是为了验证候选人的自信心而进行的策略,否则不要与候选人争辩。
- 如果候选人犯了错误,请不要告诉他/她正确答案。这会让他/她感到沮丧。
如果候选人以下情况,则不予考虑
- 未能通过第4步和第5步。
- 未能通过任何“必须通过”的步骤。
- 未能获得最低及格分数。
- 在简历中撒谎。
评分和及格
你可以根据你期望的水平来决定及格标准。但是,我设定了一个你可以参考的基本测量标准。
- 最低及格分数:50
- “开发者”职位所需分数:50-65
- “高级开发者”职位所需分数:65-80
- 表明“优秀开发者”的分数:80-100
最后的话
以上10个步骤中列出的问题仅供示例。我的建议是根据你的需求定制问题列表(可能包含不同难度级别),以最适合你的组织需求。此外,根据你觉得需要进一步改进特定招聘流程的评估,添加/删除任何步骤。
不能保证这个10步评估过程总是能筛选出最优秀的候选人。世界上没有完美的流程,而你的人类大脑仍然是任何流程或计算机器最终且最好的处理引擎。所以,使用这个评估结构作为一种工具,并将你自己的判断和印象与这个结构化过程的结果结合起来,做出最终决定。你很可能会成功。
祝你好运!