5

在招聘 .NET Web 开发人员期间,我给候选人进行了编码测试。

我倾向于将候选人限制在测试服务器上安装的 MSDN - 我认为它包含候选人完成任务所需的一切。

我承认,这不是正常情况,因为我不希望候选人在不使用网络的情况下完成他的工作。
另一方面,我不希望候选人在谷歌上搜索完整的示例并复制粘贴,我想评估他的技能。

问题是我需要在考试期间允许免费使用网络吗?

如果您认为整个编码测试是错误的 - 我想听听您可能为我提供的替代方案。

4

13 回答 13

11

正如您所说,“我不希望候选人在不使用网络的情况下完成他的工作”,为什么在考试期间也不允许这样做呢?如果他确实复制和粘贴怎么办?我也这样做。当然,关键是要知道去哪里寻找,辨别你发现的东西并聪明地应用它。您想雇用记忆力极好的人还是可以为您开发软件的人?

当我在学校时,计算器刚刚变得负担得起。由于它们的使用被认为是不可避免的,因此考试发生了变化。不再像以前那样测试简单的数字运算(这在当时很重要)。而是要测试解决问题的技巧。

于 2009-01-19T08:07:43.770 回答
9

我通常允许候选人使用他们想要的任何资源。在他们完成后,我和他们坐下来一起检查他们的代码,询问他们为什么选择这种特定方法等问题。

如果几分钟的谷歌搜索不仅足以复制粘贴一些代码,而且足以了解它以能够捍卫其中的决定,那么他就足够聪明了!

于 2009-01-19T09:13:05.773 回答
6

有一些测试可以提供 Web 访问,但也有一些没有真正意义的地方。

允许 Web 访问的情况

  • 当它不太可能在网上找到 60% 的代码时
  • 当他/她完成代码后你会要求解释代码时
  • 使用 SQL 查询的一个非常具体的解决方案,在网络上不太可能找到

不允许网络访问的情况

  • 一些基本程序,如递归、斐波那契、阶乘、字符串操作、小技巧程序等。即使在某些情况下也不需要计算机
于 2009-01-19T07:57:26.503 回答
5

我对面试中的编码测试持怀疑态度。我认为我看到的很多测试都代表了非常具体的(人造的,非现实世界的)问题,你可以使用互联网来解决它们。

我认为知道如何用心去解决这些问题并不重要——通常更重要的是你知道如何以及在哪里寻找答案。

如果你想在面试中测试这些人,我认为最好问他们一些概念性的问题,而不是具体的编程问题。例如:关于面向对象、多态性、n 层应用程序设计等问题。

或者作为来自 ASP.NET 世界的示例,向受访者提出以下问题:什么是 ViewState、什么是回发、什么是会话/应用程序状态等。

于 2009-01-19T07:57:49.280 回答
3

如果你想了解应聘者在工作中的表现,我认为最好尝试使测试条件尽可能接近实际工作条件。

通过要求候选人解释他/她的代码应该很容易防止复制和粘贴从裂缝中溜走。

于 2009-01-19T07:57:50.090 回答
2

好吧,您需要注意的一件事是,您雇用的开发人员可能不知道他在为您工作期间会遇到的所有事情。如果你问他一个他不知道的问题,你会希望他研究这个问题,然后带着证明他理解他刚刚学到的概念的证据回到你身边。

我说让他们使用网络——但请他们用自己的话解释他们的代码是如何工作的。我的大部分知识来自在线资源。但是,我确保我写的每一行代码我都理解。

有一个特定领域的开发人员应该知道的基线知识;但你也想弄清楚他能多快学习新事物。一个很好的测试 IMO 是提出一个你知道他知道的问题,看看他能用他是贵公司员工时所拥有的资源解决多久。

于 2009-01-19T07:57:22.433 回答
2

你的目标是查看候选人有哪些基本知识,如果他可以在不从网上复制解决方案的情况下进行编码,那么就不要允许互联网访问。如果你想看看他采用什么策略来解决问题,如果他愿意,让他使用网络。

如果候选人能够解决更大规模的问题,而不仅仅是解决简单的编程问题,我个人觉得会更有趣。所以我倾向于问他在编程时使用的方法(单元测试?曾经使用过它吗?你怎么看?)。这给了我比在面试情况下编码更好的画面。

有时,如果您事先要求应聘者带上一页的编码示例,以了解他们的编码风格,这会有所帮助。这也节省了你面试的时间。

于 2009-01-19T07:59:44.597 回答
1

确保候选人足智多谋是很重要的——你不希望你的程序员在遇到困难时坐在那里,不前进;您希望他们使用手头的任何资源——无论是 MSDN、挑选别人的大脑、使用网络等——来完成工作。从网上剪切粘贴似乎是作弊,但是(a)如果你仔细设计你的任务,那么它将是独一无二的,以至于没有他们可以从网上复制的标准答案,并且(b)不是'重用现有代码是构建软件的关键部分吗?这与使用 3rd-party 库没有太大区别,以避免重新发明轮子。当然,不利的一面是,您还希望他们展示他们可以开发算法,因此独特的任务需要包含一些元素,而这些元素需要在网络上没有解决方案的情况下。麻烦的是,

