采访中“白板编码”是否不合适?[关闭]


30

这是一个有点主观的问题,但我很想听听访问者/受访者对此主题的反馈/意见。

我们将技术面试分为四个部分。在白板上编写代码,阅读和分析代码,设计会议和代码。

对于最后一部分,我们要求受访者做的是在白板上写一个小的代码段(4-5行),并在他们通过时进行解释。让我清楚一点,目的不是要吸引别人。我们不是在寻找完美的语法。甚至可以是伪代码。但关键是要给他们一个非常简单的问题,看看他们的大脑是否可以将解决方案传达给我们。简单的问题,我的意思是“反向字符串”,“ FizzBu​​zz”等。

请注意,我们总是首先要求使用明确的语言。我们是.NET C#房子。我们只说过“伪代码”,其中有人一直在空白/确实在为代码苦苦挣扎。

我的问题是“期望程序员在面试期间在白板上编写代码段是否不合适/不合理?”


13
相当合理的恕我直言(如果实施的话,这将避免在我以前的雇主那里招募一些相当糟糕的员工)。
Piskvor

3
从采访者的角度来看,这确实是一件令人沮丧的事情。拥有5年编程经验的人怎么会没有这些基本技能?90%的人没有。(即在立即淘汰CV的70%之后的90%,在电话访问中失败率是70%)
Michael Shaw

18
We're not looking for perfect syntax.合理,实际上我会推荐!批评白板编码中的语法错误是不合理的
Qwerky 2011年

16
也不要指望完美的笔迹。白板书写是大多数人所没有的技能,而根据我的经验,大多数程序员的笔迹写得很残酷,垂直书写只会使这种情况变得更糟。
jwenting 2011年

3
合适,是的。有效,没有。我亲自聘请的一位实力较弱的开发人员在白板上表现出色。
pdr

Answers:


47

我认为,这是非常适当的。如果您希望某项工作具有某种特定的技能,那么在面试时证明该技能是完全合适的。

该技术对招聘过程的影响非常明显。90%的候选人未能完成这项任务。但是招募的开发人员是好的,开发人员将在公司内部受到尊重。

如果是面对这种技术的候选人,首先要放松一下。它与评估您作为程序员和您的思维过程有关。这与您的完美语法无关。如果您犯了语法错误,那么我可能会扮演编译器的角色,并告诉您代码无法在特定的行上编译,并给您一条错误消息,并查看您的响应方式。同样,如果您添加;; 到将要编译的循环或if语句上,我将调试器运行,并通过代码一步一步地与您交谈。同样,这与错误无关,与您如何处理错误有关,并且您的思维过程是否良好。


1
感谢您的反馈。非常感激。您的回答恰好描述了我在寻找什么以及如何帮助候选人解决​​问题。但是正如您还指出的那样,我为申请5年以上职位的人感到沮丧,而这些人无法做到这一点。
伊恩·坎贝尔

1
其中最大的危险是沮丧情绪的到来,您会为未能通过编程任务但在其他面试方面表现出色的人提供工作,例如技术测试。现实情况是,这些候选人读过书并具有良好的记忆力。您在招人读书吗?还是写程序?
迈克尔·肖

@EoinCampbell,如果沟通技巧对您很重要,那么这是完全合适的。

1
因此,作为候选人,您犯了一个错误,然后我稍后(不是马上)提请您注意该错误。此时您会感到压力重重。这是面试的关键部分,看看您如何回应?您能在面试中应对打字错误吗?如果您承受着巨大的压力,当我们作为一个团队承受着在最后期限内交付软件的压力时,您将怎么办?
Michael Shaw

1
我使用了白板编码,积极的部分是它找到了非常好的初级程序员。白板编码的缺点是失败率高,但是这些人起初并不是很好。我已经要求人们在板上仅写一行代码,但故障率仍然很高。另一方面,作为受访者,我被问到白板问题,而且我总是觉得这些问题合理。我更喜欢白板编码,而不是针对特定问题列出人们最喜欢的算法。
Michael Shopsin

