it-swarm.cn

FizzBu​​zz-真的吗?

当涉及“面试测试”问题时,FizzBu​​zz的主题经常浮出水面。关于它也有一个 Coding Horror 帖子。

现在,如果您不愿意阅读此类网站,那么可能不太会发现FizzBu​​zz无关紧要的程序员群体。

但是,确实有99%的程序员会为此奋斗吗?

真?

有什么证据可以证明这一点?

一些现实生活中的例子对于回答这个问题会很有帮助。

60
DanSingerman

99%?否。有很大百分比吗?是。从我与人面谈的直接经验中,我可以证明这一点。对于您来说,这似乎微不足道,但是编程领域中有很多人或多或少地伪造了多年,并申请了非入门级职位,但没有通过。

即使您可以轻松解决问题,但是您被要求执行这样一项艰巨的任务也会给我带来很大的麻烦。在团队中意味着有时不得不做一些您可能不喜欢但有必要的事情。如果马上采取行动,那么在我们甚至开始合作之前,您认为最好尝试坚持自己的特殊地位,超越我已要求您做的事情,这将成为反对您的标志。

我不一定在乎您的解决方案有多优雅(尽管那会很好),但是看到您在白板上刺了一下它,并通过它谈论自己的方式,就表明我至少愿意刺它一个。 。如果您感到愤慨,并说“我是一个问题解决者,而不是代码猴子!”那么您将被钉住。

我曾经让面试者坦率地拒绝甚至开始尝试它。只是简单地拒绝。不,嗯。不会的。我再问一两个礼貌的问题,感谢他们的宝贵时间,并结束了采访。

我说这是作为经理和开发人员。

46
Todd Williamson

我认为99%申请工作(但没有得到工作)的程序员可能会为此感到挣扎。但并不是有99%的程序员有效地工作。

这就是我们现代求职过程的本质。许多申请者不合格。

编码恐怖的帖子也说明了我们如今教授计算机科学的方式。在过去(特别是在麻省理工学院),您需要学习LISP之类的东西,这几乎需要您掌握递归之类的概念。

如今,人们被教导Java,因为它在工业中得到了广泛的使用,并且重点已经转移到语法上,而不是深入的编程思想。我不喜欢Java;实际上,我认为这是一种理想的选择。第一门编程语言,但是我还没有看到我的教练用它来教深层的编程原理。

25
Robert Harvey

我讨厌这样说,但是

我看到编程问题未能得到解答的主要原因是询问者而不是应答者的问题。

我可以清楚地记得在一次采访中,有人问我如何创建一种特殊的集合搜索算法,该算法将在恒定时间(无论集合中有多少项,查找次数相同)下运行。在放弃之前,我摸索了20分钟。那时,这位才华横溢的采访开始证明答案是在几乎恒定的时间内运行的,但仍不是恒定的时间。有点像说“给我一个零的答案”,然后接受0.1。

缺少的是,我见过太多的情况,有人在面试时提出的问题不符合以下条件:

  1. 他们知道所有可能的正确答案。
  2. 他们知道为什么正确答案是正确的。
  3. 他们知道如何在不给出答案的情况下实际提供足够的信息。
  4. “解决问题”问题并不依赖于未公开事实的知识(这是我所见过的最大问题)。
  5. 如果您不必弄清楚答案,则只需不到1分钟即可编写答案。如果只花5分钟就可以输入代码,那实际上需要解决的问题比面试的口头部分还多。
  6. 问题不仅仅基于“我曾经遇到过一个问题,或者我在学校里遇到过的问题,所以您应该知道如何解决它现在“。我敢打赌,您有超过2分钟的时间回答,为什么您不给候选人同样的礼貌。

认真地讲(1),我认为要求人们在面试的口头部分编写代码是愚蠢的。

认真地讲(2),我认为在不要求他们编写代码的情况下采访人们也是愚蠢的。

认真地(3),您应该给他们“作业”,要求他们带上代码示例,或者给他们笔记本电脑和几个问题以及安静的办公室来处理它们。然后,当他们在处理它们时,不要理会它们。我通常采用后一种方法,因为它限制了他们获得外界帮助(作弊)的能力,因此我可以设定时间。

20
MIA

我读过您提到的《编码恐惧》一文,我的观点是杰夫是正确的……但是他最后一次接受采访是什么时候?

面试时,通常压力很大,常常需要回答一些理论上的问题(没有才智,没有Google,没有讨人喜欢的东西,……只是压力引起的记忆困扰)。在测试中也是如此。压力对您没有帮助。

我注意到,知道某人是否适合这个职位的唯一方法是与他一起工作一段时间...从100名(可能更多)中雇用的最后10名员工中,有多少才是真正的好人聘请???

雇主应聘用问题解决者,而不是了解模数的代码猴子。

您无法“暂时测试所有申请人”,因此需要对他们进行面试。这就是为什么我将我的问题集中于此(解决问题)并进行过去的参考检查的原因。

我的观点是,FizzBu​​zz对于正在寻找开发商以维持其增长的公司来说是危险的。

