最佳软件开发人员的影响
优秀的软件开发人员可以为组织增加重要的价值. 但一位伟大的软件开发人员补充道 经济价值是工资的11倍以上.1 本指南将为您提供建议,您可以在即将进行的搜索中立即实现最佳软件开发人员.
Prescreening
如果你打算雇佣最好的软件开发人员, 你需要在更深层次上了解应聘者. Unfortunately, 给每一个潜在的候选人一次面试机会往往是不切实际的, let alone a paid, week-long trial. 用一个简单的, 客观的测试可以帮助你确定哪些是值得仔细研究的.
进入久经考验的“FizzBuzz测试”…
The FizzBuzz Test
问题类型:技术技能、专业知识和经验
FizzBuzz Test写一个程序打印从1到100的数字. 但是对于3的倍数,打印 fizz
而不是数字,对于5的倍数,打印 buzz
. 对于同时是3和5的倍数的数字,打印 fizzbuzz
.”
虽然很简单,但这个测试将被淘汰 数量惊人的多 of candidates.
根据你想要填补的角色,你可以尝试一些变化. 例如,您可以使用FizzBuzz测试该职位所需的每种语言.
此外,测试FizzBuzz代码是否工作也很容易. 例如,在Python中,您可以找到 an online REPL 然后用它来运行候选人的代码,它可能看起来像这样:
对于(1,101)范围内的fizzbuzz:
如果fizzbuzz % 3 == 0且fizzbuzz % 5 == 0:
print("fizzbuzz")
continue
if fizzbuzz % 3 == 0:
print("fizz")
continue
if fizzbuzz % 5 == 0:
print("buzz")
continue
print(fizzbuzz)
如果输出是正确的,那么他们通过了测试:
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
... etc.
现在,由于FizzBuzz是一个非常有名的测试,您可能想要开发自己的类似测试.
另一个选择是 逐步引入新的需求.
面试官也可以 让它不那么自由 通过要求候选人使用您团队的特定软件工程体系结构来实现他们的FizzBuzz解决方案. 这就把FizzBuzz测试提升到了另一个层次,筛选出来 expert beginners,而不仅仅是非程序员.
一旦你通过筛选缩小了申请人的范围, 您可以开始评估剩余候选人的特征,以找到最好的开发人员.
什么造就了高质量的软件开发人员?
是什么成就了一个伟大的软件开发人员? 优秀的开发者将具备以下特质:
- 技术技能、专业知识和经验
- 领导能力和主动性
- Dedication
- Team spirit
为了帮助你在你的候选人中评估这些,我们编制了一份你可以遵循的指导方针清单.
提出过去的问题或当前问题的抽象版本
问题类型:技术技能/专业知识/经验
评估候选人的技能是否适合你的组织,最好的方法是看候选人如何处理你的组织目前正在处理的问题或过去遇到的问题.
列出组织当前或过去遇到的重要问题. 从这些问题中删除过于特定于你的组织和/或无法简明解释的细节, 这样候选人就可以合理地理解给定问题的核心. 向候选人提出这些问题,看看他们在实际问题上的表现.
例如,假设您正在为IT安全经理开发一个产品. 您的组织已经花费了几个月的时间为这些IT安全管理人员创建门户,以便在其组织中管理产品. 您可能知道设计这样一个门户的来龙去脉.
例如,询问应聘者他们将如何设计这样一个门户网站:
- 他们会使用哪种语言或框架?
- 他们如何让传送门实时显示?
- 他们将如何构建相关的数据库?
- 有哪些安全方面的考虑?他们将如何解决这些问题?
同时选择与候选人期望职位相关的问题. 这样可以很好地了解候选人的技术敏锐度. 因为你对这个问题很有经验, 您将能够评估候选人的解决方案的质量,并确定谁是合法的知识和技能.
花时间关注核心体系结构问题是值得的,以了解候选人认为哪些算法和数据结构是合适的, and why. 了解这些选择的性能和存储特性非常重要. 即使开发人员在大多数情况下依赖于标准库实现, 了解幕后执行的“大O”分类将意味着他们的工作是可扩展还是失败的区别.
技术熟练的候选人的另一个重要方面是他们的能力和指导的愿望. 一些软件开发人员拥有丰富的知识,但不能或不愿指导他人. 他们很容易因为请求而超载,如果他们离开,就会成为组织的单点故障, 他们可能很难或不可能从他们离开的地方重新开始工作.
评估教练能力
问题类型:技术技能/专业知识/经验
让应聘者向你解释一个你已经理解的概念.
你应该使用一个你已经理解的概念的原因是你会知道这个解释是否有用和正确. On the other hand, 如果你要求解释一个你不理解的概念, 你无法确定这个概念是否困难, 这个解释很蹩脚。, or worse, if it’s incorrect.
他们的目标是有限的还是有远见的?
问题类型:领导力/主动性
领导力的一个关键方面是远见. 候选人是否有一个方向和目标,他们希望通过加入你提供的角色来实现? 候选人的视野是否比他们自己更开阔.g.,包括团队或公司? For instance, 他们可能会寻求解决他们自己遇到的问题,并希望使世界变得更美好. 拥有清晰、宏大的目标会让个人变得鼓舞人心、富有吸引力.
例如,愿景会以具体的方式体现在领导者身上, 通过简化流程和管理官僚作风,为工程团队的成功扫清道路. 然后,工程团队可以专注于生成代码并交付出色的软件解决方案.
Also, 有远见的领导往往与奉献精神有关:一个展现出领导者品质的软件开发人员会付出额外的努力来克服困难,并在困难出现时鼓舞团队士气.
工作以外的参与
问题类型:奉献
优秀的软件开发人员不会认为他们的工作是一件苦差事. 对他们来说,这是有趣的,具有挑战性的,有趣的. 这就是你想从开发者那里得到的——自然的奉献和参与. 来了解一下, 你要评估应聘者是否有超越工作最低要求的意愿.
看他们的简历, 应聘者是否表现出了在其专业经验之外对工作的投入和兴趣? 例如,应聘者是否参与了与该职位相关的开源项目? 他们是否积极参加与面试职位相关的聚会?
优秀招聘的另一个非常重要的方面是,招聘经理要对候选人的目标和兴趣感兴趣,并确保这些目标和兴趣符合他们的期望. 员工入职后不久就离职的情况太常见了,通常是由于不了解员工的利益.
了解候选人的目标和兴趣
考核类型:敬业
因为您的目标是雇用能够为您的开发团队带来高质量结果的软件开发人员, 重要的是他们的志向, goals, 并且合理地满足他们的兴趣,这样他们就可以被激励并致力于项目. Note this carefully, 因为你的目标不是雇佣那些在有更好机会之前只做最少工作的软件开发人员,而是那些对工作充满激情的人.
On the same point, 有充分的证据表明,雇员在几个月内就辞职了, 招聘经理很困惑. In such cases, 双方本可以更好地沟通他们的愿望,倾听对方的意见.
评估候选人的团队合作方式
评估类型:团队合作
Nowadays, 参与更广泛的在线开发社区几乎是每个开发人员的标准选择. In many cases, 这可能意味着开源项目的协作(甚至只是报告问题)。, 或者在Stack Overflow和专门的编程论坛上帮助其他开发人员.
面试前, 用谷歌搜索候选人的背景是很正常的. 在招聘软件工程师时, 我们有必要进一步研究一下候选人的公开在线交流历史:
- 他们是如何表达对帮助的请求或回答的?
- 当他们发表评论时,他们的批评是否具有建设性?
- 他们倾向于如何处理分歧?
如果他们经常在网上说话时粗鲁无礼,断送了沟通的桥梁, 你是否有充分的理由相信他们不会在你的组织中做同样的事情? 假设在这次探索之后他们仍然是候选者, 在这里发现的任何黄旗都值得在面试中询问,以帮助了解候选人的观点.
很少有不活跃于在线社区的开发者仍然是优秀的团队成员. 直接的面试问题会帮助你判断这种情况:
- 有哪些过去的开发团队合作的例子让他们感到积极的?
- 他们是如何从失败中学习和成长的?
从这些问题中产生的轶事将给你一个机会来衡量候选人如何融入你的团队,以及如何影响你的团队动态.
Tips
下面的技巧可以大大提高你面试的成功率.
技巧1:确保提出相关问题,避免技术细节
筛选你需要完成的任务的有效性,而不是知识的广度. The basic rule of thumb for determining if something is technical minutia or a critical technical detail is the combination of importance and frequency; if a detail is expected to come up frequently or will have a huge impact, 那么它就值得关注. Otherwise, 一个不太可能出现的细节——即使出现也不太可能, 这没什么关系——最好不要进入面试环节.
确保你的技术问题尽可能与职位相关. For example, 如果你在寻找一名数据科学家(主要使用R或Python), 最好不要问有关指针和c++的技术方面的问题. 尽管这些问题可能会间接地评估候选人的技术知识, 他们更有可能筛选出错误的品质. In addition, 优秀的应聘者可能会想知道为什么你会问一些与工作职位无关的问题,以及你是否了解工作的要求.
最好避免编程语言的难题和“陷阱”.“这些类型的谜题甚至可能难住最优秀的开发者,而且与现实世界的工作几乎没有关系, 特别是在遵循最佳实践的情况下. Such questions 进行学术练习, 但这些问题不应该出现在面试中,作为通过/不通过的测试, 他们肯定会在您的组织和优秀的开发人员之间设置障碍——即使是那些能够成功回答这些问题的开发人员.
在今天的软件开发领域, 即使是专门的角色也可能涉及几十种甚至数百种技术的知识. 在与当前团队协商后定义一组关键元素, 但不要因为候选人 不会有广博的知识 您的整个开发堆栈. For example, 他们知道主语言标准库中每个日期处理函数的名称和函数签名并不重要. What is 重要的是,他们意识到这些东西的存在,并且在处理日期时应该默认使用它们. Besides, 随着软件环境的不断发展,每个软件工程角色都将涉及一定数量的在职培训和持续学习.
也不值得关注容易查找的语法. 如果编译器或过滤器能捕捉到它,那么面试就不应该捕捉到. Instead, 向候选人展示一个功能齐全的开发环境和一些有错误的简单代码. Then, 请他们(没有明显的时间限制)向您介绍调试过程中所采取的步骤. 他们是否需要用谷歌搜索这些文档,远不如他们是否成功重要.
毕竟,即使是基本的运算符,比如 ->
, &
, and .
can have wildly different meanings between languages; developers who are expected to work with multiple languages are unlikely to keep these meanings straight 100 percent of the time, 尤其是在压力很大的面试环境中. The bottom line is, 与闭卷测试相比,简单的实际调试练习可以让您更好地了解它们的基本能力.
记住,你的目标是找到优秀的软件开发人员. 如果一个问题或细节可以很容易地查到,或者与实际的软件开发没有关系, 最好不要用它来筛选候选人.
提示2:提供试用期
试用期当然是一项额外的开支,我们都不希望有,但它 以股息的形式支付. 在这个远程工作的时代,试用比以往任何时候都更容易使用有效 remote tools 比如Slack和Zoom.
从需要最少制度知识的最小任务开始, 因此,新员工和团队其他成员损失的时间最少. 对代码库的低风险、孤立部分进行美学调整和小bug修复. 如果缺乏相关的内部文件, the new hire will likely find it; if the knowledge gap isn’t too large, 他们甚至可以帮助改善它.
让新员工也成为代码审查的一部分. 他们在这种情况下的意见应该突出他们给团队带来了什么. 但它也可以揭示他们的实践或个性可能不适合你的团队的领域, 以及这种情况被纠正的可能性有多大.
在这一点上不得不减少损失从来都不是一个容易的选择, 但要经过一段时间的精心挑选, 你的团队和组织至少应该得到 some 完成了工作,增加了自我认识,可以用于下一次试验. 成功的试验也将部分地让新员工上手,并使他们站稳脚跟,开始加大他们的贡献.
技巧3:获取尽可能多的意见
从你的团队中获取尽可能多的关于招聘的意见. 有时候,安静的人往往能说出最有见地的话!
这样做的原因是, 人们与不同的人有不同的关系是很自然的,在这里尤其如此. For example, 一个紧张的求职者可能会避免与决定是否雇用他的人意见冲突,但会更自在地与未来的同事开诚布公.
不管动力是什么, 收集尽可能多的人的印象将更有可能有助于揭示候选人的经历和沟通模式的细微差别. Either way, 你会从对候选人更准确的了解中受益, 这将帮助您在招聘软件工程师时做出最佳选择.
为你的软件开发团队雇佣最好的开发人员
现在您有了一个很好的模板,可以开始寻找最好的软件开发人员. 从这篇指南中学到的最重要的一点是,找到优秀的员工需要积极主动和细心. 但就像所有有价值的事情一样,回报是值得付出努力的.
1: Spencer, L.M. 情商能力的经济价值和基于eic的人力资源计划.在情感上
智能工作场所:如何选择, Measure, 提高个人的情绪智力, Groups, and Organizations,
eds. C. Cherniss and D. Goleman, Chapter 4. 旧金山,加利福尼亚:Jossey-Bass/Wiley, 2001.
在计算机程序员的生产力研究中, 高于平均水平的程序员比一般程序员的效率高320%. 表现最好的员工的生产力要高出122%,其经济价值是工资的11倍多.