招聘程序员的网站哪个好-@程序员,拒绝枯燥的代码笔试!

判断一个人是否是优秀的程序员,不必看他的代码。

在过去的十几年里,我为很多工程师写过考试。 在那段时间里,我开发了一系列无需查看代码即可快速准确评估开发人员的方法。

而且我现在认为这些方法不仅可行,而且客观上比代码编写测试更好。

什么是“代码编写测试”?

“书面代码测试”是指直接测试候选人技能,或审查他们所编写的代码或伪代码的所有方法。 这些方法包括:

代码编写测试的目的

这些方法的出现绝非偶然,而是为了取代这些更糟糕的笔试方法,比如:

我们认为这些编写测试的方式都是荒谬的,因为它们无法反映软件开发人员在日常工作中所需的技能。 因此,在笔试过程中,我们试图通过代码笔试来重现日常工作。

但问题是:这种方法根本不起作用。 因为事实是:书面编码测试根本无法重现实际工作。 当然,书面代码测试可以让应聘者展示工作所需的一些技能——但书面代码测试的环境与真实的工作环境完全不同。

代码测试题

书面代码测试可以减少候选者的数量,但也可能拒绝真正优秀的候选者并对较差的候选者做出错误的判断。

代码测试可能会花费面试官和应聘者大量的时间。 或许后者如果能达到疗效还可以接受,但前者会导致卖方市场很难找到好的工程师。

由于代码测试题很难随时更新,导致笔试体验很差。 如果候选人对现有的工作感到满意,那么他们根本不会做你的代码测试题。 这些问题也减少了笔试的时间,从而延长了整个招聘过程。 但这并没有减少候选人的数量。

更重要的是,编写测试的代码并不能很好地模拟实际工作。

谷歌的研究发现,优秀的团队有一个特质,叫做“心理安全”()。 当团队中的每个人都愿意承担风险并表现出脆弱性时,团队就会处于最佳状态。

这和代码写测试完全不一样。 候选人通常会感到沮丧和压力,担心一个小错误可能会让他们失去工作。 所以你无法充分发挥候选人的潜力。

更糟糕的是,这些问题会让那些没有太多空闲时间的候选人被拒绝。 使用这种话题只会让你过滤掉这些有空闲时间的人。 所以你的候选人会更年轻,经验也更少。 你会错过一些其他人,比如已婚长辈或需要照顾家里病人的人。

有没有更好的办法?

听起来像是个坏建议,但你必须和你的候选人谈谈。 你需要理解他们,你需要与他们交谈。 也许这很难,但总的来说,这些技巧更容易。

作为面试官,你必须提高自己的技能。

面试方法:先决条件

代码笔试是空中楼阁,看起来很不错,唯一的缺点是很难筛选出好的候选人。 你需要思考什么样的技术技能和素质对你的团队最有价值,而代码写测试只是你偷懒的借口。

招聘是困难的,想要做好紧急招聘,可能需要掌握一系列方法。 然而,有一些方法可以立即提高你的笔试成绩:

没有代码的方式

无需编写代码即可判断候选人的方法可能有一千种。 我常用的三种主要风格可以涵盖许多不同的技能。 在笔试过程中,我们会谈论候选人的经验,要求他们做一些代码审查,并与其他人合作设计一个系统。

下面我将详细解释这个过程。

这就是我试图找到真正有资格胜任技术工作的候选人的方式,他们可以为团队带来超越纯粹编程技能的价值。 通常我可以在一次笔试中在大约一个小时内涵盖所有三个部分。 我相信此类信息将引导我找到优秀的候选人。

深入挖掘他们的经验

许多团队已经这样做了。 他们在笔试开始时会花几分钟的时间,询问应聘者以前的工作情况、对工作的看法等。大多数时候就像是随意交谈。

但这是不对的。

请记住,这是笔试。 您需要尽可能多地了解他们用于构建系统的技术。

为了做好这一点招聘程序员的网站哪个好,你需要在笔试开始之前仔细阅读他们的简历。 这不是开玩笑,在笔试开始前至少花10分钟仔细阅读(不是默读)你的简历,最好是30分钟。 为了从他们的简历中尽可能多地了解他们以前的项目,Google 可以找到有关他们项目的公开信息。 在面试过程中花在挖掘背景信息上的时间越少,结果就越好。