15

我的问题是“期望程序员在面试中在白板上写一段代码是不恰当的/不合理的吗?”

非常合理 白板的替代方案可能是笔记本电脑和投影仪,因为程序员比在白板上更习惯于在键盘上编写代码。只需确保候选人开始时有一个像Eclipse或VS或Idle这样的开发环境已经在一个空白项目上运行,那么她就不必浪费时间搜索已安装的应用程序。


由于智力的影响,我故意不在采访中使用计算机。没有经验的候选程序,按。并从列表中选择内容。白板使这一点非常明显……
Michael Shaw

5
@托勒密:真的这样认为吗?对于典型的白板运动(如“通过树编程深度优先搜索”),Intellisense有什么用?
nikie 2011年

2
白板/纸不会崩溃,每个人都知道如何在上面写字。如果您给我IDLE来解决问题,我将假设您是个白痴,如果您给我Eclipse,我将花费一半的时间来对抗默认的键绑定。

6
可以关闭Intellisense(以及其他IDE的自动完成功能)。或者,您可以给他们使用记事本(或更好的替代方法,例如记事本++,它可以突出显示语法,但没有自动补全功能等)。当然,它可能崩溃,但实际上是这样:您在记事本中遇到了几个showtopper错误?
CVn

3
即使只是notepad.exe,它也比纸质或白板使用起来容易得多。您可以插入或删除行,这在物理媒体上是一个巨大的痛苦。
CodesInChaos

10

这不是不适当的,但要知道它可能并不总是能揭示出您所采访对象的编程或解决问题能力的真正见解。我想那正是您所追求的。

其次,请注意,总是有对失败的恐惧,不断使人的大脑昏迷。“如果我搞砸了怎么办?”,“如果我犯了一个愚蠢的错误怎么办”。人脑中较大的一部分正忙于不断检查自己的脱落情况-只有少数人能忍住神经。

因此,在这种情况下,即使最好的情况也可能最终步履蹒跚。

对于最后一部分,我们要求受访者在白板上写一个小的代码段(4-5行),并在他们通过时进行解释。

没关系。但是同样,仅仅因为某人无法正确解释某些内容,并不意味着他们不太了解。(解释是一种言语艺术)。

如果我是你,我会做的最后一部分 ...

雇用他们进行一个非常小(但现实)的项目。查看他们如何编码,做出决定,吸收工作条件和团队成员等,然后在此基础上做出最终决定。


6
如果您的招聘过程的一部分是提供3个月的标准定期合同,那么有多少人真的会辞去烫发职位来接受您的工作?
迈克尔·肖

1
我的意思是说这是我名单上的最后一项。我根据访谈部分的进展情况以及我认为他们的优缺点在哪里混合了采访中的顺序。至于给他们提供一份短期合同……在现实世界的小公司中这是不现实的。我没有时间/资源对可能无法锻炼的人进行3个月的风险测试,正如托勒密指出的那样,我怀疑候选人也不会太热衷。
伊恩·坎贝尔

“人脑的更大一部分正忙于不断检查他们的脱落情况,只有少数人能忍住神经。” 我一直觉得这一点很重要,特别是对于一些刚进大学或刚从大学毕业的人。我知道我在前几次面试中感到很沮丧,为此担心到我搞砸了一些最简单的问题,只是因为我太紧张了。当然,您无能为力。我所能做的只是进入下一次面试,最终对这一过程感到满意。
水罐

1
@TheJug完全同意,我们将与Juniors&Grads保持更加温和的关系,以确保他们不会对此过程感到不知所措,但是我们已经让资深(7-8岁)的开发人员为此苦苦挣扎。
Eoin Campbell

1
“雇用他们参加一个非常小(但现实)的项目……”-您是否建议您“雇用”例如申请职位的三名候选人,即使您只打算保留一个?这对我来说似乎很不公平!也可能不会提高团队合作精神。
nikie 2011年

