面试中的白板“测试”:备份(白板)代码的合法方法?[关闭]


15

据我所知,白板代码中有错误(甚至是错字或“;”错字)通常会花费您一些面试分数。避免这种情况将不可避免地使一个校对代码一次又一次地(浪费时间,并可能浪费神经能量/集中力),甚至使用更简单(因而效率较低)的算法-这两种方法都再次“昂贵”!

因此,为什么不只是快速编写出像拥有一个(单元)测试框架一样又优雅又有效的代码,然后正常地对其进行测试(仅在白板上)呢?

有没有人尝试过/见过这种方法?整个想法值得吗?

[当然,这也适用于笔和纸的情况]


23
如果我希望某人在面试中在白板或纸上写代码,我不希望它在语法上是100%正确的-这会使他们承受太大压力。是的,它应该大致正确,但是(或应该)没有(或应该)缺少分号或什至使方法名称/参数配置文件出错。
克里斯·弗雷德(ChrisF)

17
在面试中,我非常喜欢白板代码,但是任何期望您的白板代码在语法上完美的人都做错了。关键是要看您如何解决问题,而不要看您可以在完全不现实的环境中生成语法完美的代码。
Tim Goodman 2010年

3
您可以要求他们对他们的工作进行连续评论,或者在他们完成后与他们讨论解决方案,从而分辨出哪个是哪个。
克里斯·

6
过分地关注准确的语法和拼写将使我的书中的面试官得分降低。
JeffO 2010年

2
这就是伪代码的目的
jk。

Answers:


49

我绝对希望您测试要求您编写的白板代码。我希望您在编写代码时大声说出来,仔细检查一下,找出大部分的语法错误,并指出如何提高效率。实际上,这就是在白板上执行此操作的目的。这不是一次写完就写出来的,呃,你会得到70/100的东西。这是一次对话,由代码进行调解,并在白板上而不是在我的桌子上进行。

这是通过“白板编码”测试失败的一些好方法:

  • 拒绝
  • 不要问一个简单的问题(语言,平台,有关要求的东西),也不要告诉我您对任何问题的假设,并且要做出与我会回答的假设相去甚远的假设

(例如:用Fortran编写,将“显示”或“打印”解释为“写入事件日志”之类。如果您事先告诉我这些是您的假设,我可能会允许它)

  • 问我我要用哪种语言,收到职位描述中的答案,然后用另一种语言写出来,因为您对我要的语言不满意。

(我们在这里是顾问。我正在测试顾问的行为,就像在编码一样。在任何主题上打上您的烙印,但是对于特定的“您正在雇用X程序员,但我不想为您编写X”,您现在有了两个大黑标。)

  • 当我希望您“将数字从1打印到5”时,通过在两个白板上填写界面,工厂模式,抽象,注入和测试,向我展示您是一名架构宇航员。

