如何快速清除“复制并粘贴”编码器?[关闭]


15

我需要一种方法来过滤掉那些只复制并粘贴代码然后希望它能起作用的人的简历,并检查它是否起作用。所有这些事情都是在不了解(或不了解)系统中其余代码的情况下发生的。

我当然知道复制和粘贴代码是学习新对象,控件等的一部分……但是,如何判断这是否占其开发生涯的70%(或更多)?

我遇到过一些高级人员,他们的技能对于该项目而言已经过时或无关紧要,以至于他们所做的只是Google,复制然后粘贴一些代码,而没有考虑整个解决方案。结果,我们在同一项目中误解了JSON,AJAX,回调,ASMX,WCF和回发。显然,每种技术的使用背后都没有一致性或逻辑性。

在最坏的情况下,这种类型的开发人员会创建安全问题和攻击媒介。

您将如何建议我过滤掉那些编程背景较差的人?我可以在简历级别上吗?如果没有,在面试中我该怎么做。


听起来您需要项目的技术架构师。有人必须将WRT法律规定为所使用的标准,所使用的技术,并将其从每周的“宠物创意”中删除。
quick_now 2012年

Answers:


47

我遇到过一些高级人员,他们的技能对于该项目而言已经过时或无关紧要,以至于他们所做的只是Google,复制然后粘贴一些代码,而没有考虑整个解决方案。结果,我们在同一项目中误解了JSON,AJAX,回调,ASMX,WCF和回发。显然,每种技术的使用背后都没有一致性或逻辑性。

我认为开发人员的技能不是问题。您的问题出在其他地方,可能是没有自信“鼓励”更好的编码学科的团队负责人或架构师,或者是不了解管理技术债务的重要性并且不给予他们精力的管理团队。开发人员这样做的时间和资源。贵公司是否持有代码审查?

领导能力可能是问题所在,而不是复制粘贴开发人员。


16
+1 Leadership may be the problem, not copy-paste developers. 正是我的解释。
乔治·玛丽安

说真的 沟通部门严重违反了AWOL。
MIA 2010年

+1:同上乔治·玛丽安(George Marian)的评论。说得很好,罗伯特。
Jim G.

很好。希望它能吸引尽可能多的面试官,招聘经理。
萨尔(Saar)

在这个答案上似乎有很多共识,但是“高级”级别的专家们并不能决定功能,然后由程序员来实现,对吗?我的意思是高级人员可能会说“嘿,不要使用成群的技术,只需使用<这两个>”,但是复制粘贴开发人员仍会进行复制粘贴!我错了吗 ?
加尼2012年

13

淘汰无法编程的程序员的方法是,在筛选阶段或面试阶段中,为他们设置实用的编程练习。(后者可能更好,因为您可以控制环境以防止作弊。)

但是我认为这并不能真正解决您的问题。

...我们在同一个项目中混用了JSON,AJAX,回调,ASMX,WCF和回发。显然,每种技术的使用背后都没有一致性或逻辑性。

IMO,这里的真正问题是您的团队没有进行足够的内部代码审查,也没有为已知问题开发首选解决方案的“手册”。这部分是文化问题,部分是沟通问题,(可能)部分是项目截止日期的问题。

另一个问题是,该项目通常具有较长的使用寿命,并且在该使用寿命期间,将出现新的技术,而旧的技术可能会失宠。如果您想避免使用“狗狗早餐”的技术,那么您需要:

  • 设置并强制执行每个项目可以使用的技术/技术列表,或者
  • 投入精力来更新项目使用的技术。

1
如果您在面试过程中没有进行笔试,则可能是在朝自己的脚开枪。我最近四位雇主都聘用了他们,并且常常对某些问题的简单性感到惊讶。在一个地方,我被告知另一位候选人没有完成考试就离开了,哭了起来。
阿德里安·莫雷诺

1
我完全同意在面试过程中进行笔试是确保您的应聘者真正具有良好编程技能的唯一方法。但是,我的回答的主要目的是仅开发人员技能不足以解决SO的问题。
斯蒂芬·C

被编辑计时器抓住了。我完全同意标准和审查是必要的。我们最近发布了一个新的编码标准文档,并结合了一些新的代码审查流程,使我们进入QA的错误大大减少。如果我的下一个目标是建立一个内部培训团队。
Adrian J. Moreno 2010年

10

雇用3个月试用期的人。如果他们吮吸,请解雇他们。

如果您不进行检查,则无法进行预期。代码审查,审核工具。CI服务器可以自动运行它们。

在面试中提出真实的问题,就像来自真实代码的问题一样。