笔试时,要求考生谈谈自己最近最感兴趣的项目。 要练习积极倾听,就要学会参与。 假装您是他团队的一员,或者假装每个人都在进行架构审查。 您尝试了解他们构建的内容以及他们完善的技术。 这样做有什么好处和好处呢? 让候选人知道,如果你不知道答案并不重要,但激起你的好奇心很重要。

以下是我认为可以得到很好答案的问题:

笔试的这一部分可以让您第一手了解候选人的经历。 做好这一部分可以让你看到他们如何感谢别人或取笑别人。 您将了解他们如何解决工程困境,他们将与您分享最近的经验教训,并且他们与他人交流技术的能力应该是显而易见的。

如果他们选择的商品不太合适,请考虑谈论其他商品。 我所说的不适当是指那些不够复杂或者他们记不清楚的项目。

请注意,此步骤可以防止提出诸如“告诉我您解决过的最难的错误”之类的问题。 要求其他人回忆系统某个部分如何工作的细节可能会导致很多错误的否定判断。 人们不可能掌握他们所修复的错误的所有知识,而这类问题会给笔试过程带来很大的压力。

让他们审查您的代码

这项活动一半是代码审查,一半是角色扮演。 你可以通过这个来过滤掉那些能够提高团队整体代码质量、促进办公室氛围的人。

以下是代码审查过程中需要关注的一些领域:

这种方法需要提前进行大量规划。 您需要找到或编写一段代码供候选人查看。 您还需要创建一个您希望候选人解决​​的问题的优先顺序列表。 不要让笔试管当场就出问题,一定要提前做好计划。

选择要查看的代码时,请勿选择产品代码。 您的候选人不具备您所具备的背景知识,因此您实际上是将候选人与您的朋友进行比较,而不是与其他候选人进行比较。

努力降低代码示例的复杂性。 在面试过程中,应聘者没有太多时间阅读代码,而且他们很可能没有想到要进行代码审查。 预热需要很长时间。

在代码中放置一两个真正的错误,但不要指出错误。 一般来说,代码审查并不是一种很好的错误查找技术招聘程序员的网站哪个好,尤其是在审查者从未见过代码的情况下。 自我证明的错误(例如将字符串传递给需要链接列表的函数)是最好的。 Bug 应该是优先级列表中最低优先级的,而 Bug 应该是对非常优秀的人的奖励。

最后,代码应该做一些实际的事情。 如果您的公司很有名,请选择您产品的简化版本。 但如果您需要花费大量时间向候选人提供背景信息,那就忘记吧。

最好的选择是虚构的代码(也许是本文试图避免的代码笔试中使用的代码)或开源代码中的拉取请求。

一旦您决定要审查的代码,您应该期望候选人会寻找以下内容:

如果代码中没有足够的问题,请添加一些。

这里有一个根本问题,我还没有明确的答案。 问题是:您应该尽早向候选人发送代码吗?

如果你这样做,你就会再次给那些有空闲时间的人带来巨大的优势。 否则,笔试压力可能会降低。

我倾向于前者。 一个好的面试官可以减轻压力的方法之一是让面试官提前知道他们将进行代码审查,并且你也可以在审查开始之前介绍你的期望。

协同设计系统

作为面试官,您最重要的任务之一是确定候选人是否能够完成要求他们完成的技术工作。 良好的评估应尽可能防止误判和误判,同时在更广泛的技能水平范围内区分候选人。

即使是新手也应该​​能够在解决这个问题上取得一些进展。 最资深的候选人应该能够快速识别他们无法立即解决的问题。

我从大学时期就开始使用这个方法,并且在行业中使用了20多年。 这个方法非常有效。

这些方法是什么?

共同设计系统意味着与您的候选人共同设计工具、平台或项目。 不需要写代码或伪代码,只需要讨论系统的设计思路和所做的选择,并提出这种选择可能引起的问题,以及问题的解决方案。

这种方法之所以有效,是因为菜鸟工程师和高级工程师之间的主要区别在于他们可以预见的问题数量。 经验可以带来更稳健的系统设计,并且可以随时解决新问题。

如何使用这些技术?

首先你的团队需要选择一个他们希望候选人“构建”的项目(所有候选人都应该使用同一个项目。长期这样做,面试官将能够做出更好的评估),进行练习并计时你自己。 面试时,让应聘者了解系统设计需要多长时间,并告诉他们不可能完成所有的设计。 他们应该提前了解预期产出。

