结对编程的工作面试

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

我理论上喜欢这个主意,但是我不确定你怎样才能真正让每个候选人公平。 你如何评价他们? 他们的投入是否真的取决于每一位程序员当天的工作?

任何想法,这是一个好主意/坏主意,或如何使其工作是我在这里寻找的东西。

干杯!

编辑:

结果 – 按要求

我们要和以前一样进行采访的第一步。 电话随后面对面。 我们没有把他们带回第三次也没有最后一次烧烤,而是让3名开发人员回来与全部7名队员一起坐下。 我们决定让团队决定谁被雇用。

我们得出这个结论有几个原因。 我们相信这将使开发人员能够select正在工作的人员。 第二个原因是群体dynamic。 我们认为有一个良好的团队是非常重要的,很难说,直到你雇用了一个人,如果他们适合或不适合。

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

任何想法或批评这种方法是多余的欢迎! (这个编辑是张贴在下面的答案,所以如果你觉得这不是最好的方法,可以随意倒下)

我希望你在这之前有一大堆步骤。 为了这个工作,你需要一个优秀的简历和手机屏幕。 你不想花费大量的时间在你不应该与之交谈的候选人身上。

所以你build议进行一次初步面试,可能还有第二次面试作为配对编程会议? – 泰德·史密斯(1分钟前)

是啊。 你甚至可能会想到使用CoPilot这样的简单的编码访问方法。

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

最简单的方法是给每个人一样的程序员使用和完全相同的一段代码。

你将遇到的问题是招聘不像编程。 有没有一步一步的过程,导致正确的答案谁应聘。 (你可以有多个步骤来使决策更容易)。 你必须评估每一个人的优势等等,并且根据教育情况猜测哪个是最好雇用的。 有时候你猜错了。

另外一件关于结对编程的内容,你需要注意的是,每个候选人在这个阶段都需要花费多less时间才能完成这种testing。 如果我正在找工作,我会犹豫在一家公司面试,要求我这样做。 为什么? 因为这是很多的时间,而且如果我在多个地方面试,我可以花几天时间去面试工作,这些工作我可能根本没有,也不想要。 像Google或MS这样的一些地方会是一个例外,但是大多数地方并不是那两个。 (更不用说如果他们正在编写真正的代码,那么基本上就是要求他们免费做一个人的工作)。

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

无论如何,在采访中,练习是使用TDD开发一个课程。 我花了一秒钟来调整我对整个过程的思考,因为我从来没有配对过编程或完成TDD。 虽然我在这里和那里偶然发现我最后还是没有问题。 但是他的回答是,我没有performance出他们在结对编程环境中所要求的积极回馈性质。 现在,这也可能是说“我不认为自己做得很好”的暗示方式。

幸运的是,我不需要这份工作,说实话,这些经历让我意识到,我宁愿找一个不同的职业,而不是成为一个软件工程师,每天都要成对的工作,码。 奇怪的是,有时我已经与另一个人在代码上同时工作,所以任何事情都是可能的。

最后,我想这是一个好的结果,因为他们不认为我很好,我不关心他们的工作方法。 但是如果我多谈几分钟,我们会得出同样的结论,并且他给了我更多关于他们工作的信息。 也就是说,find一个合适的候选人还有其他的方法,而不是把他们与一个完全陌生的人结对编程的压力; 虚假的方式来衡量能力imo。

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

我刚从大学gradle,从来没有配对过,也没有完成TDD。 他们坐下来做了一副卡片练习,然后失败了。 厉害! 我不明白为什么面试官写testing看起来很愚蠢*(IE“return null;”),他们没有解释为什么TDD当然是外来的,我不知道要问什么问题。 最终的结果是,看起来我无法用纸袋编程。

如果你打算做这种types的练习,你需要迎合受访者,因为他们将与他们的才能不同。 这意味着你会得到不同的评估,这可能不是基于实际的人才,因此会被严重偏倚。

**现在我明白了TDD,我理解这样的testing以及它应该如何工作,但是那个人在那时候看起来很愚蠢!

一个特定的公司使用称为极端访谈的技术。 在极端的采访中,他们会带来30位开发者,并将他们分成15对。 他们会解释他们正在寻找与他人合作的人。 他们会根据他们与他人合作的能力做出雇佣决定。

他们会为双人解决提供一个问题。 他们会强调,他们对解决scheme不感兴趣,只是每个程序员都能够与他人合作。 对于每一对他们将提供一对观察员。 在练习期间(大约2到4小时),观察者将logging一个人的能力配对…而不是解决scheme。

他们惊讶于有多less程序员专注于解决问题而不是协作。 在15对中,他们将确定大约4到6位开发者进行第二次采访。 这些开发者将被要求回来,花一个星期与团队(他们得到报酬)。 一周后,他们决定保留谁。 一般约有一半(2至3名开发商)。

当他们完成之后,他们有能够协作的开发人员,并且在一个星期的工作之后能够有效地开发软件。 这个过程既新颖又有效。 他们的雇佣成功率很高。