于 2009-01-19T08:41:30.127 回答
1

允许应聘者使用网络,但事先告诉他,如果他使用网络,你必须评估他是如何解决问题的。

如果他将网络用于一些简单的事情,例如查找他忘记的语法或参数,请不要标记他。这很正常。

如果他使用网络来查看特定功能的使用方式,请不要标记他。这很正常。

如果他搜索了一个特定的代码,然后复制粘贴它,然后询问他该代码是如何工作的。如果他能解释代码是如何工作的,那么就没有理由给他打分。如果他不看他得到代码的网站就无法解释,你必须标记他。

如果他使用 stackoverflow.com,请查看他的个人资料中的问题、答案和徽章。从那里,您可以检查他的程序员有多好。

于 2009-01-19T09:15:28.640 回答
1

这一切都取决于你想从你成功的候选人身上得到什么。我反对这样一种观点,即知道如何 google 会让你成为一名优秀的程序员,因为一个简单的事实是,互联网上到处都是坏例子和好例子。您真的不希望您的代码库反映您的谷歌用户在他从网络上剪切和粘贴所有代码的那一天是多么幸运。您希望它展示您的团队理解和热衷的合理实践、经过验证的方法和优雅、高效的解决方案。不是一堆彼此不相似的风格。知道如何从互联网获得帮助会带来很多好处,但是真正的知识和古老的智慧每天都在丢失,那些不知道的人

如果你真的想让你的候选人访问网络,那么一定要这样做,但要让问题变得困难并仔细检查结果,看看他们是否选择了他们找到的第一个解决方案,或者他们是否选择了最佳解决方案。问题。

于 2009-02-18T23:22:56.703 回答
0

与许多其他受访者一样,我宁愿雇佣一个足智多谋的开发人员,他们知道如何充分利用网络来充分利用其他人的经验和以前的工作,而不是一个将自己和他的应用程序限制在 MSDN 做事方式的开发人员。

我一直在复制其他人的代码——实际上是每天。它的诀窍在于快速找到正确的解决方案并将其集成到您现有的工作中。

因此,让您的候选人使用网络并询问他是如何得出解决方案的。您可能会从他的方法中了解更多关于他的信息,而不是从他如何记住以前的解决方案。

于 2009-01-19T10:00:07.567 回答
0

我会做的三件事。

让申请人连同他们的简历一起发送一个编码示例。

让申请人编写一些真实的代码(甚至可能与团队中的开发人员结对编程),这将向您展示他们是否可以实际使用这些工具。互联网也是一种工具,所以他们应该能够使用互联网。

面试时让应聘者在黑板上用伪代码解决问题。在这种情况下,您可以通过帮助他们成为他们的“互联网”。

这三种方法将向您展示不同的东西。第一个是一个很好的预警机制,但很容易被伪造(他们可以从网上的某个地方下载 oss 代码)。第二个是看看他们是否真的可以编码,但如果他们不熟悉你使用的工具,他们可能会得分很差。第三个将向您展示他们是否可以解决理论问题,但不会向您展示他们是否真的是优秀的团队成员,或者他们是否编写了可维护的代码。

于 2009-01-19T10:33:44.737 回答
0

我最近有一个朋友开始在 IM 上与我交谈,他正在参加编码测试工作面试。他有几个 SQL 问题。起初我想,见鬼,你必须自己做这件事。我不会帮你在面试时作弊。

然后我又想了一遍。作为他工作的一部分,多年来我一直在回答问题并与他讨论有关 IM 的各种技术问题。所以当他在现实世界中遇到工作问题时,如果他被录用,他会做同样的事情。

我们很少谈论它,但是拥有一个很好的朋友网络来提问,并且知道如何在网上搜索相关的答案是成为一名有效的程序员或系统管理员的重要组成部分。我遇到过一些超级聪明的程序员,但并不真正知道如何在网上查找信息。他们错过了很多,有点脱离了循环。知道如何使用资源应该很重要。

当我进行采访时,我经常问人们他们阅读了哪些网站,他们使用了哪些开发工具,以及为什么。这是一个类似的事情。当然这不是关于他们如何编写 x 行代码,而是关于他们如何工作。

没有如何绕过某人只需复制和粘贴“答案”。首先,不要问有答案的问题。其次,当我面试时,我喜欢给人们一些代码,要求他们重构它,让他们谈论他们的想法。然后让他们编写一些实现某个功能的新代码。与他们配对程序。结对编程时很难隐藏无法编码。当他们配对时,说“让我们去查找日期时间库上的 api”是完全有道理的。

于 2009-01-19T13:59:24.777 回答