8

这不是不适当的,但请记住,在面试中可能会给某些人(也许是更多的程序员人群)带来很大压力。我认为我们大多数人都认识办公室里的那个人,他是一位出色的编码员,而且非常值得信赖,但是在这种情况下他会变得很沮丧。在这样的测试中无法衡量他的表现,因此请勿将其设为通过/不通过测试。


7
我不认识那个人,因为他没有被录用。
凯文·克莱恩

4
@kevincline会损害公司的利益,除非您让人们保持紧张来赚钱。
JayPea

1
@JayPea:如果我看不出他们是谁,我怎么知道他是一个出色的程序员?唯一的选择是已经在职人员的推荐。每个人都喜欢雇用受信任的推荐人,但这是一小群人。
凯文·克莱恩

1
@kevincline请阅读我的回答,我并不是说您不应该在开发人员面试中进行白板编码。
塔玛斯·塞莱伊(TamásSzelei),

@JayPea我很确定,让员工在高压力下不紧张许多公司财务成功的重要因素。
Kyle Strand 2014年

4

我个人认为这是您可以做的最好的事情之一。正如您所说的那样,您不是在寻找正确的语法或类似的东西,这里最重要的部分是看是否有人可以交流...我见过很多优秀的开发人员,他们只能在自己的空间中独自工作...不幸的是,这在很多情况下是不可能的,因此拥有一个能够以清晰简明的方式讲述自己的想法的熟练的团队是一个比团队成员更有价值的人,他们认为:“他们不会理解无论如何,我自己做,以后再演示。”

沟通,沟通,沟通是每个大中型项目的基础(一旦需要,甚至更小)


不仅是沟通。他们需要能够交流,但是,他们还需要能够告诉我他们对简单问题的解决方案。
伊恩·坎贝尔

4

我认为这不是合理的事情。我们试图找到候选人,他们很擅长我们希望他们完成的任务。在白板上编写代码不是其中之一,我认为这不是找到优秀候选人的有效过滤器。

  • 好的代码不会被编写,而是会被重写。白板几乎是一成不变的,因为一旦编写它就很难更改。一旦您更好地理解问题,就应该尽可能容易地改变主意。
  • 面试本身就是一个压力大的环境,没有必要对候选人施加额外的压力。许多计算机人的笔迹不好。现代IDE提供了许多您惯用的工具。能够在您需要的时刻进行搜索,这也是大多数程序员的工作风格的一部分。为什么要把所有这些东西都拿走,并创造一个人为的环境,如果您要价的话,它们将永远不需要工作?
  • 我们也对编写好的测试甚至是TDD的能力非常感兴趣。在白板编码过程中看不到这一点。

您可以从白板编码会话中获得大多数线索,也可以从配对会话中获得线索-而且我相信,配对是一种更好的工具,可以让人感觉,候选人如何解决问题以及他的工作方式。他可以带上他/她自己的计算机并在自己喜欢的环境中工作。一旦加入后,将其应用于您希望他们执行的任务就容易得多。例如,我们有一个庞大的遗留代码库,因此我们要求他们为实际项目重构一些提取的代码。实际上,我们在日常工作中会尽可能地配对,因此非常合适。

白板会议可能有助于过滤掉不良的候选人,但它也可能会过滤掉许多优秀的程序员。


1
白板是一成不变的吗?您只需擦除一些内容并立即将其重写,这就是使它们有用的原因,特别是在教学方面。您必须生活在替代宇宙中。
whatsisname 2014年

也许一成不变是一个错误的词(我从medium.com/dima-korolev/…中获得了它-谁认为这是一个优势)。不过,与编辑器相比,很难添加您没有余地的内容。
iGEL 2014年

3

