41

我们公司一直在考虑取消我们的面试程序,让每个候选人与一些程序员坐下来 4-5 小时,然后做一些结对编程。

我在理论上喜欢这个想法,但我不确定如何才能真正让每个候选人都公平。你如何评价他们?他们的输入真的不取决于每个程序员那天的工作吗?

关于这是一个好主意/坏主意或如何使其发挥作用的任何想法都是我在这里寻找的。

干杯!

编辑:

结果 - 按要求

我们将像以前一样进行面试的第一步。电话后是面对面。我们不会让他们回来进行第三次也是最后一次烧烤,而是让 3 名开发人员回来与团队的所有 7 名成员坐在一起。我们决定让团队决定随后雇用谁。

我们得出这个结论有几个原因。我们相信这将赋予开发人员权力,让他们可以选择他们的工作对象。第二个原因是群体动态。我们认为拥有良好的团队动态非常重要,而且在您雇用一个人之前很难判断他们是否适合。

所以最终的结果是我们将继续进行结对编程课程,但以完全不同的方式和完全不同于最初预期的方式。

任何对这种方法的想法或批评都非常受欢迎!!(此编辑在下面发布为答案,因此如果您认为这不是最佳方法,请随时投反对票)

4

13 回答 13

34

除非您在实际开发中广泛使用结对编程,否则我会非常犹豫是否使用它。我遇到过许多高质量的专业开发人员,他们提到了对结对编程的强烈反感,并且在这样的过程中他们的技能不会得到很好的评价。

于 2009-02-27T20:14:25.307 回答
12

我希望你在这一步之前有很多步骤。为此,您需要出色的简历和电话屏幕。你不想在你一开始就不应该与之交谈的候选人身上花费大量时间。

因此,您建议进行初次面试,并可能将第二次面试作为结对编程会议?– 泰德·史密斯(1 分钟前)

是的。您甚至可能会想到使用CoPilot之类的东西在网络上进行简单的编码面试。

于 2009-02-27T20:12:20.507 回答
12

最简单的方法是为每个人提供相同的程序员和完全相同的代码。

你会遇到的问题是招聘不像编程。没有一个循序渐进的过程可以得出关于雇用谁的正确答案。(您可以采取多个步骤来简化决策)。您必须评估每个人的优势等,并从根本上做出有根据的猜测,以确定哪个是最好的雇用。有时你猜错了。

关于结对编程,你需要注意的另一件事是让每个候选人在那个阶段通过这种测试所需的时间。如果我正在找工作,我会犹豫是否去一家要求我这样做的公司面试。为什么?因为那是很多时间,如果我在多个地方面试,我可以花几天时间去面试我什至可能得不到或想要的工作。像 Google 或 MS 这样的地方是个例外,但大多数地方都不像这两个。(更不用说如果他们正在编写真正的代码,您实际上是在要求他们免费完成某人的工作)。

于 2009-02-27T20:12:38.460 回答
10

作为个人轶事,我在一次采访中因为这样的技巧而被打脸。我在他们的面试过程中走得很远;通过了简历检查,代码提交,这是面试的面对面部分。

我刚从大学毕业,以前从未结对编程,也没有做过 TDD。他们让我坐下来做一副纸牌练习,结果失败了。糟糕!我不明白为什么面试官要编写看起来如此愚蠢的测试*(即“返回 null;”),他们没有解释为什么,当然我不知道要问什么问题。最终结果是,看起来我无法从纸袋中编程出来。

如果你要做这种类型的练习,你需要迎合被采访者,因为他们将在不同的地方以他们的能力。这意味着你会得到不同的评估,这些评估可能不是基于实际人才,因此会有很大的偏见。

**现在我了解了 TDD,我确实了解了这样的测试以及它应该如何工作,但是在当时,这似乎很愚蠢!*

于 2009-02-27T20:31:50.817 回答
10

我刚刚接受了一家总部位于旧金山的公司的采访,该公司以敏捷方法/等为荣。我要去采访CEO本人。我有大约 20 年的行业经验,但从未使用 TDD 方法进行结对编程或开发。有人告诉我这将是一次“编程面试”,但不知道会发生什么,在我们开始之前,那个人说他认为我可能同意所有面试都应该以这种方式进行。(回想起来,这不过是一种傲慢的说法)。

无论如何,在面试中,练习是使用 TDD 开发一个类。我花了一秒钟来调整我对整个过程的想法,因为我从未结对编程或做过 TDD。虽然我在这里和那里跌跌撞撞,但最后我做得还不错。但他的回答是,我没有表现出他们在结对编程环境中所需的积极的来回性质。现在,这也可能是一种卑鄙的方式来表达“我不认为你做得很好”之类的信息。

