面试中对代码问题的雇主有何利弊?[关闭]


16

乔尔测试(Joel Test)的第11个问题是:“新应聘者在面试中是否写代码?”。要求新候选人在面试中编写代码并做出决定的论点是什么?


像用铅笔和手写字一样编写代码,还是在机器上像打字一样编写代码?
克里斯,2010年

主要的缺点是提出愚蠢或无用的问题,并认为自己做对了。例如有人评论要求写链接列表。

Answers:


13

我看不到缺点。面试包括很多部分,应征者应被“批准”多次。

我每周采访约10个人。我真的非常非常感谢HR完成了所有背景工作并向我提供了很多笔记。当他们到达我的时候,是时候让我为他们的考试打分了。

测试完全取决于位置。通常,我尝试探究:

  • 通用编程技能。您可以有效地使用运算符吗?您能设想一个数字系统的基数不是10吗?

  • 您知道如何做我们雇用您的工作吗?

  • 评估您对列出的任何开源项目的贡献

我尽量保持简短有趣。当我进入办公室时,我会抓住答案,将其查找,然后进行第二次面试。要被录用,您通常必须完成三个面试。

我还会评估您与接待您的团队的融合程度。该团队依靠我来有效地做到这一点。

以元形式回答问题是一回事,而实际生成代码则是另一回事。如果要雇用您,我真的需要看到您产生代码。


嗯...我认为自己是合格的开发人员。在最近的三个采访中,当我被问到诸如“特定方法的作用”或类似的事情时,我决定放弃它。由于我从不找工作,因此我打算去做一些我很了解的工作。没意思。正如我的前任老板所说:“可重用?程序员应该是可重用的,也许是程序。”
duros

@duros很遗憾听到这个消息。一个好的面试官应该能够使过程变得有趣..并且应该意识到其他程序员讨厌测试。
Tim Post

这并不是说我在测试时不舒服。我只是意识到,如果他们打算雇用我担任编码员,那么我将有哪些学习和尝试新事物的机会...在上一个期间,我派访问员阅读了Javadocs ...:-/也许,我错了...
duros

10
曾经有人在一次采访中要求我为Perl中的链表编写访问器。在使用Perl的8年中,我还没有遇到使用链接列表的单个生产程序。当然,我混淆并在纸上制作了insert()和remove()方法以及一个我认为可以完成工作的基于哈希的对象。面试官看报纸时说的第一件事是“您缺少一些分号”
leed25d 2010年

1
实际生成代码是另一种 -的确如此。人们反复描述了一个合理的算法,但甚至无法开始将其简化为代码,这使我再三感到惊讶。那,或者他们滑过了一些非算法步骤,这在编写代码时是无法避免的。
poolie 2011年

34

向Scott Whitlock致歉:

缺点:

  • 没有

优点:

  • 如果您避免雇用无法编程的人,则可以节省大量时间和心痛
  • 要求您在面试中有一个技术人员

是否可以将“要求您在面试中有技术人员”视为骗局?
Yeikel

2
我想这取决于您是要担任职位还是只是担任主席。但海事组织不,这不能算是骗局。
阿曼德

19

如果您打算雇用一名杂耍演员,那么让他为您做杂耍会很疯狂。或您有试奏的音乐家。否则,您将得到令人敬畏的“大师” K-strass之类的东西

程序员在白板上浏览内容等同于快速演示。


+1的链接。我仍然认为,玩杂耍并不能记住诸如方法签名之类的东西,而只是能够思考和解决您从未遇到过的问题……
duros

4
除了杂耍是一项直接技能之外,只有很少的变体,通常在观众面前表演。编程是一项艰巨而艰巨的任务,很少执行。在纸或白板上的生产率也大大降低。也就是说,伪代码测试(或忽略琐碎的中间错误)可能非常有用。
Bruce Alderson

10

我认为它非常有用,而且我一直都会这样做,但是由于好处已被很好地涵盖了,所以我将只讨论(表面上的)负面因素。

我认为代码测试不太可能给您带来误报:实际上无法写代码的人在面试中会设法伪造代码的可能性很小,至少在您遇到难度越来越大的问题时如此。(也许最有可能的情况是,他们不是通过面对面的采访问朋友,而是在作弊。)

