在招聘过程中要求潜在程序员编写代码的好示例项目是什么?

时间:2009-06-26 03:56:01

标签: php

我的理解是,要求工作样本是确定某人是否具有您正在寻找的技能组合的好方法,因为有些人只是采访得很好。所以我想请潜在的开发人员为我编写一些示例代码。

我正在寻找关于什么样的小项目可以在一两个小时内完成的想法,并且会表明他们对OOP有良好的掌握,良好的编码实践等等。以及寻找什么一旦他们完成 - 如何公平和有用地评估它。

对于上下文,我是一个小企业主,采访未来的开发人员,用于内部项目的PHP开发。我可以编写PHP但不是专家(有些工作是重构我编写的代码,以便更好地构建和保持一致),所以我也在寻找在评估样本时要寻找的内容,因为我我不是一个训练有素或经验丰富的程序员。

特别是对于之前已经雇用过这种方法并使用过这种方法的人。

我还在想我可以给他们一些代码来重构,看看他们是如何做的。有没有人作为招聘流程的一部分进行过重构测试?

澄清: 我不是在采访中谈论编码。我正在谈论编码代替的采访。对于上下文,这个问题的灵感来自FastCompany的这篇文章,关于工作样本如何比面试更能预测工作成功:

为什么在不满足他们的情况下雇用人员可能更明智 http://www.fastcompany.com/magazine/136/made-to-stick-hold-the-interview.html

16 个答案:

答案 0 :(得分:19)

我会创建一个不一定好的应用程序并嵌入一些错误。我想出一些简单的功能来添加到程序中。

申请人是否发现了一些错误?

申请人的代码如何整合到现有代码中?

申请人是否会陷入无关紧要的事情?

申请人是否适应现有代码的编码标准?

在此练习之后,与申请人讨论代码。这可能比实际代码更有价值。

注意:关于@bpapa答案,我会确保问题是新颖的,显然不能在生产中使用。

答案 1 :(得分:13)

当被问到时我个人会拒绝这样做。面试是一回事,在纸上编写编程问题以评估技术知识是好的,但实际上为某人编写某种应用程序是可计费的,我不会免费这样做。即使它只需要一个小时。

我认为你应该更多地关注这个人过去所做的事情,并提出你知道答案的技术问题(因为你说你的PHP知识有限,并且想要一个PHP开发人员)。

答案 2 :(得分:9)

我会听从乔尔的建议,即为面试提供家庭作业只会淘汰最好的程序员(从他的书中解释)。更好的程序员有很多选择,因此不想完成编程任务的练习。他们只是不适用。那将使你成为中等能力的人。不幸的是,根据我的经验,那些最有可能尝试看起来比他们更好的人,如果你自己不是专家,最有可能误导你的人。

这是另一种选择。让他们指出他们已经完成的一些工作。不一定是代码,而是网站。在采访中,询问他们如何编码的问题。他们使用了哪些数据结构?这些课程或职能是如何组织的?他们必须克服哪些问题?

然后,作为传统的编程问题,在面试中他们可以为你找到答案。通过这种方式,您可以衡量他们的理解和语法。这两者不一定是同一个问题。

答案 3 :(得分:6)

如果您不是专家,那么我建议您在尝试评估其他开发人员时要小心。如果你对自己的水平感觉不舒服,你应该找出一种更好的方法来评估别人的开发技巧。

我不确定你有什么好的解决方案。

我会使编码样本非常简单,而且不需要花费一两个小时。简单的编码练习需要几分钟就足够了 - 结合其他关于最佳实践,框架,设计问题等的讨论。

答案 4 :(得分:4)

我喜欢problems at streamtech。它们非常简单,通常可以在相当短的时间内完成,但它们表明申请人能够进行结构化思考并将其转换为结构化代码。

至于评价---我会以此为契机学习。首先自己解决问题,然后与申请人的代码进行比较。查找您不知道的任何构造,然后问自己哪个版本明显正确

答案 5 :(得分:2)

给他们一个地址或诸如纯文本文件,并要求他们创建一个简单的脚本将其转换为XML。我曾经使用过它,它创造了奇迹。

如果您想在现场测试它们,请让它们反转一个字符串。从组织的角度来看,锲而不舍,坚定不移,决心和热情与技术娴熟一样重要,恕我直言。

答案 6 :(得分:2)

我认为你能做的最好的事情就是让一位真正的专家参与你的采访。如果需要,可以雇用第三方。我不确定是否有能力对比自己更有经验的开发人员进行质量评估。

另一件需要考虑的事情是,真正优秀的开发人员可能会认识到他们比你自己更有经验,如果你表明你是开发人员之一,它实际上可能会让他们失望(而不是试图冒犯他们) ,我只是暗示你暗示你不是很有经验。)

答案 7 :(得分:2)

