As you say, 'I don't expect the candidate to do his work without use of the web' why not allow it too during the test? And what if he does copy and paste? I do that too. Surely the key is to know where to look, be discerning with what you find and apply it intelligently. Do you want to hire someone with a terrific memory or someone who can develop software for you?
When I was at school, calculators were just becoming affordable. As their use was seen as unavoidable, the exams were changed. Simple number-crunching was no longer tested in the way it was before (it was important then). Rather problem-solving techniques were to be tested.
I usually allow candidates to use whatever resources they want. After they're done, I sit down with them and go through their code together, ask questions like why they chose that particular approach etc.
If a couple of minutes of Googling was enough to not just copypaste some code but to learn enough about it to be able to defend the decisions within, then he's intelligent enough!
There are tests, where web access can be given, and there are where it doesn't really make sense.
Case where its fine to allow web access
When its unlikely to find even 60 percent of the code over the net
When you will ask to explain the code after he/she completed the code
A very specific solution using SQL query, which is unlikely to be found on the web
Case where its fine to not allow web access
Some basic programs like, recurssion, fibonacci, factorial, string manipulation, small trick programs, etc. There is no need of computer even in some of these cases
或者以 ASP.NET 世界为例,向受访者询问以下问题:什么是 ViewState、什么是回发、什么是会话/应用程序状态等
I'm very sceptical about coding tests during interviews. I think that a lot of the test I have seen, represent very specific (artificial, non real-world) problems where you would use the internet to solve them.
I think it's not really important to know how to solve such problems by heart - often time it is much more important that you know how and where to search for answers.
If you want to test the persons during the interview, I think it is better to ask them some conceptual questions instead of a specific programming problem. E.g: questions about object orientation, polymorphism, design of n-tier application, etc. etc.
Or as an example from the ASP.NET world, ask the interviewed person question such as: what is ViewState, what is a postback, what is session-/application-state, etc.
If you want to get an idea of how a candidate will perform in a job, I think it's best to try and make the conditions of the test as close as possible to the actual working conditions.
It should be pretty easy to prevent copy-and-pasters from slipping through the cracks by asking the candidate to explain his/her code.
Well, one thing you want to be aware of is that the developer you hire might not know everything that he will be thrown during the time he is working for you. If you ask him a question that he doesn't know off the top of his head you would want and expect him to research it and come back to you with proof that he understood the concepts that he just learned.
I say let them use the web - but ask them to explain in their own words how their code works. Most of my knowledge comes from online resources. However, I make sure that every line of code I write I understand.
There is a baseline knowledge that developers in a particular field should know; but you also want to figure out how quickly he can learn new things. A good test IMO is to throw a question you know he doesn't know and see how long he can figure it out using the resources he would have if he were an employee of your company.
Is your goal to see what basic knowledge the candidate has and if he can code without copying solutions from the web, then don't allow internet access. If you want to see what strategies he employs to get to a solution, let him use the web if he wants to.
I personally find it more interesting if a candidate can solve problems on a larger scale than just solving a simple programming problem. So I tend to ask him about the methods he uses when programming (Unit testing? Ever worked with it? What do you think of it?). This gives me a better picture than coding in an interview situation.
Sometimes it helps if you ask the candidates beforehand to bring a one-page coding sample to take a look at their coding style. This also saves you time during the interview.
It's important to make sure a candidate is resourceful - you don't want your programmer sitting there when they get stuck, not moving forward; you want them to use whatever resources are at hand - be it MSDN, picking someone else's brains, using the web, etc - to get the job done. Cut-n-paste from the web does seem like cheating, but (a) if you design your task carefully then it will be unique enough for there not to be a standard answer they can copy from the web, and (b) isn't re-using existing code a key part of building software? It's not much different from using 3rd-party libraries, to avoid reinventing the wheel. On the downside, of course, you also want them to show they can develop algorithms, so the unique task needs to include some element that requires that without the solution already being on the web. Trouble is, forums are the achilles heel to all of that since they can simply ask for the solution and someone, somewhere, is going to hand over the answer unwittingly!
Allow the candidate to use the web but tell him beforehand that if he used the web, you will have to evaluate HOW he solved the problem.
If he used the web for something simple such as finding the syntax or parameters which he forgot, don't mark him down. This is normal.
If he used the web for something like look at how a specific function is used, don't mark him down. This is normal.
If he searched for a specific code and then copy-paste it, then ask him about how the code works. If he can explain how the code works, then there's no reason to mark him down. If he can't explain it without looking at the site where he got the code, you have to mark him down.
If he used stackoverflow.com, check his profile for questions, answers and badges. From there, you can check how good a programmer he is.
It all depends what you want out of your successful candidate. I contest the view that knowing how to google makes you a good programmer because the simple fact is that the internet is full of bad examples as well as good ones. You don't really want your codebase to reflect how lucky your googler was on the day he cut and pasted all his code off the web. You want it to demonstrate sound practices, proven methodologies & elegant, efficient solutions that your team understand and are enthusiastic about. Not a jumble of styles that don't resemble each other. There's a wealth of good to be gotten from knowing how to get help from the interweb but real knowledge and ancient wisdom is being lost every day that people who don't really understand what they are doing are given jobs because they appear to solve problems with their ability to "google it".
If you really want to give your candidates access to the web then by all means do, but make the questions hard and scrutinise the results to see if they've picked the first solution they found or if they've picked the best solution to the problem.
As do many other respondents, I'd rather employ a resourceful developer who know how to use the web to the fullest to draw on other's experiences and previous work, than a developer who limits himself and his applications to the MSDN way of doing things.
I copy other peoples code all the time - daily in fact. The knack of it depends on finding the right solution quickly and integrating it into your existing work.
So let your candidate use the web and ask him how he came to his solutions. You might learn more about him from his methods than from how will he can remember previous solutions.
Let applicants send in a coding example along with their cv.
Let applicants produce some real-life code (maybe even pair-program with a developer on your team) this will show you if they can actually use the tools. Internet is a tool too so they should be able to use internet.
Let applicants solve a problem in pseudo code on a blackboard during the interview. In this case you can be their "internet" by helping them.
These three approaches will show you different things. The first is a good early warning mechanism but can easily be faked (they could just download oss code from the web somewhere). The second is good to see if they can actually code but they might score badly if they're unfamiliar with the tools you use. The third will show you if they can solve theoretical problems but won't show you if they actually are good team players or if they write maintainable code.
I recently had a friend start talking to me on IM, he was in a coding test job interview. He had a couple SQL questions. At first i thought, hell you've got to do this yourself. I'm not going to help you cheat during an interview.
Then i thought about it again. I've been answering questions and talking to him about various technical issues for years on IM as part of his work. So when he encounters problems in the real world with the job if he gets hired, he'll do the same thing.
We don't talk about it much, but having a good network of friends to ask questions, and knowing how to search out relevant answers on the net are a big part of being an effective programmer or sysadmin. I've met people who were super smart programmers, but didn't really know how to find information online. They missed a lot, were kind of out of the loop. Knowing how to use resources should be important.
When i do interviews i often ask people what websites they read, what development tools they use, and why. It's a similar thing. Sure it's not about how they write x line of code, but it's about how they work.
No how to get around somebody just copy and pasting "answers". Well first, don't ask questions which have pat answers. Secondly when i'm interviewing i like to give people some code, ask them to refactor it, have them talk through what they are thinking. Then ask them to write some new code which implements a feature. Pair program with them. It's hard to hide inability to code when pair programming. While they are pairing, it totally makes sense to say, "let's go look up the api on the date time library."
发布评论
评论(13)
正如您所说,“我不希望候选人在不使用网络的情况下完成工作”,为什么不允许在测试期间也使用网络呢? 如果他复制粘贴怎么办? 我也这样做。 当然,关键是要知道去哪里寻找,辨别你发现的东西并聪明地应用它。 您想雇用具有出色记忆力的人还是可以为您开发软件的人吗?
当我在学校的时候,计算器才刚刚变得可以负担得起。 由于它们的使用被认为是不可避免的,因此考试发生了变化。 简单的数字运算不再像以前那样进行测试(这在当时很重要)。 相反,要测试的是解决问题的技术。
As you say, 'I don't expect the candidate to do his work without use of the web' why not allow it too during the test? And what if he does copy and paste? I do that too. Surely the key is to know where to look, be discerning with what you find and apply it intelligently. Do you want to hire someone with a terrific memory or someone who can develop software for you?
When I was at school, calculators were just becoming affordable. As their use was seen as unavoidable, the exams were changed. Simple number-crunching was no longer tested in the way it was before (it was important then). Rather problem-solving techniques were to be tested.
我通常允许候选人使用他们想要的任何资源。 他们完成后,我会和他们坐下来一起检查他们的代码,询问他们为什么选择这种特定方法等问题。
如果几分钟的谷歌搜索足以不仅仅是复制粘贴一些代码,而是足以了解它能够捍卫内心的决定,那他就够聪明了!
I usually allow candidates to use whatever resources they want. After they're done, I sit down with them and go through their code together, ask questions like why they chose that particular approach etc.
If a couple of minutes of Googling was enough to not just copypaste some code but to learn enough about it to be able to defend the decisions within, then he's intelligent enough!
有些测试可以提供网络访问,而有些测试则没有任何意义。
允许 Web 访问的情况
不允许网络访问的情况
There are tests, where web access can be given, and there are where it doesn't really make sense.
Case where its fine to allow web access
Case where its fine to not allow web access
我对面试期间的编码测试非常怀疑。 我认为我见过的很多测试都代表了非常具体的(人为的、非现实世界的)问题,你可以使用互联网来解决它们。
我认为知道如何用心解决这些问题并不重要——很多时候更重要的是知道如何以及在哪里寻找答案。
如果你想在面试中测试这些人,我认为最好问他们一些概念性问题,而不是具体的编程问题。 例如:有关面向对象、多态性、n 层应用程序设计等的问题。
或者以 ASP.NET 世界为例,向受访者询问以下问题:什么是 ViewState、什么是回发、什么是会话/应用程序状态等
I'm very sceptical about coding tests during interviews. I think that a lot of the test I have seen, represent very specific (artificial, non real-world) problems where you would use the internet to solve them.
I think it's not really important to know how to solve such problems by heart - often time it is much more important that you know how and where to search for answers.
If you want to test the persons during the interview, I think it is better to ask them some conceptual questions instead of a specific programming problem. E.g: questions about object orientation, polymorphism, design of n-tier application, etc. etc.
Or as an example from the ASP.NET world, ask the interviewed person question such as: what is ViewState, what is a postback, what is session-/application-state, etc.
如果你想了解应聘者在工作中的表现,我认为最好尝试使测试条件尽可能接近实际工作条件。
通过要求候选人解释他/她的代码,应该很容易防止复制粘贴被漏掉。
If you want to get an idea of how a candidate will perform in a job, I think it's best to try and make the conditions of the test as close as possible to the actual working conditions.
It should be pretty easy to prevent copy-and-pasters from slipping through the cracks by asking the candidate to explain his/her code.
好吧,您需要注意的一件事是,您雇用的开发人员可能并不知道他在为您工作期间将遇到的一切。 如果你问他一个他根本不知道的问题,你会希望并期望他进行研究,并证明他理解他刚刚学到的概念。
我说让他们使用网络 - 但要求他们用自己的话解释他们的代码是如何工作的。 我的大部分知识都来自在线资源。 但是,我确保我写的每一行代码我都理解。
有一个特定领域的开发人员应该了解的基线知识; 但你也想知道他学习新事物的速度有多快。 在我看来,一个很好的测试是提出一个你知道他不知道的问题,看看他如果是你公司的员工的话,可以使用他拥有的资源多长时间来解决这个问题。
Well, one thing you want to be aware of is that the developer you hire might not know everything that he will be thrown during the time he is working for you. If you ask him a question that he doesn't know off the top of his head you would want and expect him to research it and come back to you with proof that he understood the concepts that he just learned.
I say let them use the web - but ask them to explain in their own words how their code works. Most of my knowledge comes from online resources. However, I make sure that every line of code I write I understand.
There is a baseline knowledge that developers in a particular field should know; but you also want to figure out how quickly he can learn new things. A good test IMO is to throw a question you know he doesn't know and see how long he can figure it out using the resources he would have if he were an employee of your company.
您的目标是查看候选人拥有哪些基本知识,以及他是否可以在不从网络复制解决方案的情况下进行编码,然后不允许访问互联网。 如果您想了解他采用什么策略来找到解决方案,请让他使用网络(如果他愿意)。
我个人认为,如果候选人能够解决更大规模的问题,而不仅仅是解决简单的编程问题,那会更有趣。 所以我倾向于问他在编程时使用的方法(单元测试?曾经使用过它吗?你对此有何看法?)。 这给了我比在面试情况下编码更好的画面。
有时,如果您事先要求应聘者带一份一页的编码示例来看看他们的编码风格,这会有所帮助。 这也可以节省您面试的时间。
Is your goal to see what basic knowledge the candidate has and if he can code without copying solutions from the web, then don't allow internet access. If you want to see what strategies he employs to get to a solution, let him use the web if he wants to.
I personally find it more interesting if a candidate can solve problems on a larger scale than just solving a simple programming problem. So I tend to ask him about the methods he uses when programming (Unit testing? Ever worked with it? What do you think of it?). This gives me a better picture than coding in an interview situation.
Sometimes it helps if you ask the candidates beforehand to bring a one-page coding sample to take a look at their coding style. This also saves you time during the interview.
确保候选人足智多谋很重要——你不希望你的程序员在陷入困境时坐在那里不前进; 你希望他们使用手头的任何资源 - 无论是 MSDN、听取别人的意见、使用网络等 - 来完成工作。 从网络上剪切粘贴确实看起来像作弊,但是(a)如果你仔细设计你的任务,那么它将足够独特,以至于没有他们可以从网络复制的标准答案,并且(b)不是“重用现有代码不是构建软件的关键部分吗? 这与使用第三方库没有太大区别,以避免重新发明轮子。 当然,不利的一面是,您还希望他们展示自己可以开发算法,因此独特的任务需要包含一些需要在网络上没有解决方案的情况下完成的元素。 问题是,论坛是所有这一切的致命弱点,因为他们可以简单地询问解决方案,而某人在某个地方会不知不觉地交出答案!
It's important to make sure a candidate is resourceful - you don't want your programmer sitting there when they get stuck, not moving forward; you want them to use whatever resources are at hand - be it MSDN, picking someone else's brains, using the web, etc - to get the job done. Cut-n-paste from the web does seem like cheating, but (a) if you design your task carefully then it will be unique enough for there not to be a standard answer they can copy from the web, and (b) isn't re-using existing code a key part of building software? It's not much different from using 3rd-party libraries, to avoid reinventing the wheel. On the downside, of course, you also want them to show they can develop algorithms, so the unique task needs to include some element that requires that without the solution already being on the web. Trouble is, forums are the achilles heel to all of that since they can simply ask for the solution and someone, somewhere, is going to hand over the answer unwittingly!
允许候选人使用网络,但事先告诉他,如果他使用网络,你将必须评估他如何解决问题。
如果他使用网络进行一些简单的事情,例如查找他忘记的语法或参数,请不要标记他。 这个是正常的。
如果他使用网络进行诸如查看特定功能如何使用之类的事情,请不要标记他。 这个是正常的。
如果他搜索特定代码然后复制粘贴它,然后询问他该代码是如何工作的。 如果他能解释代码是如何工作的,那么就没有理由对他进行评分。 如果他不查看获取代码的网站就无法解释,你就必须把他标记下来。
如果他使用 stackoverflow.com,请检查他的个人资料中的问题、答案和徽章。 从那里,你可以检查他是一个多么优秀的程序员。
Allow the candidate to use the web but tell him beforehand that if he used the web, you will have to evaluate HOW he solved the problem.
If he used the web for something simple such as finding the syntax or parameters which he forgot, don't mark him down. This is normal.
If he used the web for something like look at how a specific function is used, don't mark him down. This is normal.
If he searched for a specific code and then copy-paste it, then ask him about how the code works. If he can explain how the code works, then there's no reason to mark him down. If he can't explain it without looking at the site where he got the code, you have to mark him down.
If he used stackoverflow.com, check his profile for questions, answers and badges. From there, you can check how good a programmer he is.
这完全取决于您对成功候选人的期望。 我反对这样一种观点,即知道如何使用谷歌可以让你成为一名优秀的程序员,因为一个简单的事实是互联网上充满了好的例子和坏的例子。 你并不真的希望你的代码库反映出你的谷歌员工在从网络上剪切并粘贴所有代码的那一天是多么幸运。 您希望它能够展示良好的实践、经过验证的方法和方法。 您的团队理解并热衷于的优雅、高效的解决方案。 不是一堆彼此不相似的风格。 知道如何从互联网上获得帮助可以带来很多好处,但真正的知识和古老的智慧每天都在消失,那些并不真正了解自己在做什么的人得到了工作,因为他们似乎在解决问题他们“谷歌搜索”的能力。
如果您确实想让您的候选人访问网络,那么请务必这样做,但要提出困难的问题并仔细检查结果,看看他们是否选择了他们找到的第一个解决方案,或者他们是否选择了解决问题的最佳解决方案。问题。
It all depends what you want out of your successful candidate. I contest the view that knowing how to google makes you a good programmer because the simple fact is that the internet is full of bad examples as well as good ones. You don't really want your codebase to reflect how lucky your googler was on the day he cut and pasted all his code off the web. You want it to demonstrate sound practices, proven methodologies & elegant, efficient solutions that your team understand and are enthusiastic about. Not a jumble of styles that don't resemble each other. There's a wealth of good to be gotten from knowing how to get help from the interweb but real knowledge and ancient wisdom is being lost every day that people who don't really understand what they are doing are given jobs because they appear to solve problems with their ability to "google it".
If you really want to give your candidates access to the web then by all means do, but make the questions hard and scrutinise the results to see if they've picked the first solution they found or if they've picked the best solution to the problem.
与许多其他受访者一样,我宁愿雇用一位足智多谋的开发人员,他知道如何充分利用网络来借鉴他人的经验和以前的工作,而不是一位将自己和他的应用程序限制在 MSDN 做事方式的开发人员。
我一直在复制别人的代码——事实上每天都是如此。 其秘诀在于快速找到正确的解决方案并将其集成到您现有的工作中。
因此,让您的候选人使用网络并询问他是如何得出解决方案的。 你可能会从他的方法中了解更多关于他的信息,而不是从他如何记住以前的解决方案。
As do many other respondents, I'd rather employ a resourceful developer who know how to use the web to the fullest to draw on other's experiences and previous work, than a developer who limits himself and his applications to the MSDN way of doing things.
I copy other peoples code all the time - daily in fact. The knack of it depends on finding the right solution quickly and integrating it into your existing work.
So let your candidate use the web and ask him how he came to his solutions. You might learn more about him from his methods than from how will he can remember previous solutions.
我会做三件事。
让申请人随简历一起发送编码示例。
让申请人编写一些现实生活中的代码(甚至可能与您团队中的开发人员结对编程),这将向您展示他们是否真的可以使用这些工具。 互联网也是一种工具,所以他们应该能够使用互联网。
让应聘者在面试时在黑板上用伪代码解决一个问题。 在这种情况下,您可以通过帮助他们成为他们的“互联网”。
这三种方法将向您展示不同的东西。 第一个是一个很好的预警机制,但很容易被伪造(他们可以从网络上的某个地方下载oss代码)。 第二个很好看他们是否真的可以编码,但如果他们不熟悉您使用的工具,他们可能会得分很差。 第三个将向您展示他们是否能够解决理论问题,但不会向您展示他们是否实际上是优秀的团队合作者或者他们是否编写了可维护的代码。
Three things I'd do.
Let applicants send in a coding example along with their cv.
Let applicants produce some real-life code (maybe even pair-program with a developer on your team) this will show you if they can actually use the tools. Internet is a tool too so they should be able to use internet.
Let applicants solve a problem in pseudo code on a blackboard during the interview. In this case you can be their "internet" by helping them.
These three approaches will show you different things. The first is a good early warning mechanism but can easily be faked (they could just download oss code from the web somewhere). The second is good to see if they can actually code but they might score badly if they're unfamiliar with the tools you use. The third will show you if they can solve theoretical problems but won't show you if they actually are good team players or if they write maintainable code.
最近,我的一个朋友开始在 IM 上与我交谈,他正在参加编码测试工作面试。 他有几个 SQL 问题。 起初我想,见鬼,你必须自己做这件事。 我不会帮助您在面试期间作弊。
然后我又想了想。 作为他工作的一部分,多年来我一直在回答问题并与他讨论有关 IM 的各种技术问题。 因此,当他在现实世界中遇到工作问题时,如果他被录用,他也会做同样的事情。
我们谈论得不多,但拥有一个良好的朋友网络来提问,并知道如何在网上搜索相关答案,是成为一名高效的程序员或系统管理员的重要组成部分。 我遇到过一些超级聪明的程序员,但并不真正知道如何在网上查找信息。 他们错过了很多,有点脱离了循环。 知道如何使用资源应该很重要。
当我进行采访时,我经常询问人们他们阅读哪些网站、他们使用哪些开发工具以及原因。 这是类似的事情。 当然,这不是关于他们如何编写 x 行代码,而是关于他们如何工作。
没有办法绕过某人,只需复制并粘贴“答案”。 首先,不要问有固定答案的问题。 其次,当我面试时,我喜欢给人们一些代码,要求他们重构它,让他们谈论他们的想法。 然后要求他们编写一些实现某个功能的新代码。 与他们结对编程。 结对编程时很难隐藏无法编码的情况。 当他们配对时,说“让我们去查找日期时间库上的 api”是完全有道理的。
I recently had a friend start talking to me on IM, he was in a coding test job interview. He had a couple SQL questions. At first i thought, hell you've got to do this yourself. I'm not going to help you cheat during an interview.
Then i thought about it again. I've been answering questions and talking to him about various technical issues for years on IM as part of his work. So when he encounters problems in the real world with the job if he gets hired, he'll do the same thing.
We don't talk about it much, but having a good network of friends to ask questions, and knowing how to search out relevant answers on the net are a big part of being an effective programmer or sysadmin. I've met people who were super smart programmers, but didn't really know how to find information online. They missed a lot, were kind of out of the loop. Knowing how to use resources should be important.
When i do interviews i often ask people what websites they read, what development tools they use, and why. It's a similar thing. Sure it's not about how they write x line of code, but it's about how they work.
No how to get around somebody just copy and pasting "answers". Well first, don't ask questions which have pat answers. Secondly when i'm interviewing i like to give people some code, ask them to refactor it, have them talk through what they are thinking. Then ask them to write some new code which implements a feature. Pair program with them. It's hard to hide inability to code when pair programming. While they are pairing, it totally makes sense to say, "let's go look up the api on the date time library."