(给
伯乐在线
加星标,看经典文章
)
原创整理:伯乐在线/伯小乐
【导读】:咦,怎么是
招不到
程序员?标题没写错么?嗯,没写错,
国外程序员 Nikita 最近写了一篇文章《How NOT to hire a software engineer》,吐槽大公司在招程序员的一些不合理的做法。
一起来看看他是从哪些方面吐槽的?吐槽的是否有道理?
----
我不是大公司的招聘专家,但我是一个有 14 年工作经验的程序员,对小公司招聘还是有较多经验和一点常识。
早在 2013 年,我为 AboutEcho 组织了一次非常成功的招聘活动,最终招聘了 9 名高级工程师。
这让我有信心来聊聊如今互联网巨头招程序员的做法。
(插图来自 Yulia Prokopova)
1、不要面试时追求最佳解决方案
当求职者到达面试现场时,面试官给出一个问题,并希望在 2 分钟内得到解决。如果花的时间更长,他们就会开始担心,至少会要求你做点什么。
我能理解,毕竟他们只有 45 分钟,他们有很多事情想和求职者一起经历。
我不能理解的是,面试官是根据求职者在 2 分钟内想出的解决方案的质量来评判。因为那不是人类创造力的工作方式。想出很多点子很容易,但期望最佳点子总是第一个出来就很奇怪了。即使是天才,也无法在几分钟给出世界上的最佳解决答案。
创造力是评估和过滤你所想到的想法的能力。如果你们真的对此感兴趣,为什么不让求职者来比较和评估多种解决方案呢?然后判断求职者是否能够评估解决方案的性能?求职者是否能清楚看到所有的优点和缺点?
如果要求在几分钟内想出最好的解决方案,你们测试的是运气,仅此而已。你们是在雇佣幸运的员工吗?还是招能力的员工?
2、不要在面试中问谜题
如何检查链表是否有循环?一个 N 维的盒子能装进另一个 N 维的盒子里吗?你能在没有第三个变量的情况下交换两个变量吗?如何找到两艘行进中的船之间最短的距离?
别误会我的意思,这些谜题很有趣,讨论起来很有趣,解决方法也很有见地。我以前还是个孩子的时候,我就喜欢看《Mathematical Recreations and Essays》。
然而,不管谜题有多有趣,它们只是一些轶事。谜题的性质是,你要么知道答案,要么不知道。它没有告诉你其他任何事情。它与未来的表现无关,与聪明、能力或其他任何事情无关。知道一个特定的答案,并不意味着你可以采取通用和可预测的方式去解决实际问题。它告诉你的唯一一件事是,当某人与他人分享一个解决方案时,那这个人已经有了一种解决方案。不多也不少。就够了。
(蜡烛烧断绳子之前,你会如何自救?)
3、接受其他选择/解决方案
这在某种程度上是意料之中的,但大公司似乎仍然在这方面失败了。如果求职者提出了另一种解决方案,这是面试官学到一些东西的机会。如果提出的解决方案不可能实现,或者不太好,这也是一个深入讨论的好机会。
尽管如此,我还是因为曾经提出过一个同样复杂的替代解决方案而被 pass 了(而且我背负着一场关于“解决问题的真正方法”的讲座)。另一次面试时我引入了一个特定的解决方案,面试官急迫地忽视我所有考虑到的,只想讨论他认定的解决方案,后来面试官对我的反馈是“没啥印象”。
没有人知道所有的事情。放开心态,倾听他人,多思考。是的,即使你在面试他人。
4、容忍瑕疵
由于某种原因,单字节溢出(Off-By-One)错误被广泛认为是 CS 中最难的问题之一,几乎每个人都会犯此类错误。错误是程序员生活的一部分,并不是你可以摆脱掉的。优秀的程序员知道该怎么做。程序员的素质,并不取决于他/ TA 犯的错误有多少。
现在,如果你只选择那些在面试中没有出错的人,你就能得到一群总是能写出完美代码的程序员。你只是不知道当他们不可避免地犯错误时,他们会怎么做。
所以犯错其实是件好事,因为你会了解到求职者是如何消除错误的。不要只看到错误,而是要看求职者是如何处理错误的:
-
简单的代码
-
分治
-
自检
-
不变量
-
断言
-
编译和运行
-
测试
噢,不好意思,最后两项。我都忘了你们在面试时不会让求职者运行程序的。那你们还指望什么呢?