好吧,每个人似乎都在劝阻进行干预的编码工作。我不同意这些不同意见。要回答你的问题 - 如果你想要一个关于如何让它们编码的例子 - 在它们前面的桌子上放一个简单的计算器,让他们写一个程序来虚拟地创建计算器。给他们一半和一小时,看他们得到多远。有些人可能会在那段时间内完成。

答案 8 :(得分:2)

您以前尝试过配对编程吗?两个人坐在一台机器上,他们共享键盘和鼠标,并谈论他们正在做什么。我认为这绝对是最好的方法,因为它最终(在每个人的恐慌消退之后)真实地表明你们两个人在一起工作的程度。

如果你不是一个优秀的程序员,这个人应该能够教你并让你放松。如果他们不是那么好,但你们一起工作得很好,那可能比一个聪明但不愉快的人更可取。

在会话结束时,只需删除您的工作即可。没什么大不了的。

答案 9 :(得分:1)

有一个小的,明确定义的任务可以帮助你在一个公平的竞争环境中检查人,而他们只花费相对较少的时间投入。你不需要复杂的东西来看看人们可以做些什么。

过去,我曾要求人们编写一个小型Web应用程序,它可以运用一些基本概念。我们保留应用程序应该做的事情的细节非常简单。

我还会尝试避免需要大量补充知识的任务(即,不要求他们解决您特定问题域中的问题)。

修改

关于“小的,定义明确的任务”:我尝试拍摄的内容包括对作为更大编程任务的一部分的一些简单业务逻辑的非常详尽的描述。例如,我过去给出的一个编程任务涉及设置一个简单的Java Web应用程序并实现一些功能。我们确保彻底描述这些功能如何用于消除歧义。这有几个原因:

  1. 重点是看候选人是否可以从头开始构建一个简单的应用程序,而不是看他们是否可以正确猜出我们想要的东西。
  2. 如果你真的很好地定义了这个任务,那么你可以看到更多关于某人在商业环境中可能做的工作类型的透彻程度。
  3. 我们想要一些足够灵活的东西给予不同经验水平的候选人。
  4. 我应该在此注意,我认为编程任务最有效地用于检查能力。如果你给出了一个非常难的作业,或者一个没有明确定义的作业,那么你可能不会得到能够告诉你你想知道什么的结果(除非你专门测试候选人如何处理困难)作业或含糊不清)。

答案 10 :(得分:1)

我从来没有参与过招聘过程...但是在采访中我已经完成了,我被要求一次实施一个双向链表,另一个要算出一个算法,经典,多少整数给定形状内的点,在这种情况下,三个点形成一个三角形,一次在O(n ^ 2),然后再在O(n)中。

我不认为这样做的方法是让他们编程,但要确保他们知道如何解决问题。你给他们一个问题或问他们一个问题,并告诉他们大声思考,并观察他们的思考过程。这并不完全显示他们是否有干净的代码,但根据问题,它可以让你深入了解他们是否知道他们在谈论什么。

答案 11 :(得分:0)

我同意bappa关于它是一次采访而不是试运行,也许考虑询问一些关于他们如何与编程进行某些谈话的问题......

答案 12 :(得分:0)

我曾经不得不参加Visual Basic MCP考试,最后他们甚至懒得给我结果。

幸运的是,当我问到我是否会得到结果的问题时,我正坐在提交/取消屏幕上。

所以我点击取消感谢他们浪费我的时间并走了出去。

答案 13 :(得分:0)

回答这个问题:

对于PHP,我认为购物车,地址簿和论坛都是很好的项目。这些通常涉及广泛的网络编程主题 - 会话,注册,数据库,表单处理和身份验证。

就个人而言: 看起来你看起来更像是一个建筑人而不是编码大师。我不会惩罚申请人,因为他不能提出一个不起眼的功能的名称或需要在别处推荐。关键是他有主动权并且知道在哪里看(天堂知道我需要查看多少次PHP.NET)。一个体系结构的人,恕我直言,一个很好的问题是告诉他你有一个数据集,但你有三种不同的方式来显示它们,每个视图都有不同的操作。如果他的答案只是一个巨大的SWITCH-CASE,那么他可能是错误的选择。

答案 14 :(得分:0)

通常弱的程序员不能很好地理解递归,这是我现在的观察结果,现在这与PHP没有直接关系,可能是一个递归因子或斐波那契系列并不是什么大问题,但是假设使用来自具有某种父子关系的数据库的数据加载树控件可能是一个很好的样本。

另外,正如你所说的那样,你不是专家,想想你可以自信地处理的事情。

答案 15 :(得分:0)

这通常取决于您招聘的语言。例如,当我去接受PHP的采访时,我被要求使用自定义MVC框架编写博客脚本,而当我作为JS开发人员采访开放时,我被要求在jQuery中编写某个插件。它更依赖于你最终雇用这个人。你不想让别人给你写一个音乐推荐引擎然后让他在支付网关处理器上工作。