花几分钟时间解释基本需求。 如果需求很难用几句话解释清楚,那么它可能不是一个好项目。 例如,您的项目可能是构建类似知名社交媒体平台的东西,就像您不必解释 Instragram 是如何工作的一样。

预先提供您认为没有什么价值的所有内容。 然后询问候选人他们想首先构建什么。 然后继续谈论新功能,直到时间耗尽。

如果候选人很容易做到这一切,那么复杂性就会增加。 如果它们看起来很困难,请增加复杂性。

项目的难度各不相同,以深入了解候选人的技能水平。 这就像对候选级别进行二分搜索!

选择一个项目

这项活动的关键是要求必须易于理解。 如果您公司的产品众所周知,请将其作为起点。 否则,选择一个知名网站(例如 Facebook)。 项目应与候选人入职后将要做的事情相关。 以我们为例,我们有两个项目,一个是前端急招,一个是后端急招。

后端项目的主要关注点是流行社交网络的底层系统。 前端项目会提供一些产品功能的简化截图,并询问考生如何构建(如何定义组件、组件之间如何交互等)。

示例:建立 Facebook

首先,我们将介绍任务。 告诉候选人我们将建立一个类似于 Facebook 的网站。 我们假设现在该站点包含用户、身份验证和一些其他功能。

此时,我会问候选人如何构建一个功能最少的 Facebook。 我们喜欢这个问题,因为它可以展示候选人如何考虑产品的需求,也可以为未来的决策和选择讨论提供依据。

这个时候,我就会用白板来记录他们的观点。 这让我参与其中并确保我以后能够理解他们的设计。 如果我错了,他们会注意到并立即纠正。

应聘者可能会告诉我,最小的功能集包括好友功能、状态更新、新闻源和点赞功能。 询问他们为什么购买此功能列表。 是否缺少任何值得注意的功能? 是否包含不必要的功能? 他们的思维过程比功能列表本身更重要。 然后,询问他们计划先做哪一个。 假设一位候选人决定首先开发“朋友”功能。

候选人会有不同的看法。 有些候选人可能会提出不可行的工作建议,但他们不应该被剥夺这个机会。 最好的候选人应该能够快速完成此阶段。

假设候选人告诉我他想创建一个表来保存友谊。 该表应包含友谊的发送者和接收者。

然后继续挖掘。 Facebook 中的友谊是单向的。 它如何在数据库中表示? 这种表示如何影响系统设计?

选择之一是您不需要做任何特别的事情。 查找给定用户的朋友时使用这两列。 另一种选择是在好友数据库中保留两份数据副本,每个方向一个。 如果这样做,则在删除好友时需要同时删除两条数据。 讨论三者之间的选择。

下一个主题可能是如何处理好友请求。 他们可以选择在“朋友”列中添加“接受”按钮。 他们可能会建立新的桌子来容纳好友请求。 然后可以讨论黑名单和垃圾邮件请求等主题。

至此,朋友的话题基本说完了,可以继续讨论下一个功能了。 随着新功能添加到系统中,讨论各种功能之间的交互很有趣。

如果候选人无话可说也没关系! 你可以想出一个解决方案并询问他们的意见。 这种方法的优点和缺点是什么? 如果他们仍然不明白,请尝试讨论其他功能。

我最喜欢这个活动的一点是它很有趣。 如果面试官做得很好,候选人也积极参与,那么整个笔试过程可能会变得不太像笔试,而更像是与朋友谈论一个新项目。

这就是候选人正式担任的角色。 完美的。

什么时候应该使用代码编写测试?

尽管我不喜欢书面代码测试,但它们有时很有用:

最后,如果团队的笔试技巧不足,就需要使用代码笔试。 代码写测试的效果不是很好,还有很多不足。 然而,它非常容易实现。 即使是没有经验的面试官也可以很好地处理代码编写测试。

如果是你,那么培养你的笔试技能应该是首要任务——雇用错误的人是你可能犯的最昂贵的错误。

综上所述

通过一些练习,您的团队可以在这些无代码书面测试中表现出色。 他们在更短的时间内做出更好的招聘决策,笔​​试吸引了更多的候选人。

我希望这篇文章对您有所帮助。 如果有任何疑问,请在评论区留言。 希望你能在下次笔试中杀掉代码笔试!

原文:#rf4-261

作者:Pete Holiday,CallRail 工程总监。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 招聘程序员的网站哪个好-@程序员,拒绝枯燥的代码笔试! https://www.wkzy.net/game/182369.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务