写点什么

什么样的软件面试算合理的?

  • 2019-12-16
  • 本文字数:3154 字

    阅读完需:约 10 分钟

什么样的软件面试算合理的?

从产品战略到招聘流程的指导原则,分享我们的理念和实践

在 Qualified,我们帮助客户评估和雇用软件工程师,为他们提供从雇用开发人员到产品战略所需的工具和流程。作为软件公司的我们自己,同样面临与客户相同的挑战,我们也需要雇用优秀的软件工程师!


我们必须直接面对客户的挑战,这会导致不断的自省-我们正在开发的产品的确是评估软件工程师的最佳方法吗?我们是否提倡遵循自己的招聘方式?用什么来指导我们作为雇主的招聘行为?


尽管每家公司都是独一无二的,但我们认为将自己的想法、信念和理念用在聘用软件工程师上很重要,因为这份文件积累了我们的经验,这些是指导我们的行为和共同标准。

哲学

人才招聘和主管之间的过分紧张情况已得到充分证明,克服这种紧张情况是指导我们开发和雇用实践理念的核心。最好的指导思想如下:


要确定优秀的开发人才,需要对开发人员的工作和生活有深刻的了解,这样公司与开发人员之间的会相互尊重。我们开发的产品希望将用作招聘开发候选者,因为这些工具展示我们的最佳工作情况。

我们的招聘信念和行为方式

绝对不要当场开发

当您看到开发人员认为问题出在眼前时,请不要用批判的眼神盯着开发人员,因为这确实令人毛骨悚然。


白板或结对编程访问会要求开发人员编写代码,而其他人则实时查看,这是一个坏习惯。如果您正在与候选人共同合作以了解他们的工作风格,或者要求引导他们阅读他们已经编写的代码,那么结对编程方式可能会非常有用。但是把它们当场并要求他们按需编写代码吗?不要做


您要做的只会增加候选人的焦虑感,并限制他们进一步展示自己能做什么的潜在能力。


工作经验是工作绩效的最佳预测指标

从心理学的角度来看,相关的工作样本已被证明是在职绩效的最佳预测指标之一。忘了只针对算法技能进行探索的通用编码测试,而选择一种针对其在招聘渠道阶段和所要担任的角色进行了真正优化的评估。评估应设计为测试实际的在职任务,一旦被雇用,将要求开发人员使用技术栈和框架。

公平的招聘过程基于证据和优点

您的工程团队可能已经将应聘者推荐给了您的公司,或者您可能会根据他们在 Facebook 或 Uber 的经验而聘请开发人员。不要陷入这些陷阱,就我们的经验而言,最好的开发人员通常不是拥有出色简历和大公司经验的开发人员。


良好的评估和良好的招聘流程可以仅根据人才和应用技能来评判工程师,消除所有其他形式的偏见。这就是为什么我们在评估平台中内置了“盲评”之类的功能,从代码提交中删除了任何识别信息,反过来又迫使您的团队仅根据所展示的技能和所提交工作样本的质量来进行基于证据的招聘。

让开发人员在舒适的开发环境中工作

您不会要求毕加索用刚刚从垃圾箱取出来的破旧的 Crayola 纸袋来交付下一个杰作吧,为什么您要让开发人员在对他们来说陌生的编码环境中完成编码测试?


采访软件开发人员的整个过程应集中于一个单一的目标,即使开发人员具有在现实世界中有效地为您的代码库做出贡献的技能。您想给他们一切机会展示他们最好的作品,首先要让他们在适合他们的开发环境中执行。


我们致力于为开发人员提供高度灵活且可配置的 IDE,并积极致力于使开发人员能够使用自己的开发环境来完成合格评估。

将评估过程限制为 30 分钟或 3 个小时

不要要求求职者在求职面试中花 8 个小时来编写软件,这真是一团糟,要尊重求职者的时间。


通常,在招聘渠道进行的预筛选评估限制为 30 分钟。将这些评估的最长时间设置为 45-60 分钟是有道理的,这样考生就不会觉得挑战像是定时炸弹,而是设计预筛选评估,以便平均可以在 30 分钟内完成评估。