(您以为我很夸张,但是我有个大胆地推广我的问题的人-坚持上面的例子,让我们说他的解决方案可以处理任意整数序列(而不是1到5)(从哪里获得?我想知道),当时是5的时间是其他人的两倍-他忘记了实际调用完成该功能的函数。反复提示并建议他像调试器一样遍历该函数,这并没有导致他意识到从未调用过该函数。

我总是说“你喜欢吗?” “你能改善吗?” “带我走过去”之类的。通常,在该对话中会发现缺失的半冒号或一一分离。如果没有,我通常会不胜其烦。

在白板上您可能认为不重要的其他事情对我来说很重要:

  • 完成后,我还能读吗?您是否弄脏,乱涂,转换颜色,绘制箭头,划掉并大体上留下了现在无法使用的烂摊子?还是您知道白板是可擦除的,指向空中的代码行而不是盘旋/箭头化,给我留下了一些我可以拍照并保存在设计文件中的东西?
  • 你问我多少钱?您是喜欢一个人呆着不讨论代码,还是将代码视为协作的事物?当您还在写东西时,我问您问题时,您有何反应?
  • 您是对“简单”任务嘲笑还是对“艰巨”任务感到晕眩?您是否被要求出示可以编码的行为很不礼貌?您是否容易被技术问题吓倒,或者对自己提出好的算法的能力感到自大?
  • 您是在脑子里解决问题,还是想起在某处阅读的解决方案?我通常可以说出棘手的问题。
  • 您是否已计划开始写作的地方?白板用完的人们通常开始时写得太低或写得太大-我可以告诉他们,他们不知道这将是20行代码,因此只剩下5行的空间-信不信由你更大的估算任务。
  • 你说完之前看过吗?在我要求您之前,我是否看到过您指向或敲击它并自己进行测试?当我提示您或询问有关此问题的特定问题时,您是再次查看还是从记忆中消失?您是否愿意考虑您的初稿可能不完整?

我强烈建议在白板上练习编码。我总是警告受访者,他们会被要求这样做。如果您可以使用实际的白板,请为自己设置一些简单的问题,然后在此处进行练习。这将有助于您的表现和信心。

抱歉,我知道我处于TL; DR领域,但在白板上编码不只是编码。这不仅是对语法的掌握,更是对您的测试。您对这项任务的反应证明了许多好的程序员的行为。如果您认为这仅与编码有关,那么您将错过这一点。

在其他有关白板测试的对话中,人们告诉我我可能会拒绝一个好的候选人。老实说,这是我愿意承担的风险。每个招聘回合都包含我可以雇用的几个人。有些简历不错的人在面试的问答部分做得很好,却在白板上分崩离析,显然不能(经过任何提示)用他们声称知道的语言编写简单的代码。我可能已经雇用了其中一些。任何阻止它的工具都是我将继续使用的工具。我从来没有结束过没有人租船的事,因为我所有的候选人都把白板弄乱了,而且我不希望自己会。


2
似乎是一个很好的答案(说实话,这比我最初希望得到的更有趣)。非常感谢。
mlvljr 2010年

9
@KingOfHypocrites您是否真的阅读了答案?我不在乎缺少分号。看我说的话。在白板上20分钟可以告诉我有关您的很多信息。
凯特·格雷戈里

7
我很好奇是否有任何研究证实了白板面试。全面披露:刚通过白板面试后,我变得非常好奇。几年来我没有参加过采访,从来没有做过出色的表演者/演讲者,并且几乎陷入僵局。您的见解非常出色,如果我先读这篇文章,我会以不同的方式(和更多的讨论)来考虑面试过程的这一部分。就是说,许多人对此主题都有很强的见解,但这似乎仅仅是全部。我认为这种做法有一个客观的理由,并辅以支持的数据。在那儿?
Suboptimus

3
+1老实说,我希望将白板作为配对编程练习的代理,希望像Kate所建议的那样保持有关任务的对话流-尽管我宁愿有一台机器并实际上与候选人(或与面试官一起编程的候选人)。在任何规模的组织中,如何一起编码与单独进行编码一样重要。
朱莉娅·海沃德

4
我知道这很旧了,但是我刚联系上它,我想指出:视觉处理障碍的标志之一是缺乏估计您正在书写的空间的能力,因此最终耗尽了空间。如果您要评估的人不仅没有足够的空间容纳更多的行,而且由于意识到自己的行距太大而使字符在行尾逐渐变小,那么他们可能会有学习障碍而不是不理解代码将持续多长时间。让他们估计一些非空间的东西,您可能会得到更好的结果。
Yamikuronue 2014年

17

我认为您在这里做出了错误的假设。我无法期望候选人在白板上编写代码能够获得每个“;”。完美到位。如果您在某个会因此受到惩罚的地方进行面试,那么我建议他们不是您想要工作的组织:-)。


2
我没有通过一次面试,因为正如他们所说,我没有在笔试纸上的第一遍就编写出完美优化的代码(来自于单元测试的入门,然后是优化学校) )。再说一次,他们没有适当的测试框架,只是假设他们有第一次正确编写代码的编码器!
朱莉娅·海沃德

3
@JuliaHayward-声音为您带来的幸运逃脱!不敢相信人们仍然会这样做。
Martijn Verburg 2014年

7

纸或白板测试非常无效。我记得一次采访时,我不得不在纸上寻找某些代码中的错误。其中之一是该类继承自接口,但缺少成员的实现。我知道这很可能是错误之一,我一直在寻找它,并且无论出于什么原因我都看不到它(尽管我确实提到我一直在寻找它是问题之一)。