前几天我刚刚进行了一对结对的面试,说实话,我并不是很喜欢。 面试前一天我接到通知,然后面试官告诉我,结对编程是我最终要做的工作。 我进了办公室,和一位非常资深的软件工程师配对。 该公司位于旧金山,是一家知名的配对节目制作公司,每个人都配对办公室的节目。 起初似乎没有问题,他解释了他们使用的所有工具,他们自己构build的unit testing框架以及一些项目。 然后,他基本上写了一堆unit testing,并要求我在实现上通过。 就像一个参考,已经存在的代码库是巨大的,我会说10k行,这不像一个超级复杂的项目,但它是复杂的,有人只是介入,然后编写代码没有事先了解类层次等。我发现真的很难相信他希望有人能够立即跳出现有的10万行源代码。 它只是搭配编程面试不匹配,一个较小的代码基地会有所帮助。 我在浏览类和往返时遇到了一些困难,因为我不记得类的名字,因为我已经被已经存在的类/代码量所压倒。 说实话,这在面试过程中确实让我感到可怕。 最后,我感觉不太好。 我之前没有做过配对编程,主要是在我大学一年的任务中。

对我来说,结对编程的力量可以被利用,如果你已经精通/舒适的一对,但不适合面试。 有时候我想问一下我的问题,但是如果我问了太多的问题,他们会认为我很笨,不能表演。 如果这已经是一个真正的工作,我会毫不犹豫地问,但在面试中很难…你想问,因为当你被困时,你的一双应该帮助你,但同时这是一个采访,所以你不能问很多。

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

  1. 一定要确保你不要让候选人与一个庞大的代码基础工作,使用较小的代码,因此他/她可以展示他/她的技能到最大
  2. 在结对面试前面对候选人,当你被困时,你能提出问题吗?你应该能够做到这一点吗?你不能做什么
  3. 尽可能详细

最后,我不会build议。 在结对编程中很难衡量候选人的performance,也可能有偏差。

我喜欢这个想法。 不过,我认为这样做可能会很困难,因为要求候选人对你将要与之配对的项目有一些了解。 另外,4到5个小时似乎有点长。 如果你立刻发现这个问题没有解决,你是否会和候选人一起坐下来呢?

好问题,但。 想想的东西。

为什么不? 此外,这不是像采访总是(或永远)公平。 您应该针对传统的基于访谈的方法评估新方法的最终结果。

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

从我有限的经验来看,我的感受是混合的。 我喜欢作为采访的一部分,配对的想法,尤其是。 如果公司经常使用配对,因为这样可以使配合更好。 作为一个候选人,我经常在面试中坐在一个房间里回答几个小时的问题,但之后对于在自己的工作环境中工作真正的感觉并没有很好的感觉。 配对可能比随机编码练习更有益,除非面试官熟练地通过这些练习。 而且我喜欢能够从双方讨论技术性的东西。 而作为一个候选人,我宁愿和别人交stream,也不愿意自己回答问题或解决代码问题。

但是……正如其他人所指出的,所需要的时间可能是一个问题。 我经历了两天的采访配对,发现有些时段很好,而另外一些人感觉好像浪费了几个小时:一个是因为开发者没有为配对做准备(尤其是我的背景),另一个是因为env问题暂时阻止了很多有用的工作。 如果这项工作不奏效,那么为此需要花一两天的时间就可能会感到沮丧。

一个尝试这种方法的地方不知道他们是否应该在公司以外从事客户项目的工作。 他们还担心,解释领域和工作所做的工作需要很长时间,尽pipe如此,候选人可能无法贡献很多。 所以他们select了一个员工正在开发的开源项目。

这似乎是一个关键点:应该有一个很好的select任务,候选人可以迅速理解和能够贡献。 后者将取决于候选人的技能。 同样重要的是员工用这种方法评估某人的能力。 在正常的面试中,并不是每个人都很棒,这可能更像是一场面对面的面试。

而且,如果一家公司没有多less配对,那么这种采访可能就没有那么有用了。 看到某些代码似乎有好处(正如Joel Spolsky所说),这可能是一个很好的方法。 但是,如果配对不是工作的典型部分,那么或许一个完整的配对会议是不合适的。 也许是一个修改版本。

我很好奇那些采取这种方法的公司会想到结果。 读这个问题的其他答案表明,从候选人的angular度来看,这并不总是理想的。

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

当我回答过于具体的问题时,我讨厌它。 我曾经接受过一次面试,程序员正在testing我广泛使用的STL知识,并试图让我回答一个自定义分配器的需求。 我听说过他们,但从来没有使用过它们(尤其是在窗户里),而且觉得很愚蠢。 IOW,避免被判断。

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

好问题!

老实说,这听起来像个好主意,虽然Jason Punyon确实是对的,你应该做大量的除草,然后把大量的开发人员的时间浪费在挑选上。 你可以看到一个重要的指标,这在面试中几乎是无法实现的:人们喜欢与谁合作。

如果你保持正确的评价态度,我不认为有必要关注它是基于主题的“公平”,还是试图向不同的候选人展示一致的情况 – 这不是关于他们是否“得到了正确的答案”,或者跳出正确的答案,但他们performance出了怎样的努力,解决问题的能力,交stream的能力和灵活性。 通过把它变成一个人为的testing,你将失去大部分的好处,更不用说将它从开发者可以从中获益的东西(或者至less仍然需要做一些工作)改变成一个大规模的浪费他们的时间。

乔尔·斯波尔斯基(Joel Spolsky)拥有一本出色的游击攻略指南,其中谈到了编程任务等。

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