像我一样,作者对每个编程工作的200名申请人中的199名根本无法编写代码感到困扰。我再说一遍:他们无法编写任何代码。
他指的作者是伊姆兰(Imran),他显然拒绝了许多无法编写简单程序的程序员:
经过一番尝试和错误后,我发现努力编写代码的人不仅会遇到大问题甚至小问题(即编写链表的实现)。他们在小问题上挣扎。
因此,我着手开发可以识别这种开发人员的问题,并提出了我称之为" FizzBuzz问题"的一类问题。以孩子们经常在英国学校玩(或玩)的游戏而命名。以下是一个Fizz-Buzz问题的示例:
编写一个程序,打印从1到100的数字。但是要打印三个的倍数,请使用" Fizz"。而不是数字,并以5的倍数打印" Buzz"。对于同时为三和五的倍数的数字,请打印" FizzBuzz"。
大多数优秀的程序员应该能够在几分钟内在纸上写出一个可以完成此任务的程序。想知道一些可怕的事吗?大多数计算机科学专业的毕业生不能。我还看到自夸的高级程序员花了10到15分钟以上的时间来编写解决方案。
令人惊讶的是,即使是拥有硕士学位的申请人也占了很大一部分。当被要求执行基本的编程任务时,计算机科学专业的博士学位和博士学位在面试时会失败。例如,我亲自采访了无法回答问题的毕业生,并写出了一个从1到10的循环。或十六进制的F之后的数字是多少?不那么琐碎,我采访了许多无法使用递归来解决实际问题的候选人。这些是基本技能;任何缺少它们的人可能都没有做太多的编程。
我可以代表必须面试潜在新员工的软件工程师发言,我可以肯定地说,我们厌倦了与无法从纸袋编程的候选人交谈。如果您可以成功地在简历上用每种语言编写一个从1到10的循环,可以在没有计算器的情况下进行简单的算术,并且可以使用递归来解决实际问题,那么您已经领先了!
在Reginald,Dan和Imran之间,我开始有点担心。我非常愿意在职业生涯初期削减刚开发的软件开发人员的工作量。每个人都必须从某个地方开始。但是令我感到震惊和震惊的是,任何所谓的程序员都会在无法编写最简单的程序的情况下申请一份工作。对于任何以软件为生的人来说,这都是耳光。
可以编程的人和不能编程的人之间的鸿沟是众所周知的。我以为任何人申请工作都是因为程序员已经跨越了这个鸿沟。显然,这不是一个合理的假设。显然,需要进行FizzBuzz样式筛选,以防止采访者浪费时间采访不能编程的程序员。
唯恐您认为FizzBuzz测试太容易了-盲目地,故意地很容易-评论Imran的评论者指出了它的功效:
我讨厌面试官认为FizzBuzz测试太简单了-根据我的经验,确实令人惊讶的是有多少候选人没有能力完成最简单的编程任务。
开始面试程序员而不先看他们的代码也许是愚蠢的。在Vertigo,我们甚至在进入电话面试阶段之前都需要一个代码示例。我们的现场采访包括一个小型编码练习。请注意,这没什么困难,只需一个基本练习即可完成一个小时左右的构建小型应用程序的动作。尽管已经出现了一两个明显的熄火现象,但是在大多数情况下,这种策略对我们来说效果很好。它使我们可以在面试中专注于实际的软件工程,而不必诉诸繁琐的难题。
可耻的是,您必须进行大量的预筛选才能拥有采访实际可以进行编程的程序员的奢华。如果不是那么令人沮丧,那真是可笑。我不喜欢认证,但是这确实使我感到奇怪,史蒂夫·麦康奈尔(Steve McConnell)是否一直致力于创建真正的软件工程专业。