当前位置: 首页 > 科技观察

开发者面试的方式

时间:2023-03-17 01:27:22 科技观察

在LinkedIn上有很多公司的CEO声称他们可以在五分钟内通过简单的对话找到合适的候选人,这实际上是违反科学的。本文将揭示面试开发人员的科学。我对LinkedIn上令人发指的帖子感到不耐烦,其中一位崭露头角的技术CEO说,“我不需要进行为期一周的面试和对候选人的多次评估,只需与候选人交谈。进行一次对话,大约五分钟你可以判断他们是否胜任这份工作。”真的是这样吗?不。虽然较短的面试是一个不错的选择(过长的面试会吓跑最抢手的候选人),但事实证明,“一边喝咖啡一边聊天”的面试很糟糕,其结果并不比随机选择好多少。我们从这些CEO身上看到的,并不是非凡的直觉或社交技巧,而是邓宁-克鲁格效应,一种认知偏见,能力较弱的人有一种虚幻的优越感,会错误地高估自己的真实能力,越是糟糕,高估的程度越高。最深入研究的例子之一是访谈。如果没有事先准备,世界上没有人能在五分钟的谈话中评估一个人的工作技能。即兴谈话不是采访,只是达到聊天的效果。然而,一些雇主仍然坚持认为这是挑选优秀候选人的最有效方式。研究后的研究表明,这种做法是错误的。无约束、无结构的面试会大大增加各种偏见,为面试官的个性打开大门,最终大大降低招聘的准确性。结果可能比跳过面试和随机选择更糟糕。更糟糕的是,错误的候选人可能会使公司损失数百万美元并导致项目严重延误。编码侦察员和能力证明对于程序员来说,一次糟糕的面试尤其令人沮丧。而编程又是一个特别纯粹的能够证明自己能力的考试项目。您不能仅通过查看来评估桥梁的质量或一顿饭的准备工作量,但是代码不同。很纯粹,所见即所得,好坏一目了然。考生无需太多复杂的设置即可实时展示自己编写优雅代码的能力。然而,许多公司的做法恰恰相反,他们经常问一些与他们招聘的工作完全无关的奇怪问题。我们大多数人都亲身经历过。你正在面试你的第一份程序员工作,面试官想知道元素周期表中的哪个元素最能反映你的个性;你是一名资深的前端开发人员,但在长达一个小时的面试中,却出现了一些“作弊”的试题,比如闭包(closures)和提升(variabledeclarationpromotion)的用法;你从零开始搭建了多个.Net应用,但是面试官要你倒转二叉树;你已经为Linux内核代码做出了贡献,但现在你必须猜测面试房间里可以容纳多少个乒乓球。这一切都让你感到心碎。在当前程序员炙手可热、工资飞涨的市场环境下,这样的现象令人费解。越来越多的公司允许远程工作以增加他们的吸引力。一些初创科技公司还提供每周只工作四天的优惠待遇。猎头和试图联系我们的骗子一样疯狂。但如果录用的候选人不能胜任工作,这一切都是徒劳的,那么为什么企业不愿意在招聘阶段花更多钱呢?优化面试流程让我们谈谈理想的编程面试应该是什么样子。如果你的工作是编写Java代码,流程可能是这样的:1.第一次接触候选人时,公开薪资范围和福利2.提前查看候选人的简历,了解他们的Java专业或开源经验(任何其他编程languageissimilar;GroovyandKotlincanbecomparable)3.观察候选人在真实环境中近一个小时的JavaCoding,根据预先设定的、与工作相关的维度,如问题解决、空值安全、错误处理、可读性、命名约定、打包等。4.进行标准化和标准化的评估,调查候选人对JVM和基本命令行工具的熟练程度5.让候选人知道他们何时可以收到跟进通知。拒绝让候选人在业余时间从头开始构建一个15小时的项目。您只需要正常评估他们的工作技能即可。当然,这并不是说我认为编码能力(或与此相关的技能)是对候选人唯一重要的事情。诚然,你想雇用可靠、聪明、诚实和善良的人,但你必须将你的要求限制在已知的范围内,就工作面试而言,没有太多选择。大多数求职者在求职面试中都很虚伪,而且绝大多数人都会撒谎。即使假设候选人是诚实的,十分之九的人也会经历面试焦虑。如果你想真正了解一个人在工作中的表现,你根本不能依靠面试,那不是他们真正的样子。当然,如果你看到任何不好的迹象,比如对接待员无礼,你可以直接扔掉他们的简历,但这种情况通常很少见。这也是招聘的内在恶:面试并没有我们想象的那么厉害。许多雇主尝试使用软技能和性格测试的面试方法。但任何超出真实、无法衡量的事物通常都是幻觉,尽管看起来很有说服力。2013年的一项研究表明,即使面试官的回答是随机选择的,面试官对他们的印象也非常自信!人们倾向于相信第一印象,无论它们是否准确,这可能会在招聘过程中造成失误。任何仅靠其他人的直觉的测试方法都会降低结果的准确性。唯一可以准确衡量的就是任务能力。测试编程能力的方法尽管如此,如果现场编程是我们能做的最好的,那么衡量编程能力的理想方法是什么?许多商业产品,如LeetCode,提供了一个编码平台,其中包含许多预先设计的任务,可以自动评分给测试候选人。虽然它们比传统方法好得多,但我们不打算推广它们。仔细想想,你的团队整天都在做有针对性的、现实的面试评估。为什么你用了别家公司的通用评价方式,还花钱买?上次设计编程测试的时候,从日常工作中选了一段不错的代码(不是“胶水代码”)但不涉及任何公司业务,调整为可以独立运行,并把函数签名复制到LINQPad(一个.net代码执行平台)平台,应聘者的任务和我的岗位需求很相似,需要实现这个函数。当他们完成后,我知道他们是否胜任这项工作,基本上没有比这更好的衡量方法了。此外,到目前为止,我所经历过的最好的面试过程是与一家初创公司签订为期一周的合同(有些公司称之为“试镜”),我与他们的团队一起工作,他们给我分配了一项任务,我克隆了他们的回购代码,写了几个晚上提交了PR(PullRequest),团队其他成员反馈,我根据反馈修改代码到达他们那里,最后他们合并了代码,按小时收费。尽管我最后没有接受他们的提议,但这对每个人来说都是双赢的——他们做了一些额外的工作,我得到了报酬。如果我接受了,那么通过一周的工作证明我的技能和团队合作就不会有任何问题。多年以后,如果我还在找工作,这家公司仍然在我的候选名单中,因为它是一种非常可靠的面试方法。也许这不是您认为的面试,但我会说它比面试好很多。你能想象花5分钟与甚至不会编码和决定面试结果的CEO闲聊是多么荒谬吗?由于安全或公司规定等原因,部分团队可能无法使用上述面试方式。在这种情况下,你应该尽量保证统一的面试流程。如果你不能让面试看起来像工作,至少让每次面试都遵循相同的系统并根据相同的指标比较候选人。为了帮助候选人达到最佳状态,还可以灵活调整统一的标准和科学的面试流程。每个候选人都有不同的要求,没有必要为了标准化而用与面试指标无关的东西来伤害个人或团队。例如,免疫系统低下的候选人被要求选择远程面试以确保他们的健康;患有身体或神经系统疾病的候选人希望分段面试能够休息,而不是三个小时的面试马拉松,因此他们可能表现得更好;一些面试焦虑的候选人可能需要在面试前一两分钟与面试官交朋友,而对于其他人来说,他们宁愿跳过这部分闲聊。您应该始终根据应聘者的需要调整面试的环境或节奏,这样的调整是双赢的,因为它使每个应聘者都有机会发挥自己的最佳水平。如果你想找到最好的候选人,你需要在他们最好的时候评判他们。另外,面试也是一个双向选择的过程,你在评价应聘者,应聘者也在评价你的公司和团队。拒绝候选人是不值得的,因为他们的要求不属于标准流程的一部分。你希望获得客观可比的面试指标,候选人希望获得合理的便利和帮助,那么如何调解这个矛盾呢?可以采用软件设计中一个著名的法则,保守主义原则:“对你所做的保守,对别人接受的开放”。将这一原则应用于面试,你应该在标准化和相关技能检查方面保持保守,而在应聘者需要帮助的领域保持自由。这样既可以两全其美,既可以获得自己想要的指标数据,又不会让应聘者的表现受到不必要的条条框框的束缚。总结数十年的研究表明,结构化、真实和以工作为中心的面试是黄金法则。因此,当您决定使用计划外的面试流程或某些无法量化的评估指标时,您应该问问自己,我是不是想挑出一个不合适的候选人。当然,也有误读和不合适的人选出事的时候,但这是无法避免的。最好的面试机制只能保证结果大多是准确的。所以不要害怕偶尔的错误,依靠你的直觉来评估候选人。电脑偶尔会卡顿,但人还能回到用笔写字的日子吗?科学的招聘机制可能是公司相对于竞争对手的最大优势,而做到这一点的最好方法是关注你可以评估的量化指标。译者介绍李腾辉,社区编辑,目前就职于某东南亚互联网金融独角兽,任高级Java工程师,负责金融借贷平台的架构设计和核心建设。对互联网金融架构、微服务体系有深入研究。金田继续深耕。原标题:面试开发者的科学,作者:IsaacLyman链接:https://stackoverflow.blog/2022/05/23/the-science-of-interviewing-developers/