当涉及“面试测试”问题时,FizzBuzz的主题经常浮出水面。也有关于它的编码恐怖帖子。
现在,如果您不愿意阅读此类网站,那么可能不太会发现FizzBuzz无关紧要的程序员群体。
但是,确实有99%的程序员会为此奋斗吗?
真?
有什么证据可以证明这一点?
一些现实生活中的例子对于回答这个问题会很有帮助。
当涉及“面试测试”问题时,FizzBuzz的主题经常浮出水面。也有关于它的编码恐怖帖子。
现在,如果您不愿意阅读此类网站,那么可能不太会发现FizzBuzz无关紧要的程序员群体。
但是,确实有99%的程序员会为此奋斗吗?
真?
有什么证据可以证明这一点?
一些现实生活中的例子对于回答这个问题会很有帮助。
Answers:
99%?否。有很大百分比吗?是。从我与人面谈的直接经验中,我可以证明这一点。对于您来说,这似乎微不足道,但是编程领域中有很多人或多或少地伪造了多年,并申请了非入门级职位,但没有通过。
即使您可以轻松解决问题,但是您被要求执行这样一项艰巨的任务也会给我带来很大的麻烦。与团队合作意味着有时不得不做一些您可能不喜欢但有必要的事情。如果马上采取行动,那么在我们甚至开始合作之前,您认为最好尝试坚持自己的特殊地位,超越我已要求您做的事情,这将成为反对您的标志。
我并不一定在乎您的解决方案有多优雅(尽管那会很好),但是看到您在白板上刺了一下它,并说了一下通过它的方式,就表明我至少愿意刺它一个。 。如果您感到愤慨,并说出类似“我是一个问题解决者,而不是代码猴子”的话。那么您将被钉住。
我曾经让面试者坦率地拒绝甚至开始尝试它。只是简单地拒绝。不,嗯。不会的。我再问一两个礼貌的问题,感谢他们的宝贵时间,并结束了采访。
我说这是作为经理和开发人员。
我认为99%申请工作(但没有得到工作)的程序员可能会为此感到挣扎。但并不是有99%的程序员能够高效地工作。
这就是我们现代求职过程的本质。许多申请者不合格。
“编码恐怖”的帖子也说明了我们当今教授计算机科学的方式。在过去(特别是在麻省理工学院),您需要学习Lisp之类的东西,这几乎需要您掌握递归之类的概念。
如今,人们开始学习Java,因为Java在工业中得到了广泛的使用,并且重点已转移到语法而不是深入的编程思想上。我不喜欢Java。实际上,我认为这是一种理想的第一语言。但是我还没有看到我的教练用它来教深层编程原理。
我讨厌这样说,但是
我看到编程问题未能得到解答的主要原因是提问者而不是回答者的问题。
我可以清楚地记得在一次采访中,有人问我如何创建一种可以在恒定时间内运行的特定集合搜索算法(无论集合中有多少项,查找次数都相同)。在放弃之前,我摸索了20分钟。那时,这位才华横溢的采访开始证明答案是在几乎恒定的时间内运行的,但仍不是恒定的时间。有点像说“给我一个零的答案”,然后接受0.1。
简而言之,我见过太多的情况,有人在面试时提出的问题不符合以下条件:
认真地说(1),我认为要求人们在面试的口头部分编写代码是愚蠢的。
认真地讲(2),我认为在不要求他们编写代码的情况下采访人们也是愚蠢的。
认真地(3),您应该给他们“作业”,要求他们带上代码示例,或者给他们笔记本电脑和几个问题以及安静的办公室来处理它们。然后,当他们在处理它们时,不要理会它们。我通常采用后一种方法,因为它限制了他们获得外界帮助(作弊)的能力,因此我可以设定时间。
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;
-恒定时间:)
您需要做的就是在FizzBuzz上搜索。上有大量的博客文章。一般来说,博客作者说:“我告诉人们用[某种语言]编写它,这是他们犯的各种错误:”然后列出了一些陷阱。有趣的地方始于注释,人们说“哈!这在[某种其他语言]中是微不足道的,您所要做的就是:”,然后是代码。下一条评论总是会发现第一个错误。似乎有些优秀的开发人员第一次用任何语言都无法做到这一点。一些错误:
在招聘时,我要求人们在白板上为我编码,没有什么比这复杂的了(我知道,您并不认为这很复杂),而且许多应聘者完全失败了。我的意思是喜欢写vb样式的If,Then,End If,但是也要放括号(我想只是为了安全起见)或编写C#(首先问C#?),但在任何地方都没有半角冒号。不要从逻辑错误着手!
我读过您提到的《编码恐惧》一文,我的看法是Jeff是对的……但是他最后一次接受采访是什么时候?
面试时,通常压力很大,常常需要回答一些理论上的问题(没有才智,没有Google,没有讨人喜欢的东西,……只是压力引起的记忆困扰)。在测试中也是如此。压力对您没有帮助。
我注意到,知道某人是否适合这个职位的唯一方法是与他一起工作一段时间...从100名(可能更多)中雇用的最后10名员工中,有多少才是真正的好人聘请???
雇主应聘用问题解决者,而不是了解模数的代码猴子。
您无法“暂时测试所有申请人”,因此需要对他们进行面试。这就是为什么我将我的问题集中于此(解决问题)并进行过去的参考检查的原因。
我的观点是,FizzBuzz对于正在寻找开发商以维持其增长的公司来说是危险的。
最近,我受命采访了50多位程序员担任高级职位,他们将主要使用PHP。
我在筛查考试中扔了fizzbuzz问题,主要是为了娱乐自己,因为我想要10个好问题,而只有9个。当时,我的目的是向人们表明,即使是面试问题,我们也可以从中获得乐趣。
80%的申请人解决了问题,但未使用模数运算符。
15%的申请人无法解决问题。
5%的申请人使用模运算符解决了该问题。
尽管我的抽样调查非常有限(来自一个国家的50名申请人),但我可以告诉您:
他们中有95%的人拥有CS或更高的CS课程(这里的大学通过努力使CS的声音更加壮观来进行竞争)。
我真的很惊讶。好吧,吓坏了..但是很惊讶。我不认为我会接近重现结果,因为该问题已变得如此普遍。这表明我有5%的申请人可能不是超级程序员,但至少他们阅读了与编程相关的博客。
x - (x/y)*y
?
在上一轮招聘中,我有3名建筑工人,其中0,我重复0,编程教育或经验应聘软件开发人员职位。* 这就是桶的底部。如果您假设技能呈正态分布,那么您可以看到平均技能水平将如何降低,甚至“高于平均水平”(在申请人中间)仍然相对较差。
现在,如果您仅对那些似乎具有某种编程能力的申请人进行嗡嗡嗡嗡声,您会发现您现在拥有:
另外,我看到的一些“ fizzbuzz”问题是特定于域的。您可以使用一种语言/框架x进行逐步开发多年(因此z已有x年的工作经验),而不必涉及其中的某些部分(例如,库开发人员对UI组件开发了解不多)。
同样,如今,许多开发人员都进行维护开发,因此他们的架构/设计技能在某些方面可能很弱。
现在,我不确定99%是否正确,但IME仍然很高。至少在80%的范围内。
*不,我们没有致电,甚至没有再看这些应用程序。
对真的。可能不是99%,但仍然很高。我曾经采访过计算机科学专业的学生,以进行实习和全职工作。我会在一所大学采访约25名学生。我们被告知不要问同样的问题,因为学生们在说话。我很快就知道这没关系,因为在25个可以回答我的第一个问题的学生中,我只会得到3或4个学生。“写strcmp”
我要求他们编写一个比较两个字符串的函数。也许使用该功能对字典中的单词进行排序。您会惊讶于不懂如何比较两个单词的学生人数,更不用说知道如何编写函数了。其中一些学生声称他们在CSc中获得了全部A。
编程是非常困难的事情。许多人喜欢认为他们知道如何编程,但是他们不知道。
一些想法:
如果他们的程序有一些错误,但我显然不会反对,但是他们显然有正确的想法。调试是编程的一部分。
我感到可悲的是,如此多的人正在申请他们不知道自己做不到的工作。在我看来就像经济问题。
向人们提出不好的问题确实很容易,唯一的“正确”答案就是面试官会给出的答案。
该测试很好地涵盖了我想了解的有关可能雇用的程序员的几件事:
为了详细说明最后一点,对于嘶嘶声有很多解决方案。您是否追求可读性?速度?轻浮?您是否尝试快速完成程序编写?程序员如何解决这个简单的问题非常有说服力。如果程序员不能选择一种解决方案并将其彻底解决,那么这将告诉您这个人在实际任务中的表现如何?
我希望FizzBuzz有两种类型的人可以帮助我避免。
无论哪种情况,我都不在乎完美的实现。您需要对申请开发人员的人员进行的测试是,他们完全可以编程。
就是说,由于某些原因,我可能不会为那个特定的测试而烦恼。首先,它是众所周知的,并且以上任何一个小组都将很快尝试它。其次,我更喜欢使用Steve Yegge的电话屏幕问题来筛选非程序员,然后再带他们进入。如果有人认识到这些问题,那意味着他们已经阅读了Steve Yegge的博客,这对我来说意味着他们在认真对待自己的职业并肯定需要接受采访的前1%的开发人员。同样,如果有人在这里或其他方面有不错的代表,我将倾向于采访他们。
我认为这是一个如此受欢迎的问题的部分原因是,答案的答案不只一种,而且根据候选人选择的方式,可以为您提供有关其编码方式的见解。如果您在Stack Overflow上有10K代表,可以在这里看到一些很好的例子。
至于99%的统计数据,请检查该数字的来源。这可能是有偏见的。如果它是基于入门级程序员为他们的第一份工作进行面试的,那么是的,我可以看到这是可能的,尤其是如果他们的大多数候选人都直接从大学毕业。我实际上可以想到有人可能会写出if条件作为该问题的解决方案的100条件。
我发现有这样一种说法:99%的程序员无法编程或解决简单的编码测试都被夸大了。在FizzBuzz测试的情况下,您可能以前曾遇到过此问题并可以通过取模运算符轻松地解决它,或者您以前从未遇到过此问题并会为此而苦苦挣扎。它不会告诉面试官您的编程技能。
我认为许多程序员的问题显然在面试中留下不好的印象是技术面试方法的本质。面试官希望申请人记住并立即复制语言语法,数据结构,硬件体系结构,设计模式等的详细信息和计算复杂性。计算机科学/软件工程领域广阔。试图记住一切都是不可能且不明智的。
在现实世界中,关键是能够理解分配给您的编程/设计问题,并知道从何处查找信息(您的IDE,手册页,书籍,google等)如何解决您的问题。但是,这是面试官从未测试过的东西。
我仍然是一个比较初级的程序员(我已经花了大约2年的时间编写代码,并且在此之前以某种专业的身份作为大约2人的副责任进行编码),所以请使用足够的盐。
我在为大型企业项目的编码员做初稿时有一定的经验(我们有点知道该项目注定要失败,但是,他们还是想付钱)。作为该公司唯一的招聘程序员,我承担了审查简历和筛选申请人的任务。
这是一个政府项目,所以它也许可能没有吸引最有才华的申请者,但我没有从一个GitHub的帐户的任何人,实际上已经表明代码收到一个应用程序,也没有任何人谁了投资组合,所以我用fizzbuzz(从字面上看是确切的问题),这是对任何看起来可能会编程的人的第一遍。
我以伪道歉为开头,说我知道这很愚蠢,但我只想查看任何有效的代码,如果他们希望他们可以发送另一个具有相同或更大价值的示例,或者实际上是任何东西,但这些嗡嗡声就足够了。
结果是:我没有收到一个真正正确的答案,考虑到互联网上答案的数量,这令人震惊。没有人甚至不愿抄袭。我们只需要雇用以前在项目失败的先前迭代中工作过的人员。
在最初的震惊和对政府软件/合同的混乱程度感到失望之后,我对自己的技能感觉好多了,那么小的胜利呢?
编辑:不正确,我不是说出现一次性错误(即我要求通过100而不是99)或其他一些无害的错误,这很容易解决。我的意思是没有功能,或者不会运行/编译/等,或者清楚地表明问题只是未被阅读和理解,而且很大一部分撤回了应用程序,而没有人发送其他代码。