就个人而言,我会走出去邀请我做FizzBu​​zz的任何面试官。我不知道这何时成为新的行业标准,但这确实是在浪费时间。FizzBu​​zz是一个可以在面试之前使用的过滤器,尽管我个人认为如果我必须从N名候选人中挑选出足够有一些开源代码或我可以看的博客的话,我绝对更希望将其用作过滤器。

简而言之,我认为在面试某个编程职位时(也许是大三或实习除外),应该已经确定/确定受访者可以编程。

但是,是的,白板是完美的选择,尽管我认为您应该解决一系列不同的问题。向他们抛出一个现实世界中的问题,并让他们绘制一堆类似于UML的代码,以说明他们解决该问题的总体策略。给他们提供一台具有互联网的计算机,这样他们就可以查找可以用作squibblescape中黑匣子的第三方库。
在几分钟之内,您将真正看到他们如何解决问题。您实际上可以通过选择不一定要解决的问题并尝试将它们“解决”在一起,观察它们之间的交流程度以及如何整合输入(尽管如此)来使事情变得非常有趣。请不要过分用力-如果您这样做,有些人可能会冻结)。然后动态添加一些需求。这有点像软件开发,没有实现,而且最重要的是,没有调试,因此15分钟是很多时间。


“应该已经确定/确定受访者可以编程”-如何?您可能需要进行面试,在这种情况下,OP的问题就变成了在面试中是否适合使用白板编码,或者您是否有效地使用了候选人的话,这招来了灾难。招聘人员和简历可能(并且确实)说谎,博客和github仓库可能被窃。
朱莉娅·海沃德

@JuliaHayward:在面试前建立候选人的基本编码能力是另一回事。您实际上不必邀请现场的其他人来这样做。您可以向他们发送一个他们可以解决的小问题。可能亲自讨论该解决方案(或github代码)。最重要的是:您极不可能找到能够优雅地掌握我建议的问题类型而又不能解决fizzbuzz类型问题的候选人。面试应被用来确定候选人如何处理现实世界中典型的复杂问题。
back2dos 2015年

您可能不必在现场设一个人,但是无论您使用什么方式,至少您都应该通过应聘者的电话与他们进行编码练习。仅仅提出一个问题并等待发送zip文件仍然存在冒充他人的风险。举一个极端的例子,我曾经为FooCorp做过一次测试,然后出于兴趣就在Google上搜索了“ FooCorp编码测试”,结果发现有人发布了一个很好的解决方案。
朱莉娅·海沃德

@JuliaHayward:如果您给每个申请人同样的问题,那么回复当然可以通过Google进行。毫不奇怪,是吗?但是,我的答案仍然是:在采访中不要在Fizzbuzz级别上进行白板编码。它只是表明您没有为准备好而有趣的问题而烦恼。就像您自己说的那样,在邀请候选人进入白板之前,有一些方法可以建立基本的编程能力。
back2dos

3

让我回答另一个问题:

与在计算机上键入和执行代码相比,在白板上编写代码在评估编程能力方面是否具有任何真正的优势?

我认为让候选人在面试中编写代码绝对合适。但是,对我而言,能够执行代码是构成编程的反馈循环的关键部分。在白板上,您将一只手绑在我的背上,而您并没有全面了解我如何解决问题。


这只是您的意见,还是可以通过某种方式进行备份?
gnat 2014年

2
@gnat我只是在问一个问题。答案的后半部分是我的看法,是的,但是使用的语言应该很清楚。此外,问题本身始于承认其主观性,并特别要求对此事发表意见。我认为不赞成这样做。
凯文C.14年

@Kevin C.我认为无论您用什么措辞,您在这里都可以说很不错。白板编码与计算机编码不同。这是意见吗?当然不是,只要白板无法运行代码即可。
Leandro Caniglia 2015年

2

否,但是IMO更好的方法是将白板用于其预期目的,并对某些虚拟项目使用UML /草图/注释,而不是旧的“写一个sql查询以获取所有记录的方法”或“写一个反转字符串”。