碰巧的是,我仍然得到了这份工作,但这确实让我思考发生了什么。在这种情况下,在一个现实的场景中,我将在出现问题(在Visual Studio中为C#)且事情无法编译的那一刻,变得混乱不堪。我从来没有在现实生活中检查过它,因为它永远不会发生(这是不可能的),因此我不愿看到这种事情。缺少分号是一个更极端的例子-在现实世界中,这是完全不现实的,除非您在记事本中编写并将代码通过电子邮件发送给其他人进行编译!

如果有人要求在面试中使用白板来支持他们想说的话,那太好了,但我绝对不会这么做。


2
您的故事似乎证明您的测试是有效的。而不是一般地询问“您如何查看代码?” 他们给了你一些评论。您大声说出了类似“必须确保它能够实现所有内容”之类的内容,即使您没有偶然发现丢失的内容,您也向他们展示了您实际上知道如何查看代码中的错误,而不仅仅是回答有关此问题的问题。 。您可能还没有指出某些人可能存在的许多非错误,也许您也看到了其他一些错误。然后,您得到了这份工作。对我来说,这听起来很有效,对所有人来说!
凯特·格雷戈里

2
此外,缺少的半冒号也一直被视为不是真正的负面因素。不断混淆首选语言的语法意味着,与内部化所有语法的人相比,您的开发速度要慢。您将不断回去并修复忘记的内容。IDE不断困扰您,很有可能使您摆脱节奏。此外,在白板上遗忘所有分号并且在提示时没有注意到的人与每周忘记一次在IDE中键入分号然后进行修复的优秀开发人员的级别不同它。
凯特·格雷戈里

2
+1无效。它绝对没有证明。我敢肯定,许多未通过测试的人比通过测试的普通人要好。

3
@Kate-我知道你来自哪里,但我不同意-特别是当我现在坐在桌子的另一侧时。如果有人经常缺少分号,我希望在IDE中不要人为地看到它。这就像我办公室的密码-我可以不加考虑地输入数字,请我以100%的信心写下来,我会很努力。面试永远不会是100%现实的,所以我不想全力以赴。
FinnNk 2010年

1
与白板相比,我不太可能忽略键盘上的重要语法,因为打字会因肌肉记忆而得到加强。但是,特别是在结对编程的情况下,特别是在结对编程的情况下,轻描淡写(以及我的编辑或结对伙伴的na)可能会使我陷入反馈循环,错误会加剧引起错误的神经。我认为多语种可能比单语种的候选人处于劣势。
2015年

5

我已经做到了。在一次采访中,我被要求在白板上实现游程长度编码,并且在简化一些代码(解释我的缩写)以适合白板时,我仍然为该单元提出了一系列测试,并通过其中的一个来验证我的解决方案,并展示测试将如何提供帮助。我被提供了这个职位,所以我认为测试是有帮助的,或者最糟糕的是不会令人讨厌。


4

我在参加学校考试时使用这种方法。我先编写函数,然后一边写一点输入,输出和变量表。我已经用这种方式捕获了一些愚蠢的错误。测试,甚至是纸上/白板测试,总比没有测试要好。

不过,我不同意在专业环境中使用分号。


4

要求候选人在白板上编码是很愚蠢的。有一些现代的工具,例如片段,jsfiddle和intellisense。另外,不需要工程师记住语法。查找并引用了语法。如果要记住代码,则可能没有在职业生涯中花费任何时间来学习如何在多租户环境中进行编码,优化语法甚至是在托管环境中进行编码。


3
任何在某种特定语言上过得去的人都应该记住很多简单的语法。如果一个人整天都在编写C#代码,并且不了解大多数语法,那么他将变得缓慢而可怕。您也可以查看2 ^ 8是什么,但是任何值得他们投入盐分的开发人员都应该经常遇到它,而不必担心。语法也一样。
whatsisname 2015年

1
那明显是错的。如今,不必记住语法。要说知道如何使用多种语言(例如sql,vb,c#,javascript)进行编码并使用json,angularjs,telerik和其他语言的开发人员是不值得的,因为他们无法记住语法。像您列出的数学运算符一样,要成为一名优秀的软件工程师,还需要做更多的工作。如何理解需求,设计结构,模式,行业经验?语言和库中有足够的语法来填充卡车的后部。
James Bailey

这不是“必需”的问题。这是如果您经常使用某种东西,您会记住它。如果某个人声称自己是SQL开发人员,但无法写出一个连接语句,那是因为他要么a)不称职b)说谎关于自己的资格,要么c)大脑很奇怪,所有我不想处理的三种情况。
whatsisname 2015年

1
“联接”不是白板上通常要求的。它经常是谜语,与工作无关。如果候选人被认证,具有学位并拥有良好的履历怎么办?您仍然认为他是“无能的”,因为他没有在白板上谋生吗?营销人员不被要求在面试点上按季度制定市场营销策略。真傻 您应该能够与应聘者交谈,并轻松推断出他们是否可以编码。
James Bailey

3

当一家餐厅想聘请厨师时,店主不要求他用牙签和瓶盖来煮“火锅”。

不要在采访中要求开发人员在白板上编码。


3
当被问到吗?
mlvljr 2010年

在采访中

3

白板编码很难。在接受迪士尼采访之前,我从未被介绍过。不知道会发生什么,也无法调试它,我偶然发现了它,一直在讨论并解决问题,但是以一种伪代码的方式。当他们问到它可以运行时。

我的意思是,您可以只需要纠正语法错误就可以了。我相信,如果因为白板而没有被聘用,他们将失去一个非常好的候选人。我看的是资历,看来我有资格担任该职位并且可以胜任。我擅长于当前的工作,希望我能和他们一起工作。

感谢您的输入,凯特,我读了每个字。作为一名程序员,对我来说,白板真的并没有显示您的技能。我是一位出色的程序员,可以使用多种语言。我知道要求我编程的语言,但在白板上我突然忘记了。

我建立了复杂的集成和信用卡处理程序,但是在白板上,我什至不记得如何执行正确的语法,也没有提示。

作为雇主,我喜欢白板测试。但是,我正在招聘一名程序员,如果他们愿意的话,我想看看他们的实际技能。他们可以沟通很好,但是我需要看到他们能够解决问题。


1
似乎感谢您的输入,这是我在问问题时所想的事情-是,您真的可以陷入白板代码中,而不知道它是否已经(正确),并且无法“实际”检查它。一个棘手的解决方案-编写白板测试!;)
mlvljr 2012年
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.