采访问题以检测复制和粘贴编码器

时间:2009-10-06 14:48:47

标签: copy-paste

我可以向面试候选人提出哪些问题,让我知道他是否是“复制并粘贴编码器”?

我们发现即使候选人在面试中很好地回答编码问题,一旦在工作中,他们仍然倾向于复制而不是重构。

其他人有类似的经历吗?

9 个答案:

答案 0 :(得分:8)

我们面试过程的第一步是5分钟的在线问题。我们给候选人一些类似“FizzBu​​zz”或“Recursive fibonacci”或“Find factorial of n”的内容。

我们没有任何规则。没有关于粘贴,或者需要编译的代码,或者应该使用什么语言 - 只是这样做。 5分钟的时间框架迫使大多数候选人沿着两条道路之一 - 编写一些伪代码(或大多数工作代码),或谷歌。

当我们得到答案时,我们谷歌回答。大约一半的时间,它是从某个网站复制的。我们的期望是,如果他们花了5分钟在Google上找到答案,它不仅应该编译,而且应该是解决该问题的绝对最干净,最好的例子。大约一半的时间,粘贴的答案完全是废话。我们甚至得到一个没有粘贴整个片段的数字,错过了一大块!

当没有编译器检查它们时,它们往往会暴露出来。它们的运作方式是粘贴,编译,调整,编译。如果他们只是将网页中的解决方案粘贴到另一个网页并提交,他们就没有告诉他们需要修复它。

这非常有效 - 没有人进行过电话放映谁不应该。

答案 1 :(得分:5)

我让人们(详细地)描述了一个比他们为解决而感到自豪的难题。很容易判断他们是否真的不了解细节,或者根本没有解决问题。在描述解决方案时,热情(闪耀均匀!)是一大优点。一定要热爱解决问题!

答案 2 :(得分:5)

我也和候选人一起遇到过这个问题。诀窍是减少仅依赖定义的问题数量。您可以为他们提供需要重构的代码,并询问他们将如何改进代码。这是一个非常开放的问题,显示了候选人的想法。

许多采访者喜欢在候选人写新代码的地方提问,不幸的是,开发人员很少从头开始编写新东西。更加注重向候选人提供现有代码,并要求他们使用它来解决问题。

即使有这些问题,也可以获得一个复制和粘贴编码器,因为面试不一定是他们将如何在现实世界中行动。

那是我的两分钱。

答案 3 :(得分:5)

我有两种方法,并且总是同时使用它们。他们总共花了十五分钟,我用它们作为入门级面试的最后三分之一。

  1. 从理论上提出一个非常简单的问题。

    • “你熟悉Java中的Vector类吗?在伪代码中写一个支持add,get和clear的类的实现。”如果他们不熟悉,请询问ArrayList。如果他们对两者都不熟悉,请解释他们的所作所为。他们的想法是,他们可以写一个 链表,并知道它是什么。
    • 如果我不确定那一点,请让他们写一个方法来手动对列表进行排序;不使用Arrays.sort()或类似的。让他们解释一个排序算法。我不在乎他们选择哪一个,我不关心它有多高效,任何人都会这样做。
  2. “你为自己感到骄傲的最后一件事是什么?”

答案 4 :(得分:4)

我们写了一个测试,基本上检查是否有人知道如何/为什么要重构。

我们创建了一个简单的模型应用程序(允许用户创建预定义的形状并在屏幕上移动它们)但是故意引入了许多类型的错误。

其中一个是副本&粘贴编码(在多个地方重复相同的功能)。另一个是将每个形状的逻辑嵌入到事件处理程序中。可怕的,可怕的东西 - 我们能想到的最糟糕的想法。

这使我们能够看到候选人是否会认识到改进的机会以及他们将采取哪些方法来解决这些问题。

这是一个带回家的测试,候选人可以重写申请,也可以提供他们会做出哪些改变的说明。

答案 5 :(得分:2)

并不是说这是借口,但开发人员可能复制和粘贴代码的一个原因是他们不理解他们正在使用的代码。例如,如果您雇用C#或Java开发人员,并将他置于Fortran系统并告诉他完成工作,那么由于缺乏理解,他将在整个系统中进行复制和粘贴。

此外,代码质量可以在其中发挥作用。我知道一个不允许重构的特定系统,但必须引入新的更改。开发人员必须尽其所能来及时完成任务。

当然,这两种情况都不能成为复制和粘贴编码的借口,但是值得一看组织内部以了解为什么会发生这种情况。

答案 6 :(得分:0)

不要问常见问题和/或要求他们解释他们的代码。

答案 7 :(得分:0)

您可以稍微修改一下您的方法。确保你的技术评论和电话屏幕,你的编码测试的挑战。不要将简单的编程测试问题作为预筛选,而是提出一个相当复杂的编程项目,他们可以解决这些问题 - 可以很快找到一些非常有用的东西。在面试结束后给他们一些时间来完成它,并要求它是好的文件并且易于理解。然后安排一个后续工作,在那里你讨论解决方案并询问候选人的事情,比如“你在想什么?!”

我想到的项目类型的例子:

  • 编写一个在三个玩家中扮演单手扑克的程序
  • 为用户提供的随机字段编写洪水填充程序
  • 编写一个小型支票寄存器程序,接受来自.CSV和起始余额的输入,并输出当前余额,允许用户查看已读取的交易。

答案 8 :(得分:0)

如果他们在现场,请将其作为白板。让你看看他们将如何抽象地分解问题。观察他们关注的内容,他们省略的内容,在问题继续时提出问题,以及如果你想成为一个小恶魔 - 改变规则的中途。

分解它的一部分并让它们在白板上写下伪代码。