让他们在白板上编写代码。

如果您不是技术经理,则没有资格对此做出判断。

如果您不合格,请找著名的高级专业顾问进行测试。询问您现有的人员和商业竞争对手是否认识到100倍的生产率。付钱给他们做面试。

如果您想在没有外科负责人的情况下经营医院,请继续。


您是在谈论经验丰富的人吗?为什么一个人应该离开工作岗位并加入一个需要3个月才能让他/她吮吸的地方:)为什么会有人力资源?
萨尔(Saar)

我说的是经验丰富,能干的人。从长远来看,它们更便宜。人力资源可以阻止您因违反雇佣法而受到起诉。最初是为亨利·福特的数字经理们做些棘手的事情。真实的故事,查一下。如果您已经知道这个人会做得很好,那么您在这方面要比我强。该人将更换工作,因为您的工作很棒,工作环境很棒,试用期结束后,他们将获得丰厚的奖金。如果将它们永久删除,则贵公司将额外支付三个月的费用。像这样
Tim Williscroft

9

最近几年,我采访了人们,发现90%的候选人根本无法编程。我用于确定编程的面试技巧是给应聘者提供一个过于简单的简介,并让应聘者使用标记和白板来解决它。

失败模式包括:

提出一个设计,然后实施一些不同的东西。这些候选人被拒绝,因为他们在团队中很危险。不遵循规格,编写错误等...

无法发明设计。数量惊人的“有经验”的候选人需要一个规范来包括实现设计。

尽管CV拥有丰富的经验,但仍不懂编程语言。

不询问其他问题以提取更完整的规范。

无法解释设计决策。这是主要的。如果某人无法解释原因,那么他们每次都会做不同的事情,并且会失去一致性。

最终结果是我花了很多时间进行面试,而不是经常招聘。但是,开发团队非常出色,并得到了整个公司的完全尊重,并且交付了!


您的经历听起来很正常。
quick_now 2012年

5

我建议Jeff Atwood在http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html的帖子中提到的F​​izzBu​​zz 。

编写一个程序,打印从1到100的数字。但是,对于三个数字的倍数,请打印“ Fizz”(而不是数字),对于五个数字的倍数,请打印“ Buzz”。对于三和五的倍数的数字,请打印“ FizzBu​​zz”。


9
-1。FizzBu​​zz检测到所有白痴。要进行复制和粘贴编码,您不能成为一个白痴。
back2dos

@ back2dos-在进行面对面采访时,您应该已经淘汰了“白痴”。FizzBu​​zz使某些人思考问题以及如何最好地解决它。这并不困难,因此应该公开那些要粘贴和粘贴的人,因为那些要粘贴和粘贴的人不会了解事物背后的“原因”。
2010年

3
+1。FizzBu​​zz检测到的白痴总数最多。它还可以检测出通过同等水平的社交技能来弥补缺乏技术技能的人。这些人很有可能通过首次筛查测试。例如,他们很可能拥有合法学位。
MSalters 2010年

1
好吧,你问我嘶嘶声,我马上走开了。:) IMO在初级类别中并没有真正的用处,因为您仍然会训练这些家伙,而在高级类别中则是无用的+进攻性的。您应该可以通过其他方式来培养高个子的人。IME表示黄鼠狼农场公司的编码像现场问题一样。如果我实际上对某人的编码技能感兴趣,请提出一个代码审查问题。并获得所有相关答案,而不会感到沮丧。
2013年

@BalogPal:我会笑起来,开始疯狂地打字两分钟,然后如果第一次不编译,运行和工作,我会为自己感到羞愧。
gnasher729

2

我问三个面试问题

  1. 编写一个能够在Java中存储某种数字类型而无需从collections框架导入任何内容的链表
  2. 编写代码,显示如何从该列表添加/删除节点
  3. 编写代码,显示如何从该列表中获取最大/最小

我已经看到人们在5分钟内完成了这一过程,并且看到人们挣扎了30分钟才放弃。


第一个要求应该更具体。java.util.LinkedList l = new java.util.LinkedList()不会导入任何东西,但是肯定会使用内置集合。
巴里·布朗

这是一个公平的问题,特别是对于刚毕业的毕业生。如果您全神贯注或花时间进行编程,那么这几乎是微不足道的。我认为它不一定是精确的,但足够接近。
布莱恩·哈灵顿

3
@Bryan,还没有人尝试过。而且我真的不在乎答案是否100%正确。只有他们了解问题并能够胜任处理。最常见的问题是无法在列表的开头或结尾处进行添加/删除操作。我建议人们根据他们对我的反应指出这一点。
萨尔

