通过阅读代码面试程序员?


在招聘开发人员时,我们会寻找很多东西,但多年来我发现原始编码能力很容易成为最重要的品质。我可以快速训练一个人掌握某个领域的知识,但我从未见过原始的编码能力来自于个人对广泛而深入的实践的承诺之外的任何东西。

面试老套路
一个典型的编码面试是这样开始的:“编写一个反转字符串中单词字母顺序的函数。” 然后在接下来的半小时或更长时间内,候选人在白板上划出一些东西(如果幸运的话,也可以是共享的文本文件)。由于多种原因,这种方法很弱:

  • 同样的问题会被传递,候选人通常会非常努力地练习以记住答案。你是在测试他们的技能还是他们记忆答案的能力?
  • 这些问题通常是“技巧”问题,需要某种深刻的洞察力才能提出 O(log(n)) 解决方案。在面试的时间范围内,即使是最聪明的候选人,也几乎不会有真正的洞察力。
  • 它使权力平衡有利于面试官。谁喜欢在将决定你未来几年职业前景的法官面前笨拙地编写代码?
  • 在白板甚至文本文档上编写代码是不自然且缓慢的。没有人在白板或记事本上草绘代码作为日常工作的一部分。人们真正做的是在 IDE 中草绘代码,并附带大量的 Google。

更好的方法
因此,与其编写代码,不如考虑让候选人阅读现有代码并讨论它的作用和工作原理。这提供了一些强大的优势:

  1. 阅读探究最基本的技能。阅读代码可能是开发人员工作的 95%。无论开发人员是在编写新代码、修复错误还是创建文档,他们都在不断地阅读。程序员需要具备哪些能力才能很好地阅读代码?有两个重要的:1) 记住变量和堆栈位置的能力;2) 一旦理解了一段代码,就能够概括它。我可以记住面试编码问题,但我无法为陷入一些随机代码做好准备(除了一直在编写和阅读代码)。伪造这些技能基本上是不可能的。
  2. 读代码比写代码更有效率。候选人可以在阅读的前五分钟告诉你很多关于他们的编程技能,因为阅读很容易比写作快一个数量级。在阅读采访中,我可以跳过大约六个基本主题,而需要同一个人编写代码来反转字符串中的字符。
  3. 与编写代码相比,阅读使候选人更轻松。作为一名面试官,压力是你的敌人,因为它会提高肾上腺素,从而降低智商数点,导致你错过优秀的候选人。候选人更喜欢阅读,部分原因是因为不必编写代码让他们松了一口气,但也因为面试官可以轻松调整阅读问题以适应候选人的技能。(如果候选人愿意,这种调整可以包括编写代码。)

Reddit网友讨论
让参加面试的候选人进行简短的代码审查:从糟糕的实践到代码语法,我们在代码中可以故意填满了错误。它有助于促进对话,并且意味着他们没有带回家的代码任务。

比如我在代码中引入的问题包括

  1. 打开文件但不关闭它们
  2. 风格不一致
  3. 初始化语法的错误(python)
  4. 文件中的明文密码。
  5. 没有评论或测试
  6. 使用键值对列表并每次搜索它们以更新值。
  7. 过于复杂的 OO
  8. 非常有问题的解决问题的方法 - 读取 json,修改它并将其写回原处。

这个问题有些让人难以置信,所以我把它作为一个实习生的代码审查,你会发现 1-4 是初级的,6 是中级的,他们通常会选择 5。大四通常得到 7 和主要简化代码,而真正优秀的工程师会更深入地询问问题,我们会为处理大量操作复杂性的问题提出不同的解决方案。

你可以这样做:

  • 第一次面试:代码审查,提供改进建议,可能会创建一些文档。基本上让候选人理解有问题的代码。
  • 第二次面试:为代码编写一些实际的单元测试。这测试了一些基本的编码能力。大概提供一些简单的单元测试框架。
  • 第三次面试:重构代码,使其更易于扩展和理解。
  • 第 4 次面试:在代码中添加一些新功能。

确保候选人知道每次面试都将建立在下一次面试的基础上,目的是创建比开始时更高质量的代码。