问题更多是在假阴性方面:代码测试会导致您拒绝实际上是最佳人选的人吗?

怯场

您可能会有一个实际上是一个非常好的开发人员的人,但是对这次采访非常紧张,而且他们本质上是怯场。在一定压力下进行表演在某种程度上很重要,但是应对舞台恐惧并不是成为程序员的关键部分(与其他职业相比),并且不幸地拒绝遭受此痛苦的人。这可能会更加复杂:如果该人无法回答他们知道应该回答的问题,他们可能会变得更加紧张。或者,就像这个问题一样,他们觉得他们不能同时交谈和编码。

缓解措施:在进入技术性问题之前,先了解一些有关其背景,目标等的问题。也许从一些更简单的技术问题开始,以便他们获得一些动力。不要在面试中成为鸡巴(质疑分号等)。

这是一个嘈杂的措施

有趣的代码问题可能有多个正确答案。如果一个人写了正确的答案,而另一个人写了正确且更有效的答案,那么您应该加多大的分量呢?

在某种程度上,这就像是一些“难题”问题的问题:这个人要么有洞察力,要么没有洞察力,而您得到的结果几乎是二进制的。智力可能会影响获得该洞察力的可能性,但是仅采样几次就可以得出粗略的度量。

这使我对代码问题感到困扰(尽管我仍然在使用它们。)我能想到的最好的缓解方法是尽可能多地提供一系列可能的解决方案:这个人至少可以写一个粗暴的答案,或者为问题的一部分。意识到这总比没有好是一个好兆头。然后,如果他们发现更多内容,则可以使其变得更高效或更优雅。尽可能避免提出会产生二进制响应的问题。

这不是真正的代表

编程并不是一个接一个地解决十分钟算法问题的工作:关于理解和设计更大的系统以及长时间专注于该领域还有很多工作要做,更不用说人际交往能力了。代码问题并不能真正测试这一点。

但是,代码问题并不是您要问的唯一问题:您可以查看他们的背景,他们的参考资料,他们的开源工作(如果有),以找到持续努力,创造力和人际交往能力的证据。

知道如何解决小算法问题以及如何将其简化为代码是一个必要但不充分的条件:如果您不能解决小问题并且不能编写非平凡的代码,那么世界上所有的大图思维都不是将使您成为富有成效的开发人员。

任何人都可以解决

不,显然不是。正如著名的FizzBu​​zz帖子所指出的那样,您可能会认为问题是微不足道的陷阱,不仅是新毕业生,还有具有多年行业经验的人。我不知道为什么 要么代码测试是一个很差的衡量标准(有可能,尽管我认为这不太可能),或者它们对简历中的项目贡献不大,或者通过复制粘贴非代码来完成很多工作,算法代码(可能)。

值得承认的是,无需编写任何算法代码,您确实可以完成很多工作。人们在应用程序上赚了很多钱,这些应用程序的价值在于图形或业务逻辑,而不是所谓的“编程”,这很好。但是,如果您实际上需要程序员,那么这不是一个很好的选择。

校准可能不正确

如果您提出一个问题,答案对您来说似乎很容易。但是,如果您突然被问到其他类似的问题,或者没有偏向您自己的特定兴趣和背景的问题,则可能会困难得多。

缓解措施:在您已经知道的一些开发人员上运行测试,并查看其效果。也许您团队中已经有人非常聪明的人可能会遇到其中一个麻烦,您可以考虑对其进行调整。也许他们会想到更好或更不同的答案。

太像琐事了

我认为,如果您坚持认为人们是内心深处了解晦涩的API,或者语法完美,或者记住一个非平凡算法的确切定义,那么代码问题肯定会引起人们的关注。这些都是依靠文档,Web搜索或编译器错误来获取的,并且与实际专业知识几乎没有关联。甚至不知道该API可能在哪里,这可能是该人最近没有使用过该API的线索,但这不一定是一个问题,只要他们不依赖自己的简历即可。

因此,答案很简单:不要问琐碎的问题,不要挂在琐碎的错误上。提醒应聘者该API的名称或让他们查找该API;修正语法错误;不要测试记住数据结构定义的人。