2

您不能在履历级别上执行此操作,因为他们本质上有无限的时间来编写该履历,但是如果您提出一些需要技术洞察力的问题,则可以通过电话采访进行。这既给您答案(好还是坏),又使他们花了多长时间才能到达那里。

在面试时,让他们编写代码。这是告诉他们是否可以进行真实编程的唯一方法。使问题变得简单,给他们提供具有互联网连接的计算机,并安装您使用的IDE,让他们提出任何问题(gimme-hte-codez除外),并观察它们的工作原理。


编辑:对于事后分析,看来PMD有一个复制/粘贴检测器可以找到它:http : //pmd.sourceforge.net/cpd.html


我同意您的意见,直到“ ...以及您使用的IDE”为止。编码人员对我们的工作环境特别关注,不太可能熟悉$ random-IDE。我从事编码已有20多年了,如果您对我投掷了一个IDE,我会浪费前10分钟来试图弄清楚如何使用IDE。我使用编辑器(在做webby事情时使用bluefish,在其他所有东西上使用emacs),而在其他所有东西(版本控制,需要时进行编译等)上使用命令行工具。我根本不使用调试器。我被告知,如果您需要调试器,那就错了:这就是调试代码的作用!
HedgeMage 2010年

@HedgeMage,我没有说他们必须使用它……看到一个人如何处理这种情况非常有说服力。记事本+ javac是否足够?他是否下载并安装NetBeans?他会问如何在您的IDE中执行X,稍微修改一下并询问Y和Z吗?

@HedgeMage,如果您可以提前确定所有可能需要了解的内容,则调试代码非常有用。在需要查看问题答案以确定下一个问题的情况下,调试器非常有用,在调试代码中,调试代码需要一个新的二进制文件,然后重新启动并再次定位。

1
@Thorbjørn:的确,过去几年来,我的账单是用解释性语言支付的,但是即使在我的C编码时代,我也因为良好的调试代码而辞退了调试器。也许这只是我的一个偏见:我和很多人一起上大学,他们从来没有学习过如何编写代码-他们只是将某些东西拍打在一起,然后修复调试器发出的尖叫,直到它“成功”为止。我受不了那种简陋的编码。我并不是要暗示调试器是邪恶的,只是它们和其他IDE功能并不属于所有工作流。
HedgeMage 2010年

@HedgeMage,我同意调试的“击败它直到起作用”的方法不好,但是结论是调试器不好可能是一个太笼统的结论。

1

简单

  • (1)将它们锁在房间+氧气中。
  • (2)给他们一台具有Internet连接+选择的IDE +可以访问Food的PC。
  • (3)使用wireshark或类似方法记录所有入站和出站流量。
  • (4)给他一个中等任务。
  • (5)检查所有HTTP流量,分配完成后。
  • (6)如果Subject复制了大量源代码,请终止 Subject .....

编辑:

正如makerofthings7所指出的那样,实际上可以进行视频捕获(屏幕捕获)。


新颖,但最终不切实际。
罗伯特·哈维

...或者只是进行视频捕获,请参阅逻辑进度。观看美丽(或混乱)的过程。
goodguys_activate

1
终止主题?通过抽取游离氧?乱!

@Thorbjørn:复制大量源代码后,他们并没有像他们用脚射击自己那样混乱。
乔D

1
那些未能充分利用互联网优势的人被困在昨天的模式中。我总是认为他们是一些很好的例子,让我看看这个问题多么微不足道。我不会复制和粘贴,而是查看一些好的示例并应用最佳技术。我是一名全职程序员,这意味着我是一名通才而不是专家,并且依赖于世界其他地区。显然是有罪的!
junky 2012年

1

如果您想“淘汰”可怜的编码员,可以尝试使用Programmer Competency Matrix(程序员能力矩阵)(有用,但并不适用于所有可能的领域-当然您也可以自己创建)或codility.com(任务非常好,而且这样可以节省很多时间)。

通常,雇用优秀的编码人员很困难,并且通常需要多年的实践。您可以建立自己的面试问题数据库,不仅可以询问编码方面的内容,还可以使用数学,逻辑,更不用说动机问题了。


0

我要说的是,候选人的问题不是他们根本无法编程,而是他们没有为工作使用合适工具的感觉。我的建议是提出一个小问题,在该问题上将为他们提供对新系统的高级要求,并要求他们提供体系结构并证明其组件选择的合理性。但是请FizzBu​​zz保留给那些没有浏览器就根本无法编码的应聘者。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.