幸运的是,我不需要这份工作,老实说,这段经历让我意识到,我宁愿找一份不同的职业,也不愿成为一名必须结对工作的软件工程师,日复一日,在开发方面代码。奇怪的是,有时我会同时与另一个人一起编写代码,所以一切皆有可能。

最后我想这是一个很好的结果,因为他们认为我不合适,我也不关心他们的工作方法。但是,如果我多谈了几分钟关于我自己的事情,如果他给我更多关于他们如何开展工作的信息,我们就会得出同样的结论。也就是说,除了让他们承受与完全陌生的人结对编程的压力之外,还有其他方法可以找到合适的候选人;虚假的方式来衡量海事组织的能力。

于 2009-06-29T20:04:19.703 回答
7

一家特定的公司使用一种称为极端面试的技术。对于极限面试,他们会带上 30 名开发人员,并将他们分成 15 对。他们会解释说他们正在寻找与他人合作良好的人。他们将仅根据与他人合作的能力来做出招聘决定。

他们将为配对解决问题。他们会强调他们对解决方案不感兴趣,只是每个程序员与他人合作的能力。对于每一对,他们将提供该对的观察者。在练习过程中(大约持续 2 到 4 小时),观察者将记录一个人的配对能力……而不是解决方案。

他们惊讶于有多少程序员专注于解决问题而不是协作。在这 15 对中,他们将确定大约 4 到 6 名开发人员进行第二次面试。这些开发人员将被要求回来并与团队一起度过一个星期(他们得到报酬)。一周后,他们决定留下谁。一般大约有一半(2 到 3 个开发人员)。

当他们完成后,他们有能够协作的开发人员,并且在与各种配对工作一周后,团队有一个强有力的迹象表明谁可以有效地开发软件。这个过程既创新又有效。他们与他们雇用的人取得了很高的成功率。

于 2009-05-17T21:58:34.427 回答
7

几天前我刚刚接受了一次结对编程面试,老实说,我不太喜欢它。我在面试前一天收到了通知,然后面试官告诉我结对编程是我最终在工作中要做的事情。我走进办公室,与一位非常资深的软件工程师配对。该公司位于旧金山,是一家以结对编程而闻名的公司,每个人都在办公室结对编程。起初看起来还不错,他解释了他们使用的所有工具、他们构建的自己的单元测试框架以及项目的一些内容。然后他基本上写了一堆单元测试,并希望我致力于实现以使其通过。仅供参考,已经存在的代码库是巨大的,我会说 10k 行,它' 不像一个超级复杂的项目,但是对于一个人来说,在没有事先了解类层次结构等的情况下介入然后编写代码是很复杂的。我发现很难相信他期望有人马上跳进 10k 行已经存在的源代码。它只是不适合结对编程面试,较小的代码库会有所帮助。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。但是对于一个人来说,在没有事先了解类层次结构等的情况下介入然后编写代码是很复杂的。我发现很难相信他希望有人立即跳入已经存在的 10k 行源代码中。它只是不适合结对编程面试,较小的代码库会有所帮助。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。但是对于一个人来说,在没有事先了解类层次结构等的情况下介入然后编写代码是很复杂的。我发现很难相信他希望有人立即跳入已经存在的 10k 行源代码中。它只是不适合结对编程面试,较小的代码库会有所帮助。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。我很难相信他会期望有人立即跳入已经存在的 10k 行源代码中。它只是不适合结对编程面试,较小的代码库会有所帮助。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。我很难相信他会期望有人立即跳入已经存在的 10k 行源代码中。它只是不适合结对编程面试,较小的代码库会有所帮助。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。我在浏览类和来回移动时有点挣扎,因为我不记得类名,因为我被已经存在的类/代码的数量所淹没。说实话,这真的让我在面试过程中做得很糟糕。最后我真的感觉不太好。我以前没有做过结对编程,主要是在我大学那年的作业中。

对我来说,如果您已经精通/熟悉您的配对,但并不真正适合面试,则可以利用配对编程的力量。有时我想问我的搭档,但后来我想如果我问太多问题,他们会认为我很愚蠢,不会表演。如果这已经是一份真正的工作,我会毫不犹豫地问,但在面试中很难..你想问是因为当你遇到困难时你的搭档应该帮助你,但同时它也是一次面试,所以你不能问太多。

这只是我从结对编程面试中获得的经验,如果您真的想这样做,我的建议是:

  1. 确保你不要让候选人使用大型代码库,使用较小的代码库,因此他/她可以最大限度地展示他/她的技能
  2. 在结对编程面试之前与候选人面对面,当你遇到困难时,你能问问题吗,你能做到这个那个,你不能做什么
  3. 尽可能详细