你如何比较?

如果您有两个候选人,并且都很好地回答了问题,那么您如何在他们之间进行选择?您可以选择做得最快的那只,但也许您开始选择乌龟而不是野兔。您可以再进行一轮,并提出更困难的问题,但我也不确定。也许您只是给他们两个A +,然后尝试根据其他条件在他们之间进行选择(或尝试找到同时雇用这两个人的钱)。


7

我可以想到的一个缺点是,很难在别人面前“大声地编码”。我发现即使有人看着我的肩膀也很难打字,但我并不孤单。我注意到,当有人叫我到他们的工作站寻求帮助时,他们突然开始输入错误,选择错误的代码补全,甚至犯了完全错误-如果我不坐在那里,他们不会犯任何错误。地狱,我已经看到人们开始使用菜单进行剪切和粘贴操作,只是因为他们正在观察中。这不是正常的行为,我正在谈论的编码人员是优秀的程序员,而且非常聪明。

最近,我接受了一次采访,采访者问我如何编写特定的操作,他说:“给我看一下数学。” 好吧,在进行数学计算之前,我必须首先考虑该问题,这使我感到困惑和困惑。一开始我放在白板上的事情很尴尬,那时我觉得自己输了。我最终得到了A-ha的瞬间,并找到了答案(实际上当它终于出现在我心中,他真正在问的是什么),但是我到达那里之前所做出的“混乱”让我感到非常不舒服。但是,我找到了工作,但是如果面试官的耐心较小,我可能就没有。

我认为,如果您给受访者一个编码任务,请给他们一些时间在计算机上解决问题,甚至是在他们熟悉的IDE中。让他们为您编写代码,然后再讨论。问他们为什么以某种方式做事,以及另一种方式是否会更好。从这种过程中,您将发现更多的信息,而不是要求他们(示意性地)将小便撒到您面前的杯子中。


4
没关系。编码面试问题的目的不是测试打字能力,甚至不是对API的全面了解。错别字和其他什么都可以忽略,相反,您将重点放在候选人的思考过程和对编程基础的熟悉上。例如,我曾经参加过一次面试,表明应聘者完全无能为力地思考一些步骤(他们解决了一个小问题,意识到造成了另一个问题,等等)。
亚当·李尔

2
“很难在别人面前编码”吗?精细。我只雇用可以做艰苦工作的人。其中之一就是能够与其他人一起讨论代码(即程序)。
凯文·克莱恩

1
@kevin cline:你想念我的意思。您是否关心人们如何获得结果,还是只希望他们根据自己的想法而获得结果?很多人可以在团队环境中很好地编码,但是需要“单独的时间”才能以最高的效率进行生产。您听起来像是不会雇用Mark Zuckerberg的那种人,因为他需要“加入”以实现最高生产率。
Robusto

1
@Robusto:我不是在采访中问很多问题。我只需要看到有人在几分钟内解决一个简单的问题。我需要可以团队合作的人。这意味着有能力和愿意谈论代码。当然,我可能会想念一个伟大的程序员,他不能应付面试的压力。没关系。但是糟糕的雇佣是灾难性的。
凯文·克莱恩

6

缺点:无。花费任何时间设置PC,设计代码测试并进行审查,都可以避免以后的麻烦。

优点:“信任,但要验证”-罗纳德·里根(Ronald Regan)。我见过很多次,听到过很多次,人们终于从一个职位松开了,在面试中您会觉得自己是个摇滚明星。证明在布丁里。我想看看他们能做什么。它代表了一旦您花费时间和金钱雇用某人并在他们面前坚持一个新项目,将会发生什么。


4

缺点:

  • 要求您在面试中有一个技术人员

优点:

  • 如果您避免雇用无法编程的人,则可以节省大量时间和心痛

25
如果您在没有技术人员参与的情况下采访开发人员,那么您注定要失败。
David Thornley,2010年

@David:我同意,我认为这里的优点远远超过缺点,但这是我能想到的唯一“缺点”。
Scott Whitlock 2010年

4

当我为我当前的工作进行面试时,招聘人员给了我一系列要编写代码的问题。我印象深刻的是,这些问题显然是由对SQL有深刻了解的人写的,因此它可以双向工作。