10
user2567

您需要做的就是在FizzBu​​zz上搜索。上有大量的博客文章。一般来说,博客作者说:“我告诉人们用[某种语言]编写它,这是他们犯的各种错误:”然后列出了一些陷阱。有趣的地方始于注释,人们说“哈!这在[某种其他语言]中是微不足道的,您所要做的就是:”,然后是代码。下一条评论总是会发现第一个错误。似乎有些优秀的开发人员第一次用任何语言都无法做到这一点。一些错误:

  • 我要求1到100,而您则选择1到99或0到99
  • 弄乱是否要打印数字以及嘶嘶声和/或嗡嗡声
  • 关于“ fizzbuzz”与“ fizz-buzz”的分歧
  • 错过了优化,例如两次比较一次
  • 还有更多

在招聘时,我要求人们在白板上为我编码,没有什么比这复杂的了(我知道,您并不认为这很复杂),而且许多应聘者完全失败了。我的意思是喜欢写vb样式的If,Then,End If,但也要放括号(我想只是为了安全起见)或编写C#(并先问C#?),但在任何地方都没有一个半冒号。不要从逻辑错误着手!

10
Kate Gregory

最近,我受命采访了50多位程序员担任高级职位,他们将主要使用PHP。

我在筛查考试中扔了fizzbuzz问题,主要是为了娱乐自己,因为我想要10个好问题,而只有9个。当时,我的目的是向人们表明,即使是面试问题,我们也可以从中获得乐趣。

80%的申请人解决了问题,但未使用模数运算符。

15%的申请人无法解决问题。

5%的申请人使用模运算符解决了该问题。

尽管我的抽样调查非常有限(来自一个国家的50名申请人),但我可以告诉您:

他们中有95%的人拥有CS或更高的CS课程(这里的大学通过努力使CS的声音更加引人注目来进行竞争)。

我真的很惊讶。好吧,吓坏了..但是很惊讶。我不认为我会接近重现结果,因为该问题已变得如此普遍。这表明我有5%的申请人可能不是超级程序员,但至少他们阅读了与编程相关的博客。

10
Tim Post

在上一轮招聘中,我有3名建筑工人,其中0,我重复0,编程教育或经验应聘软件开发人员职位。* 这就是桶的底部。如果您假设技能呈正态分布,那么您可以看到平均技能水平将如何降低,甚至“高于平均水平”(在申请人中间)仍然相对较差。

现在,如果您只对那些似乎具有某种编程能力的应聘者进行嗡嗡作响,那么您会发现您现在拥有:

  1. 骗子
  2. 流行语爱好者(我曾经读过一篇有关.NET的文章)
  3. 糟糕的实际程序员
  4. 使用技术完成项目但未了解相关技术的人(请参阅有关idisposable的fizzbuzz问题以识别这些问题)

另外,我看到的一些“ fizzbuzz”问题是特定于域的。您可以使用一种语言/框架x进行多年的逐步开发(因此z拥有x年的经验),而不必涉及其中的某些部分(例如,库开发人员对UI组件开发了解不多)。

同样,如今,许多开发人员都进行维护开发,因此他们的架构/设计技能在某些方面可能很弱。

现在,我不确定99%是否准确,但IME仍然很高。至少在80%的范围内。

*不,我们没有致电,甚至没有再看这些应用程序。

9
Steven Evers

对真的。可能不是99%,但仍然很高。我曾经采访过计算机科学专业的学生,​​以进行实习和全职工作。我会在一所大学采访约25名学生。我们被告知不要问同样的问题,因为学生们在说话。我很快就知道这没关系,因为在25个可以回答我的第一个问题的学生中,我只会得到3或4个学生。 “写strcmp”

我要求他们编写一个比较两个字符串的函数。也许使用该功能对字典中的单词进行排序。您会惊讶于不懂如何比较两个单词的学生人数,更不用说知道如何编写函数了。其中一些学生声称他们在CSc中获得了全部A。

编程是非常困难的事情。许多人喜欢认为他们知道如何编程,但是他们不知道。

8
ChrisMcB

一些想法:

  • 如果他们的程序有一些错误,但我显然不会反对,但是他们显然有正确的想法。调试是编程的一部分。

  • 我感到可悲的是,如此多的人正在申请他们不知道自己做不到的工作。在我看来就像经济问题。

  • 向人们提出不好的问题确实很容易,唯一的“正确”答案就是面试官会给出的答案。

8
Mike Dunlavey

该测试很好地涵盖了我想了解的有关可能雇用的程序员的几件事:

  1. 你甚至可以编程吗?
  2. 您可以从头开始编写程序吗(因为不是每个人都可以!!!)
  3. 如果不考虑over-就能解决问题了吗?.

为了详细说明最后一点,对于嘶嘶声有很多解决方案。您是否追求可读性?速度?轻浮?您是否尝试快速完成程序编写?程序员如何解决这个简单的问题非常有说服力。如果程序员不能选择一种解决方案并将其彻底解决,那么这将告诉您这个人在实际任务中的表现如何?