较详细和涉及的后期编码项目应以大约 3 个小时为上限。这些只是粗略的基准,我们认为这些基准表示尊重求职者的时间,同时仍然为您的公司提供了大量评估工作人员技能的工作样本。


最好的是,通过限制候选人花在编码练习上的时间,您可以看到每个开发人员在分配的时间可以取得多大的进步,并可以使用交互式会话公开讨论他们的位置以及他们可能做什么接下来,如果他们继续该项目。

聘请高级工程师时进行周密的预筛选工作

当高级开发人员被要求完成预筛选编码评估时,他们通常会很警惕:“我是一位经验丰富的高级工程师,为什么您要我在这个简单的编码任务上浪费我的时间?”


这种观点是完全合理的,但我们也很感激桌子那边的员工。聘请高级工程师时,我们亲身经历了以下问题:


  1. 高级工程职位得到初级工程师的大量应用。

  2. 许多看起来很出色的开发人员甚至无法为基本任务编写优雅的代码。

  3. 查看存在的老代码示例(通常在雇用高级工程师时被建议作为解决方案)非常耗时,,并且很难验证候选人是否确实编写了代码。


因此,我们提倡与高级工程师一起使用预筛选评估,但“高级”并不意味着评估应该是真正深入,困难或冗长的编码评估。取而代之的是,使用简短的预筛选程序来简单地验证申请人是否可以执行基本的编码任务-这是招聘程序中有用的第一步,是真正的高级工程师可以在几分钟之内完成的工作。这对双方都公平。


最后,不要失去你的业务目标的视线,如果你雇用一个关键任务发展中的作用,并有申请人的数量较少,你总是可以跳过预过滤筛选,以增加申请流程和评估推迟技术能力,直到后来在招聘渠道中。

对中高级软件人才,使用基于项目的编码挑战来进行评估

虽然在屏幕前沟通是一个有用的工具,一旦编码能力的基本水平证明你应该集中在招聘过程的其余部分的评估,你会期望高层开发人员拥有的技能超出编码能力,他能提供真正的帮助解决办法。


创建一个基于项目的编码评估,该评估可以直接反映开发人员被雇用时预期将完成的工作内容,并确保提供一些开放性,使求职者能够展示自己的优势。这可能需要开发人员 pull 现有代码库,收集需求,与您的团队沟通他们想要 push 的请求,或者在合并到生产之前已经提交的代码的详细说明。这些实践活动将您的评估过程扩展到了代码之外,从而揭示了候选人实际想要工作的方式。

完善的代码审查流程可以带来 3 倍的价值

在基于项目的代码评估时,请不要仅仅依靠自动评分,您的开发人员始终会审核代码,而正确的审核过程只需几分钟(而不是一个小时或更长时间)。使用自动评分来处理审阅过程中最耗时的部分,使审阅者可以只关注真正值得他们注意的部分代码。


自动计分可以帮助您回答“应聘者可以完成工作吗?”的问题,但是简短的代码审查才能真正洞察应聘者是否可以提供优质的工作价值。另外,不要错过与候选人讨论过去工作的机会,以讨论不同的方法、技术以及诸如在添加新需求如何扩展的解决方案事情。


一旦提交代码以合并到生产环境中,您的工程团队就有可能执行代码审查工作。为什么在招聘过程中提交的工作样本做不同的事情?您还可以观看简短的代码回放剪辑,或与候选人进行配对编程会议以讨论他们的代码提交。无论您选择哪种方式,此过程每次审核应花费 5 到 15 分钟,而不是花一个小时或更长时间观看某人的过程直播,然后再写反馈。


这样的三管齐下的评审方法是使高级人才浮出水面的关键,而孤立地进行自动评分是无法实现的。

应聘者应该知道他们在招聘过程中的状态

如果您要求工程师花费大量时间应聘公司的职位,那么他们应该得到有关他们在招聘过程中所处位置的及时反馈。没有什么比被“漠视”更糟糕的了!