2

确实希望该人员在面试中编写代码-甚至更好,让他们与团队中的成员配对程序X倍的时间(无论您在时间/人力上如何负担得起)。

这几乎是您可以判断该人是否可以编码的唯一方法之一。

我稍微喜欢使用结对编程,因为它可以显示他们的团队合作精神,为他们提供真正的IDE,并让他们解决“真实”的问题(结对中的另一个人可以指导他们了解受访者的任何环境细节)无法合理地知道)。

我们已经开始使用这项招聘政策,我们对结果感到非常满意。


+1用于配对测试:证明与队友一起工作的能力和//具有编码的能力。
Bruce Alderson

2

您可以根据鸟的羽毛来判断它,而程序员则可以根据他/她的代码来判断。

当我从目前的公司开始工作时,我正在为他们工作,他们要求我编写一些C代码来生成或检查某些二进制输入的奇偶校验位(取决于您是编码还是解码)。正是因为在工作中解决了这些问题,这才是一个面试问题。当然,我在考虑的不是奇偶校验,而是低级工作。


2

到目前为止(我读的所有答案)都没有解决乔尔测验(不是)企业家的最佳实践清单,而是简化您对准雇主评估的清单的事实。

问题是...如果他们彻底测试候选人,那么他们可能会雇用知道他们的东西的人...这对您意味着

  1. 头痛
  2. 从同事那里学习东西的机会增加

而不是在他们之后修正错误 ...


1

我会说:

优点

  • 证明候选人至少具有扎实的编程知识,因为简历可以被捏造/修饰
  • 如果面试官与应聘者讨论代码,而不是像书面测试那样,则可以很好地指示您如何在社交上“网格化”,以及应聘者是否适合公司/公司以及团队是否良好适合候选人

缺点

  • 如果问题是在工作中永远不会出现的刻板/琐碎的废话,可能会侮辱求职者(例如,当一个人在工作中使用的所有现代框架均已内置排序时,“写泡沫排序”,“反转字符串”(如果有内置Reverse方法或类似方法,或者针对书面测试,例如“ 该类的Foo方法的参数是什么?Bar”,任何白痴都可以使用Google或使用该文档),而不是显示出架构/设计问题考生可以把事情做好,并解决业务问题

1
我认为“反向字符串”是编码面试中的一个很好的起始问题。如果他们不知道从哪里开始(而且很多人不知道),您可能不想雇用他们。如果他们使用内置方法,那就很好-它告诉您,如果提供了车轮,他们将不会尝试构建自己的车轮—但是会出现一种假设情况,即内置方法存在错误,因此他们需要自己写。然后,您可以将其代码用作询问其他问题的起点,例如如何修复任何错误,内存使用情况,运行时间等
Gabe

0

一个优点是它表明某人确实具有编程或其他方面的基础知识(上次我遇到这一点时,我很惊讶SQL问题的基础性)。它也可以作为技术讨论的基础,询问候选人为什么这样做,以及如何进行改进。

面试确实需要时间,可以用于其他事情。而且,在白板上编写代码不是自然的环境,并且有些人会遇到越来越严重的问题。这可能会导致您错过一个缺少常规工具或参考资料而感到紧张的开发人员。


3
更令您惊讶的是,没有多少人比谁能回答这个基本问题。
HLGEM

0

编程是一项具有许多清晰的“可交付成果”的高技术技能。候选人可以或不能提供他们。因此,询问技术问题没有“缺点”。完全是为了说:“向我显示此应用程序的某些代码,或”向我显示您已编写的应用程序的代码”。

不这样做可能会导致以下结果:一位富翁采访了一位辅导老师,教他的孩子下棋(这是一种扩展思维的运动)。老师打开了一个棋盘,开始谈论这64个方格,但没有碰到棋子。时间紧迫,父亲还是聘请了老师。导师教孩子们玩CHECKERS。


这只是一个无能的面试官的例子,而不是在面试中实际下棋的必要。那个有钱人本可以向我问“解释卡斯汀”,或类似的话,然后马上就知道了家教的知识。
GrandmasterB
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.