结对编程进行面试

时间:2009-02-27 20:09:00

标签: extreme-programming pair-programming

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

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

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

干杯!

修改

结果 - 根据要求

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

我们得出这个结论有几个原因。我们相信这将使开发人员能够选择他们正在工作的人。第二个原因是群体动态。我们认为拥有一个良好的团队动力是非常重要的,直到你雇用一个人之后很难判断他们是否适合。

因此,最终结果是我们将继续进行结对编程,但采用完全不同的方式,并采用与最初预期完全不同的方式。

对这种方法的任何想法或批评都非常受欢迎! (这个编辑作为下面的答案发布,所以如果你觉得这不是最好的方法,请随时关注)

13 个答案:

答案 0 :(得分:33)

除非你在现实世界的开发中广泛使用结对编程,否则我会非常犹豫使用它。我遇到了许多高质量的专业开发人员,他们提到了对编程的强烈厌恶,他的技能在这样的过程中不会得到很好的判断。

答案 1 :(得分:12)

我希望你在这一步之前有一堆步骤。为此,您需要一个出色的简历和电话屏幕。你不想把大量的时间花在那些你不应该首先谈论的候选人身上。

  

所以你建议进行初步面试   并可能进行第二次面试   作为结对编程会话? - 特德   史密斯(1分钟前)

呀。您甚至可以考虑使用类似CoPilot的内容在网络上进行简单的编码面试。

答案 2 :(得分:12)

最简单的方法是让每个人都使用相同的程序员和完全相同的代码。

你要遇到的问题是招聘不像编程。没有一步一步的流程可以为谁雇用正确的答案。 (您可以通过多个步骤来简化决策)。你必须根据他们的优势等来评估每一个,并基本上做出有根据的猜测,哪个是最好的雇用。有时你猜错了。

关于配对编程的另一个问题是,你需要注意的是让每个候选人在那个阶段进行这种测试所需的时间。如果我正在寻找工作,我会犹豫是否要求我这样做的公司接受采访。为什么?因为那是一段很长的时间,如果我在多个地方面试,我几乎可以花几天时间去面试我甚至可能没有或想要的工作。像Google或MS这样的某些地方是一个例外,但大多数地方都不像那两个。 (更不用说如果他们正在处理实际代码,你基本上是要求他们免费做某人的工作。)

答案 3 :(得分:9)

我刚刚采访了一家以旧金山为基地的公司,该公司以敏捷方法等为荣。我本人要采访CEO。我有大约20年的行业经验,但从未使用TDD方法进行编程或开发。我被告知这将是一个“编程面试”,但不知道会发生什么,在我们开始之前,他说他认为我可能同意所有采访都应该这样做。 (回想起来只不过是一个傲慢的陈述)。

无论如何,在采访中,练习是使用TDD开发课程。我花了一秒钟来调整我对整个过程的想法,因为我从未配对编程或完成TDD。虽然我在这里偶然发现我最后还是没事。但是他的回答是我没有表现出他们对编程环境所需要的激进的来回性质。现在,这也可能是一种愚蠢的方式,说“我认为你做的不是很好”的消息。

幸运的是,我不需要这份工作,说实话,这段经历让我意识到,我宁愿找到一个不同的职业,而不是必须成为一名软件工程师才能成对工作,日复一日,当它来开发代码。奇怪的是,有时我和另一个人同时处理代码,所以一切皆有可能。

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

答案 4 :(得分:8)

作为一则个人轶事,由于这样的技术,我在接受采访时被打乱了。我在面试过程中走得很远;通过了简历检查,代码提交,这是面试的面对面部分。

我刚从大学毕业,从来没有配对编程,也没有完成TDD。他们让我坐下来做一副卡片锻炼,然后失败了。厉害!我不明白为什么面试官正在编写看起来如此愚蠢的测试*(IE“返回null;”)他们没有解释为什么当然对TDD来说是陌生的我不知道要问什么问题。最终结果是看起来我无法用纸袋编程。

如果你打算做这种类型的运动,你需要迎合受访者,因为他们会在他们的能力不同的地方。这意味着您将得到不同的评估,这些评估可能不是基于实际人才,因此会产生严重偏差。

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

答案 5 :(得分:7)

我前几天刚接受过一对编程访谈,说实话,我真的不喜欢它。在面试前一天我接到通知,然后面试官告诉我,结对编程是我最终在工作中要做的事情。我走进办公室,与一位非常资深的软件工程师配对。该公司位于旧金山,他们是着名的结对编程公司,每个人都在办公室配对。起初它看起来很好,他解释了他们使用的所有工具,他们自己构建的单元测试框架,以及一些项目。然后,他基本上写了一堆单元测试,并希望我在实现上工作以使其通过。就像一个FYI,已经存在的代码库是巨大的,我会说10k行,它不像一个超级复杂的项目,但是对于某人来说只是介入然后编写代码而不事先了解类层次结构等是很复杂的我发现很难相信他希望有人能够在已经存在的10k行源代码中马上跳过。它只是一对编程访谈不匹配,较小的代码库会有所帮助。我在课程中导航和来回挣扎,因为我不记得课程名称,因为我已经被已经存在的类/代码的数量所淹没。说实话,这真让我在采访过程中做得太可怕了。最后我感觉不太好。我以前没有完成结对编程,主要是在我大学一年级的作业中。

对我来说,如果你已经熟练/熟练地配对,那么结对编程的力量可以被利用,但是不适合面试。有时我想向我的同事提问,但后来我想如果我问了太多问题,那么他们就会认为我是愚蠢的,无法表现。如果这已经是一个真正的工作,我会毫不犹豫地问,但在一次采访中很难......你想问,因为当你被困时你的配对应该帮助你,但同时这是一次采访,所以你真的不能多问。