我最好的采访之一是花了20分钟与首席开发人员讨论疯狂科学家宅邸的架构(非软件)(包括秘密藏身处,死亡射线和狗窝)。他看到了我解决问题的方法,而且这个问题很有趣,不是典型的死记硬背的101东西,而现代语言已经解决了上千次。顺便说一句,我之前也做了一段这样的代码,但是与架构部分相比,我感到“压力更大”。


2

如今,团队中进行了大量编程。为了团队合作,人们必须能够交流。其中很大一部分是能够在白板前进行交流(集思广益,指导,代码审查,建议的修复程序等)。

我将寻找候选人是否解释了如何使用白板代码来协助解决编程问题。如果解释足够好,那么会议室中的其他优秀程序员将在头脑中自动纠正板上的任何错字/错误。

对于大多数类型的团队职位,不要指望候选人能够解释和草拟自己的解决方案是不合理的。


0

不,为面试编写代码是一件好事,但是您应该允许使用任何合理的语言编写代码,因为通常用另一种语言来训练一名编码员竞争者要比用您想要的某种语言来获得某类编码器要容易得多达到竞争水平。


0

我会说这是适当的,但是在大多数情况下,找出谁擅长编程而不是谁擅长并不是一种有效的方法。如果您想完成一项工作(=聘请有能力的人),那么面试应着重于衡量现实生活中的技能。到目前为止,我最好的采访是这样的:

  • 问候,人力资源部欢迎。
  • 关于我,关于公司等等的话很少。她解释了采访的其余部分。
  • 她给我带了一台笔记本电脑的程序,该程序缺少一些零件,因此无法通过单元测试。缺少的部分在此处以文本形式进行了注释,它是关于实现一项基本任务的,例如在几个类之间创建连接,并引入一个简单的业务逻辑。
  • 如果一切顺利,单元测试将变为绿色。
  • 说再见,并同意几天后再来。
  • 那天,负责人与我会面,询问完成的程序,我做了什么以及为什么。
  • 这位领导人还问了我过去的经历,以及其他一些问题。

总结一下:如果您正在寻找生产代码中的劳动力,请在实际环境中测试他们的技能。如果您对他们的理论知识感到好奇,最好向他们询问这些事情。如果您不使用IDE,或者因为必须在别人面前在白板上编程而感到紧张,我可以理解,尤其是在IT人员中,有时内向,而且我们中的许多人无法很好地处理这些情况,所以白色登机效率会比实际情况差。


-1

除非受访者的笔迹不好,否则我认为这是不合理的(或者我应该说是手写的):-)。除了您的方法的唯一区别是使用木板和标记物。在某些情况下,面试官会这样做,但他们会给纸和笔。如果有3-4个人进行面试,我想说您的方法会更好并且更合适。


1
“大多数或所有面试官都在做这件事”,这是非常罕见的海事组织。
Kirk Broadhurst,

我想每个人都这样做。它们很少与PC或笔记本电脑一起出现,只是为了检查您是否解决了特定的编码问题。但是也许,您的情况有所不同。如果您愿意,我可以在答案中编辑此内容?
Pankaj Upadhyay

看到我同意这是非常罕见的...在过去的9年中,我担任过4个工作,从没被要求在纸上写代码。任何编码都在IDE上进行。这就是为什么我想知道这是不合适的原因。我希望开发人员在没有IDE / Intellisense协助的情况下最多能够在几分钟内敲出“反向字符串”代码。
伊恩·坎贝尔

我已经根据您的经验进行了编辑。我也去过两次采访,他们给了我一支笔和纸,写了如何打印斐波那契数列和mergeshort的算法。所以,我认为大部分事情都是这样:-)
Pankaj Upadhyay

应该指出,我从来不需要在计算机上编写代码。我不得不在纸上写代码的两倍(这两个当我是大三),我不得不画在白板上的架构图一次。那是在大约20次采访中……
柯克·布罗德赫斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.