最后,我不会建议它。很难衡量候选人在结对编程中的表现,而且也可能存在偏见。

于 2011-11-03T22:14:11.593 回答
3

我喜欢这个主意。但是我认为这可能很难做到,因为这需要候选人对你将与他配对的项目有一些了解。另外,4到5个小时似乎有点长。如果您立即发现它不会奏效,您是否会与候选人一起坐在整个会话中?

不过是个好问题。要考虑的东西。

于 2009-02-27T20:15:12.417 回答
2

为什么不?此外,面试并不总是(或永远)公平。您应该对照传统的基于面试的方法评估新方法的最终结果。

此外,在结对编程会议之前进行一次小型采访可能会很好地避免将程序员的时间浪费在不适合的人身上。

于 2009-02-27T20:14:27.317 回答
2

从我有限的经验来看,我的感受是复杂的。我喜欢将配对作为面试的一部分的想法,尤其是。如果公司经常使用配对,因为它会给两者带来更好的合身感。作为一名应聘者,我经常参加面试,我会在一个房间里回答几个小时的问题,但之后对在他们的环境中工作的真正感觉并没有很好的感觉。配对可能比随机编码练习更有益,除非面试官擅长通过这些练习。我喜欢能够从双方讨论技术问题。作为候选人,我宁愿与某人互动,也不愿自己回答问题或解决代码问题。

但是......正如其他人所指出的,所需的时间可能是一个问题。我经历了几天的配对面试,发现有些时间很好,而另一些则觉得浪费了几个小时:一个是因为开发人员没有在做适合配对的事情(尤其是考虑到我的背景),另一个是因为环境问题暂时阻止了很多有用的工作。如果工作不成功,为此请一两天假可能会令人沮丧。

尝试这种方法的一个地方不确定他们是否应该让公司以外的人从事客户的项目。他们还担心解释领域和正在完成的工作会花费太长时间,尽管没有这一点,候选人可能无法做出太多贡献。所以他们选择了员工正在从事的开源项目。

这似乎是一个关键点:需要有一个精心挑选的任务,候选人可以快速理解并能够做出贡献。后一部分将在一定程度上取决于候选人的技能。同样关键的是员工使用这种方法评估某人的能力。不是每个人都擅长正常的面试,配对面试可能更是如此。

此外,如果一家公司没有做太多的配对,那么这种面试可能就没有那么有用了。看到某人的代码似乎确实有好处(正如 Joel Spolsky 指出的那样),这可能是一个很好的方法。但是,如果配对不是工作的典型部分,那么完整的配对会话可能是不合适的。可能是修改版。

我很好奇采用这种方法的公司对结果的看法。阅读此问题的其他一些答案表明,从候选人的角度来看,它并不总是理想的。

于 2011-04-10T00:29:48.603 回答
1

为了公平起见,你必须让每个参与的工作人员都有一个准备好的问题来评估候选人。最好是在他们的公司经验中取材于现实世界,但已经解决了。这是一个评估问题知识的好机会,而不仅仅是评估编程技能。

我讨厌回答太具体的问题。有一次我有一次面试,一位程序员正在测试我对我广泛使用的 STL 的了解,并试图让我回答需要自定义分配器。我听说过它们,但从未使用过它们(尤其是在 Windows 中)并且感觉很愚蠢。IOW,避免评判。

所以我的观点是,问一些与测试编程知识无关的实际问题,如果你使用“结对编程”的想法,你可以评估更多的定性个性和解决问题的方法。

好问题!

于 2009-02-27T20:16:15.940 回答
1

老实说,这听起来是个好主意,尽管 Jason Punyon 确实是正确的,您应该在将大量开发人员的时间浪费在剔除之前进行大量除草。你可以从中看到一个在面试中几乎无法获得的重要指标:某人喜欢与什么一起工作。

如果你保持正确的评估态度,我认为没有必要担心基于主题的“公平”或试图向不同的候选人呈现一致的情况——这与他们是否“得到了正确的答案”或跳过了正确的圈套,但他们表现出什么样的努力、解决问题的能力、沟通能力和灵活性。如果将其变成人工测试,您将失去该练习的大部分好处,更不用说将其从您的开发人员可以从中获得一些好处(或至少在此期间完成一些工作)更改为大量浪费他们的时间。

于 2009-02-27T20:17:15.813 回答
0

Joel Spolsky 有一本出色的Guerrilla Guide to Interviewing,其中谈到了编程任务等。

琐事:Joel Spolsky 是 stackoverflow.com 的联合创始人

于 2009-02-27T20:17:29.930 回答