这只是我从配对编程采访中获得的经验,我的建议是否真的想要这样做:

  1. 请确保您没有让候选人使用大型代码库,使用  较小的一个,因此他/她可以展示他/她的技能到最大
  2. 在结对编程面试之前与候选人预先对话,你能问问题吗? 当你被困住时,你是否能够做到这一点,那不能做什么
  3. 尽可能详细
  4. 最后,我不建议。在结对编程中很难衡量候选人的表现,也可能存在偏见。

答案 6 :(得分:6)

一家特定的公司采用了一种名为极端采访的技术。对于极端的采访,他们会带来30位开发人员并将他们分成15对。他们会解释他们正在寻找与他人合作的人。他们将根据他们与他人合作的能力做出招聘决定。

它们将为要解决的对提供问题。他们将强调他们对解决方案不感兴趣只是每个程序员与他人合作的能力。对于每对,他们将提供该对的观察者。在运动期间(持续约2至4小时),观察者将记录一个人配对的能力......而不是解决方案。

他们惊讶于有多少程序员专注于解决问题而不是合作。在15对中,他们将确定约4至6名开发人员进行第二次访谈。这些开发人员将被要求回来并与团队共度一周(他们获得报酬)。一周后,他们决定保留谁。通常约一半(2至3名开发人员)。

完成后,他们拥有能够进行协作的开发人员,经过一周的各种工作后,团队可以有效地指出谁可以有效地开发软件。这个过程既创新又有效。他们雇佣的人成功率很高。

答案 7 :(得分:3)

我喜欢这个主意。但是我认为这可能很难做到,因为它要求候选人对你要与他配对的项目有一些了解。此外,4至5小时似乎有点长。如果你立刻发现它不会成功,你会和候选人一起参加整个会议吗?

虽然好问题。想想的东西。

答案 8 :(得分:2)

为什么不呢?而且,采访总是(或永远)不公平。您应该根据传统的基于访谈的方法评估新方法的最终结果。

此外,在结对编程会议之前进行一次小型访谈可能不会让程序员浪费时间与那些不合适的人。

答案 9 :(得分:2)

从我有限的经历来看,我的感受好坏参半。作为面试的一部分,我喜欢配对的想法,尤其是。如果公司经常使用配对,因为它给人以更好的感觉。作为一名候选人,我经常接受采访,在那里我坐在一个房间里回答几个小时的问题,但之后对于在他们的环境中工作的真实感觉并不是很好。配对可能比随机编码练习更有益,除非面试官擅长通过这些练习。我喜欢能够讨论双方的技术问题。作为候选人,我宁愿与某人互动而不仅仅是回答问题或自己解决代码问题。

但......正如其他人所说,所需的时间可能是一个问题。我经历了几天的配对采访,发现一些时期很好,而其他人觉得浪费了几个小时:一个是因为开发人员没有做一些能够配对的东西(特别是考虑到我的背景),另一个因为env问题暂时阻止了许多有用的工作。如果工作没有成功,那么为此工作一两天就会令人沮丧。

尝试这种方法的一个地方不确定他们是否应该让公司外的人在客户的项目上工作。他们还担心解释域名和正在完成的工作将花费太长时间,但如果没有这个,候选人可能无法做出太多贡献。因此,他们选择了员工正在开发的一个开源项目。

这似乎是一个关键点:需要有一个精心挑选的任务,候选人可以快速理解并能够做出贡献。后者将在某种程度上取决于候选人的技能。同样重要的是员工使用这种方法评估某人的能力。并非每个人都能在正常面试中表现出色,而且对于配对面试来说可能更为真实。

此外,如果公司没有做太多配对,那么这种面试可能没那么有用。看到某些代码似乎有好处(正如Joel Spolsky所说),这可能是一个很好的方法。但如果配对不是工作的典型部分,那么也许完整的配对会议是不合适的。也许修改后的版本。

我很好奇采用这种方法的公司会想到结果。阅读这个问题的其他一些答案表明,从候选人的观点来看,这似乎并不总是理想的。

答案 10 :(得分:1)

为了保持公平,你必须让每个参与的工作人员都有一个准备好的问题来评估候选人。最好是在公司体验中采用现实世界的东西,但已经解决了一些问题。这是评估问题知识并评估编程技能的好机会。

当讨论太具体的问题时,我讨厌它。我曾经接受过一次采访,一位程序员正在测试我对STL的了解,我对此广泛使用并试图让我回答需要自定义分配器。我听说过它们但从未使用它们(特别是在窗户中)并且让人感到愚蠢。 IOW,避免被判断。

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

好问题!

答案 11 :(得分:1)

老实说,这听起来是个好主意,虽然Jason Punyon肯定是对的,你应该在浪费大量开发人员的时间进行淘汰之前进行大量的除草。你可以瞥见一个重要的指标,这个指标在采访中几乎无法获得:有人喜欢与之合作。

我认为,如果你保持正确的评价态度,那么根本不需要担心它是基于主题的“公平”或试图向不同的候选人呈现一致的情况 - 它不是关于他们是“得到了正确的答案”还是跳过了正确的箍,但是他们表现出了什么样的努力,解决问题的能力,沟通的能力和灵活性。你将这个练习的大部分好处都变成了一个人工测试,更不用说将它从你的开发人员可以从中获得一些好处(或者至少仍然可以完成一些工作)转变为大量浪费他们的时间。

答案 12 :(得分:0)

乔尔·斯波尔斯基(Joel Spolsky)有一个很好的Guerrilla Guide to Interviewing,其中包括编程任务等。

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