7
user2458

不幸的是,许多简历令人印象深刻的人的确似乎缺乏基本的编程技能。我已经看到很多情况,在简历中列出C和C++的人无法回答有关指针的基本问题。

6
Dima

我认为这是一个如此受欢迎的问题的部分原因在于,答案的答案不只一种,而且根据候选人选择的方式,您可以了解他们的编码方式。可以看到一些很好的例子 这里 如果堆栈溢出有10K代表。

至于99%的统计数据,请检查该数字的来源。这可能是有偏见的。如果它是基于入门级程序员为第一份工作进行面试的,那么是的,我可以看到这是可能的,特别是如果大多数应聘者是直接从大学毕业的。我实际上可以想到有人可能会写出if条件来解决该问题的条件为100。

3
Rachel

我希望FizzBu​​zz有两种类型的人可以帮助我避免。

  1. 没有编程知识或没有相关编程知识的机会。通常,您可以从CV中识别出这些信息,但并非总是如此,并且给他们简单的编程任务是一种很好的方法,可以清楚地表明它们不是程序员。
  2. Java学校的毕业生,已经完成了编程课程或学位,但实际上并不知道如何编程。这些人可能很难被过滤掉,因为他们可以谈论理论,但他们没有实践技能。在他们面前放一个简单的问题并寻求解决方案和对解决方案的解释,是观察Petra Java)和Paula Bean之间的区别的好方法。

无论哪种情况,我都不在乎完美的实现。您需要对申请开发人员的人员进行的测试是他们完全可以编程。

就是说,由于某些原因,我可能不会为那个特定的测试而烦恼。首先,它是众所周知的,并且以上任何一个小组都将很快尝试它。其次,我更喜欢使用 Steve Yegge的电话屏幕问题 来筛选非程序员,直到我们将它们带入为止。如果有人意识到了这些问题,那意味着他们已经阅读了Steve Yegge的博客,该博客将建议我,他们是认真对待自己的职业并肯定需要接受采访的前1%的开发人员。同样,如果有人在这里或SO)上有不错的代表,我将倾向于采访他们。

3
glenatron

很难相信开发人员无法编写FizzBu​​zz的代码,直到您看到“九牛一毛”才能将其工作复制并粘贴到一起,并自觉地尝试不编写代码。当我听到一位资深的开发人员教C#开发人员(具有3年的经验)如何使用字典时,我简直不敢相信。接口?设计模式?标准输出?亚尼?我的领导从未听说过YAGNI!这些人不知道的东西真是太神奇了。

我现在相信了。我也认为有太多开发人员干得不够。

3
kirk.burleson

我发现有这样一种说法,即99%的程序员无法编程或解决简单的编码测试都被夸大了。在FizzBu​​zz测试的情况下,您可能以前曾遇到过此问题,并且可以通过取模运算符轻松地解决它,或者您以前从未遇到过,并会为此感到困惑。它不会告诉面试官您的编程技能。

我认为许多程序员的问题显然在面试中留下不好的印象是技术面试方法的本质。面试官希望申请人记住并立即复制语言语法,数据结构,硬件体系结构,设计模式等的详细信息和计算复杂性。计算机科学/软件工程领域广阔。试图记住一切都是不可能且不明智的。

在现实世界中,关键是能够理解分配给您的编程/设计问题,并知道从何处查找信息(您的IDE,手册页,书籍,google等)如何解决您的问题。但是,这是面试官从未测试过的东西。

2
mark

我仍然是一个比较初级的程序员(我已经花了大约2年的时间编写代码,并且在此之前以某种专业的身份作为大约2人的副责任进行编码),所以请使用足够的盐。

我在为大型企业项目的编码员做初稿时有一定的经验(我们有点知道该项目注定要失败,但是,他们还是想付钱)。作为该公司唯一的招聘程序员,我承担了审查简历和筛选申请人的任务。

这是一个政府项目,所以 也许 可能没有吸引最有才华的申请人,但是我没有收到任何人的申请,这个人实际上有显示代码的github帐户,也没有任何有投资组合的人,所以我将fizzbuzz(确切地说是确切的问题)作为第一遍看起来像他们可能能够编程的任何人。

我以伪道歉为开头,说我知道这很愚蠢,但我只想查看任何有效的代码,如果他们希望他们可以发送另一个具有相同或更大价值的示例,或者实际上是任何东西,但这些嗡嗡声就足够了。

结果是:我没有收到一个真正正确的答案,考虑到互联网上答案的数量,这令人震惊。没有人甚至不愿抄袭。我们只需要雇用以前在项目失败的先前迭代中工作过的人员。

经过最初的震惊和对政府软件/合同搞砸的失望之后,我对自己的技能感觉好多了,那么小的胜利呢?

编辑:不正确,我不是说一个错误(即我要求通过100而不是99)或其他一些无害的错误,这很容易解决。我的意思是没有功能,或者不会运行/编译/等,或者清楚地表明问题只是未被阅读和理解,而且很大一部分撤回了应用程序,而没有人发送其他代码。

0
BSpiros