最佳软件开发人员的影响
优秀的软件开发人员可以为组织增加重要的价值. 但一位伟大的软件开发人员补充道 经济价值是工资的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.
Now, since FizzBuzz is a pretty well-known test, you may want to develop your own, similar test.
另一个选择是 逐步引入新的需求.
面试官也可以 让它不那么自由 通过要求候选人使用您团队的特定软件工程体系结构来实现他们的FizzBuzz解决方案. 这就把FizzBuzz测试提升到了另一个层次,筛选出来 expert beginners,而不仅仅是非程序员.
一旦你通过筛选缩小了申请人的范围, you can begin assessing the remaining candidates’ traits to find the best developers.
什么造就了高质量的软件开发人员?
是什么成就了一个伟大的软件开发人员? 优秀的开发者将具备以下特质:
- 技术技能、专业知识和经验
- 领导能力和主动性
- Dedication
- Team spirit
To help you assess these in your candidates, we have compiled a list of guidelines you can follow.
提出过去的问题或当前问题的抽象版本
问题类型:技术技能/专业知识/经验
评估候选人的技能是否适合你的组织,最好的方法是看候选人如何处理你的组织目前正在处理的问题或过去遇到的问题.
列出组织当前或过去遇到的重要问题. 从这些问题中删除过于特定于你的组织和/或无法简明解释的细节, 这样候选人就可以合理地理解给定问题的核心. 向候选人提出这些问题,看看他们在实际问题上的表现.
例如,假设您正在为IT安全经理开发一个产品. 您的组织已经花费了几个月的时间为这些IT安全管理人员创建门户,以便在其组织中管理产品. 您可能知道设计这样一个门户的来龙去脉.
例如,询问应聘者他们将如何设计这样一个门户网站:
- 他们会使用哪种语言或框架?
- 他们如何让传送门实时显示?
- 他们将如何构建相关的数据库?
- 有哪些安全方面的考虑?他们将如何解决这些问题?
同时选择与候选人期望职位相关的问题. 这样可以很好地了解候选人的技术敏锐度. 因为你对这个问题很有经验, 您将能够评估候选人的解决方案的质量,并确定谁是合法的知识和技能.
花时间关注核心体系结构问题是值得的,以了解候选人认为哪些算法和数据结构是合适的, and why. General knowledge of the performance and storage characteristics of these choices is critical. 即使开发人员在大多数情况下依赖于标准库实现, 了解幕后执行的“大O”分类将意味着他们的工作是可扩展还是失败的区别.
技术熟练的候选人的另一个重要方面是他们的能力和指导的愿望. Some software developers have great knowledge but are unable or unwilling to mentor others. 他们很容易因为请求而超载,如果他们离开,就会成为组织的单点故障, 他们可能很难或不可能从他们离开的地方重新开始工作.
评估教练能力
问题类型:技术技能/专业知识/经验
让应聘者向你解释一个你已经理解的概念.
你应该使用一个你已经理解的概念的原因是你会知道这个解释是否有用和正确. On the other hand, 如果你要求解释一个你不理解的概念, 你无法确定这个概念是否困难, 这个解释很蹩脚。, or worse, if it’s incorrect.
他们的目标是有限的还是有远见的?
问题类型:领导力/主动性
领导力的一个关键方面是远见. 候选人是否有一个方向和目标,他们希望通过加入你提供的角色来实现? 候选人的视野是否比他们自己更开阔.g.,包括团队或公司? For instance, 他们可能会寻求解决他们自己遇到的问题,并希望使世界变得更美好. 拥有清晰、宏大的目标会让个人变得鼓舞人心、富有吸引力.
例如,愿景会以具体的方式体现在领导者身上, 通过简化流程和管理官僚作风,为工程团队的成功扫清道路. 然后,工程团队可以专注于生成代码并交付出色的软件解决方案.
Also, 有远见的领导往往与奉献精神有关:一个展现出领导者品质的软件开发人员会付出额外的努力来克服困难,并在困难出现时鼓舞团队士气.
工作以外的参与
问题类型:奉献
优秀的软件开发人员不会认为他们的工作是一件苦差事. 对他们来说,这是有趣的,具有挑战性的,有趣的. 这就是你想从开发者那里得到的——自然的奉献和参与. 来了解一下, 你要评估应聘者是否有超越工作最低要求的意愿.
看他们的简历, 应聘者是否表现出了在其专业经验之外对工作的投入和兴趣? For example, does the candidate contribute to open-source projects relevant to the position? Are they actively engaged in a meetup group related to the position they are interviewing for?
优秀招聘的另一个非常重要的方面是,招聘经理要对候选人的目标和兴趣感兴趣,并确保这些目标和兴趣符合他们的期望. 员工入职后不久就离职的情况太常见了,通常是由于不了解员工的利益.
了解候选人的目标和兴趣
考核类型:敬业
因为您的目标是雇用能够为您的开发团队带来高质量结果的软件开发人员, 重要的是他们的志向, goals, and interests are reasonably met so that they can be motivated and dedicated to the project. 仔细注意这一点, 因为你的目标不是雇佣那些在有更好机会之前只做最少工作的软件开发人员,而是那些对工作充满激情的人.
On the same point, 有充分的证据表明,雇员在几个月内就辞职了, 招聘经理很困惑. In such cases, both parties could have done a better job communicating their desires and listening to each other.
评估候选人的团队合作方式
评估类型:团队合作
Nowadays, 参与更广泛的在线开发社区几乎是每个开发人员的标准选择. In many cases, 这可能意味着开源项目的协作(甚至只是报告问题)。, 或者在Stack Overflow和专门的编程论坛上帮助其他开发人员.
面试前, 询问应聘者的背景是很正常的做法. 在招聘软件工程师时, 我们有必要进一步研究一下候选人的公开在线交流历史:
- 他们是如何表达对帮助的请求或回答的?
- 当他们发表评论时,他们的批评是否具有建设性?
- 他们倾向于如何处理分歧?
如果他们经常在网上说话时粗鲁无礼,断送了沟通的桥梁, 你是否有充分的理由相信他们不会在你的组织中做同样的事情? 假设在这次探索之后他们仍然是候选者, 在这里发现的任何黄旗都值得在面试中询问,以帮助了解候选人的观点.
The rare developer who isn’t active in online communities may still be a good team player. 直接的面试问题会帮助你判断这种情况:
- 有哪些过去的开发团队合作的例子让他们感到积极的?
- 他们是如何从失败中学习和成长的?
从这些问题中产生的轶事将给你一个机会来衡量候选人如何融入你的团队,以及如何影响你的团队动态.
Tips
下面的技巧可以大大提高你面试的成功率.
技巧1:确保提出相关问题,避免技术细节
Screen for effectiveness in the task you need completed, rather than breadth of knowledge. 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 进行学术练习, 但这些问题不应该出现在面试中,作为通过/不通过的测试, 他们肯定会在您的组织和优秀的开发人员之间设置障碍——即使是那些能够成功回答这些问题的开发人员.
在今天的软件开发领域, even specialized roles can involve knowledge of dozens or even hundreds of pieces of technology. 在与当前团队协商后定义一组关键元素, 但不要因为候选人 不会有广博的知识 您的整个开发堆栈. For example, 他们知道主语言标准库中每个日期处理函数的名称和函数签名并不重要. What is 重要的是,他们意识到这些东西的存在,并且在处理日期时应该默认使用它们. Besides, 随着软件环境的不断发展,每个软件工程角色都将涉及一定数量的在职培训和持续学习.
也不值得关注容易查找的语法. 如果编译器或过滤器能捕捉到它,那么面试就不应该捕捉到. Instead, 向候选人展示一个功能齐全的开发环境和一些有错误的简单代码. Then, ask them (without a visible time limit) to walk you through the steps they take as they debug it. Whether they need to google the docs is much less relevant than whether they succeed.
毕竟,即使是基本的运算符,比如 ->
, &
, 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, 与闭卷测试相比,简单的实际调试练习可以让您更好地了解它们的基本能力.
记住,你的目标是找到优秀的软件开发人员. If a question or detail can be easily looked up or has no bearing on actual software development, 最好不要用它来筛选候选人.
提示2:提供试用期
A trial period is certainly an added expense that we would all prefer not to have, but it 以股息的形式支付. 在这个远程工作的时代,试用比以往任何时候都更容易使用有效 remote tools 比如Slack和Zoom.
从需要最少制度知识的最小任务开始, 因此,新员工和团队其他成员损失的时间最少. Assign aesthetic tweaks, minor bug fixes on low-risk, isolated parts of the codebase. 如果缺乏相关的内部文件, the new hire will likely find it; if the knowledge gap isn’t too large, 他们甚至可以帮助改善它.
让新员工也成为代码审查的一部分. 他们在这种情况下的意见应该突出他们给团队带来了什么. 但它也可以揭示他们的实践或个性可能不适合你的团队的领域, 以及这种情况被纠正的可能性有多大.
在这一点上不得不减少损失从来都不是一个容易的选择, 但要经过一段时间的精心挑选, 你的团队和组织至少应该得到 some 完成了工作,增加了自我认识,可以用于下一次试验. 成功的试验也将部分地让新员工上手,并使他们站稳脚跟,开始加大他们的贡献.
技巧3:获取尽可能多的意见
从你的团队中获取尽可能多的关于招聘的意见. 有时候,安静的人往往能说出最有见地的话!
这样做的原因是, 人们与不同的人有不同的关系是很自然的,在这里尤其如此. For example, 一个紧张的求职者可能会避免与决定是否雇用他的人意见冲突,但会更自在地与未来的同事开诚布公.
不管动力是什么, 收集尽可能多的人的印象将更有可能有助于揭示候选人的经历和沟通模式的细微差别. Either way, 你会从对候选人更准确的了解中受益, 这将帮助您在招聘软件工程师时做出最佳选择.
为你的软件开发团队雇佣最好的开发人员
You now have a great template to start with for looking for the best software developers. 从这篇指南中学到的最重要的一点是,找到优秀的员工需要积极主动和细心. 但就像所有有价值的事情一样,回报是值得付出努力的.
1: Spencer, L.M. “The Economic Value of Emotional Intelligence Competencies and EIC-Based HR Programs.在情感上
智能工作场所:如何选择, Measure, 提高个人的情绪智力, Groups, and Organizations,
eds. C. Cherniss and D. 戈尔曼,第四章. 旧金山,加利福尼亚:Jossey-Bass/Wiley, 2001.
在计算机程序员的生产力研究中, 高于平均水平的程序员比一般程序员的效率高320%. Top performers were 1,272% more productive, adding economic value more than 11 times their salary.