毫无疑问,您如何对待申请人直接反映了公司的文化。在招聘过程中过五关斩六将的候选人表明您正在高效地进行工作,您让不会继续下一轮面试候选人及时了解他们的状况,这表示尊重和考虑他们的时间。这样做不仅是正确的事,而且将候选人留下很好的口碑,避免对公司有不好的认识。

我们在建立我们想要的世界

这些准则听起来很简单,但是实际使用中可以帮助您的公司打开新的扩张招聘渠道,在开发人员中建立信誉,并在整个招聘过程中留下深刻的印象。简而言之,我们正在建立开发人员招聘经验的未来,我们希望以软件工程师的身份参与其中。


原文链接:


the qualified manifesto on hiring software developers


2019-12-16 16:023375

评论

发布
暂无评论
发现更多内容

开源一夏 | Node.js实战对于Buffer和Stream模块系统的深入剖析

恒山其若陋兮

开源 8月月更

ABAP工作进程对数据库表读取操作的检测

汪子熙

数据库 SAP abap Netweaver 8月月更

HTML

武师叔

8月月更

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵教育

RocksDB在大规模分布式系统应用中的经验

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点

汪子熙

字符串 SAP abap Netweaver 8月月更

程序员面试太卷?我选择背这份阿里最新Java面试八股文(详解版)

Java面试那些事儿

Java 面试 Java 面试 java程序员 java 编程

开源贡献者计划 2022 第二期正式启动!争做战“码”先锋!

InfoQ写作社区官方

开源 OpenHarmony 热门活动

leetcode 303. Range Sum Query - Immutable 区域和检索 - 数组不可变(简单)

okokabcd

LeetCode 算法与数据结构

5 分钟温故知新 RxJS 【转换操作符】

掘金安东尼

前端 函数式编程 8月月更

头脑风暴:最长递增子序列

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

微服务的拆分与设计原则

阿泽🧸

微服务 8月月更

IPv6邻居发现协议详解

穿过生命散发芬芳

NDP 8月月更

【Django | 开发】面试招聘信息网站(快速搭建核心需求)

计算机魔术师

8月月更

C++继承中的多继承语法与菱形继承

CtrlX

c c++ 面向对象 继承 8月月更

短视频源码APP开发——短视频的功能

开源直播系统源码

软件开发 直播系统源码 短视频直播系统

避免 10 大 NGINX 配置错误(下)

NGINX开源社区

nginx 配置 配置分析 故障排除

百炼成钢 —— 声网实时网络的自动运维丨Dev for Dev 专栏

声网

Dev for Dev 自动运维

把充电宝拆了看看

Sher10ck

拆解 充电宝

C语言基本的窗口开发

计算机魔术师

8月月更

openEuler代码贡献之星:麒麟软件裴建康

openEuler

开发者 成长 代码规范 openEuler 开源社区

【Java】:数组的创建、赋值、访问以及长度

翼同学

Java 学习 编程语言 分享 8月月更

深度学习公式推导(3):初探神经网络

老崔说架构

[极致用户体验] 网页里的「返回」应该用 history.back 还是 push ?

HullQin

CSS JavaScript html 前端 8月月更

每日一R「09」类型系统(三)

Samson

8月月更 ​Rust

HPC、AI与云计算:当智能时代三叉戟在亚马逊云科技完美融合

脑极体

字节跳动嵌入式数据分析最佳实践

字节跳动数据平台

字节跳动 数据分析 BI 嵌入式分析 数据看板

个推TechDay直播预告 | 8月24日晚19:30,实时数仓搭建保姆级教程开课

个推

数据仓库 实时数仓 Flink 平台

打破底层技术瓶颈,RTC技术或成为物联网市场的强劲引擎

擎声科技

物联网 RTC sdk 实时音视频 擎声Qtt

从函数计算到 Serverless 架构

阿里巴巴中间件

阿里云 开源 Serverless 云原生

什么样的软件面试算合理的?_文化 & 方法_Geoff Roberts_InfoQ精选文章