Charles Treichler作者

编程面试问题真的越难越好吗?No!

为了节约成本,避免招到不想要的程序员,很多公司倾向于把面试问题设得比较难。但这样一来,很多优秀的程序员也会被淘汰。究竟什么难度的问题比较合适呢?本文作者通过数据调查给出了结论……

编程面试的问题其实没必要那么难,原因不仅是因为这种面试会给人带来巨大的压力。我们的数据表明,难度较大的编程面试问题在预测最终工作能力方面还不如简单的问题。

时限压力会加大编程难度。面试期间尤其如此。在正常环境下看似简单的编程问题移到面试厅明亮的灯光下就成了棘手的难题。面试期间,你的思想会被压力荷尔蒙笼罩(无力的是,对于一个艰难的编程问题,战斗或逃跑都不是有效的应对方案)。你几乎可以感觉到这些问题被设计得异常困难。其实我觉得这不只是感觉而已。

面试问题设计刁钻。由于雇佣一名糟糕工程师的成本远远高于拒绝一名好的工程师,公司往往倾向于设立很高的门槛,所以面试问题就会很难。从直觉上来看,这么做很合理,因为问题越难,筛选程序就越严格。但是直觉并不是一个很好的指导。数据表明,难度较大的问题在预测候选人工作能力方面还不如难度较小的问题。

面试问题太难

比较难的问题的确可以筛掉那些不合格的工程师,但也会剔除一些优秀的人选。而简单的问题虽然会在一定程度上避免筛掉优秀人才,但也会让很多不合格的工程师过关。权衡这两者是你在选择最佳难度水平的面试问题时面临的核心问题。而为了防止不合格的面试者过关,很多公司选择了天平的另一端,即选择偏难的问题。

然而,候选人是否正确回答了问题并不是面试中唯一的参考信号。你也可以评估整个过程,例如,观察他们花了多长时间来完成,他们的代码有多干净,他们在寻找解决方案的过程中花费了多大的精力。我们的分析表明,第二个信号源(过程)和第一个信号源(答案的正确性)一样具有预测性。

但这里还有一个额外的权衡。偏重过程信号的问题比偏重答案正确性信号的问题要容易得多。当你将过程归结为候选人在寻找解决方案时的努力程度(过程中与问题难度最直接相关的方面)时,原因就变得很清楚了。如果一个问题很难解决,那所有的候选人都会努力去解决这个问题(即使是那些最终给出正确答案的人),因此努力程度没有什么差别。

相反,大多数候选人都能够答对那些偏重过程信号的简单问题,因此不能提供什么关于正确性的信号。最佳难度的问题应该能够平衡过程和正确性信号,以从中提取最大的信号。

我们面试了数千个工程师,然后根据多个维度对他们的回答进行打分,包括面试过程和答案的正确性,然后将这些分数与后面的表现进行比较。回归分析(查看过程和正确性信号)得出的数据表明,大部分预测性问题实际上比我们预想的要简单(也比很多公司设定的简单)。

较难的问题最终筛掉了很多合格的候选人,因此并不适合。所以如果你想让招聘过程更准确高效,应该问一些更简单的问题。

这并不是说你要降低门槛让更多人通过。降低问题难度不等于降低面试难度。问题的难易程度和你的决策门槛是相互独立的。即使问题简单,你也可以设定非常严格的雇佣程序并严格地评估求职者。我们发现,简单的问题可以提供更多信号。但如何利用这些信号取决于你。

简单的面试问题也会降低压力,这是一个非常重要的好处。压力会影响面试者的正常发挥。面试者感觉舒适才会发挥出自己的最佳水平,这也能提高面试的预测水准。面试官往往会低估压力的影响,而高估自己的能力。如果你是问问题的那个人,你就很容易会忘记 30-60 分钟之内编出大量真正的代码有多么困难。为了解决这个问题,我们在 Triplebyte 网站上制定了一条规则。规则表明,面试官必须给面试者三倍于他们认为解决问题所需的时间来回答问题。通常这才是正确的时间限制。

面试问题太短

降低问题的难度还有另外一个好处,即你可以在面试中加入更多的内容。换句话说,你可以设计多个较长的、相对简单但难度逐步增加的问题,这样你便可以通过多方面的综合信息来决定录取与否。相比于短而难的问题,多而易的问题更能预测出候选人的水平。原因有二:

一,较长的问题往往更能反映现实生活中的问题。程序设计通常要在较长时间内使用相对较大的代码库,面试中使用较长的问题显然可以更好地接近这样一种现实。

二,较长的问题可以让你在候选人遇到困难时给予提示。我认为这一点至关重要,因为即使是大神级的工程师在编码时也有可能在某个问题上挂掉。较长的面试题可以让候选人有机会从错误中走出来,并展示出他们本有的技能。面试中的某一个失误不应该毁掉整个面试。此外,额外的信息也可以减缓面试的压力,从而得到更准确的结果。

结论

面试问题太难反而会使公司陷入可能的恶性循环。一开始他们提出的问题太难、太短,这将导致他们得到的反馈信息有较大的噪声,从而做出次优的招聘决策;而另一方面,当他们发现招聘的人并不那么优秀时,又会反过来通过更加严格的方式(通常意味着更难的问题)来「纠正」他们的错误,但这只会让他们的面试更加的不准确,如此往复。结果便是公司和候选人两两受害——公司错失人才,候选人错失工作机会;而且双方还都饱受压力。

因此,我希望面试人员能够接受这个发现。这样不仅可以使他们的工作变得轻松,而且更加准确。与不恰当的短期困难相比,提出一些简单的、多步骤的问题所花费时间要少很多,而且更能检测候选人处理日常工作的能力。

所以在此提一个小建议:如果你真的想让面试更加准确,不妨从简单的编程问题开始。这并不是要降低标准,而是为了获取更多信息,以聘请到合适的人。


原文链接:https://triplebyte.com/blog/interview-questions-are-too-hard-and-too-short

入门面试编程
2
相关数据
回归分析技术

回归分析是一种用于估计变量之间的关系(当一个自变量变化而其它变量固定时,因变量会如何变化)的统计过程,在预测任务中有广泛的应用。回归分析模型有不同的种类,其中最流行的是线性回归和 逻辑回归(Logistic Regression)。另外还有多变量回归、泊松回归、逐步回归、脊回归(Ridge Regression)、套索回归(Lasso Regression)和多项式回归等等。随机梯度下降(SGD)就是一种起源于回归分析的常用方法,可用于控制复杂度。

推荐文章
暂无评论
暂无评论~