程序员

传统的技术面试对所有人来说都很糟糕,既不利于公司评估应聘者,也不利于应聘者评估公司,不仅浪费时间,还对双方产生了压力。几乎所有面试过的人都同意这些。可他们依旧继续这样面试。

没有什么行业像软件工程一样如此公开地敌视其从业者……我们让应聘者在压力很大的面试环境下在白板上现场编程,只因为这是我们这行的惯例……我们实在不该在工程师紧缺的时候错失如此多的人才。

Homebrew 的作者 Max Howell 发了一条推,说因为没法在白板上手写翻转二叉树的算法,没通过Google面试。 

我们曾经画过的这期漫画,描写了不少面试失败的奇葩案例。没想到在Google又出现了。有人说算法很重要,有人说算法不重要也能写程序。在不同的背景下,这两种完全相反的观点有可能都是正确的。大部分公司招聘工程师都会有算法面试,但这种面试并不是考验如何背诵算法实现,这对于刚应付过一堆考试的应届毕业生实在太容易了,对于工作10年的资深工程师反而不那么简单。算法面试真正目的,并不是要一个标准答案,而是让面试者和面试官一起聊聊一个相对复杂问题的解决方案。这个过程会有很多考察的点,在技术和思考模式之外,甚至可以考察性格和表达能力,或者合作精神。 

可惜大部分公司的面试中,算法面试当然是有的,可是只是冷冰冰的做一道题,面对的是HR。他们当然不懂实现过程,就看一下能不能做出来,做出来结果跟标准答案是不是一样。漫画里面提到的,翻转一个单向链表,标准答案是递归,辛苦实现了迭代算法的面试者反而被淘汰,这种事情是真实发生过的。 

当然了,另外一种极端看法是根本没必要考算法,因为工作中压根用不到。事实上,没有什么程序不用到算法,只不过算法常常被封装到库里面,程序员并不去关心实现而已。(如果碰上一个每个算法都要自己实现的家伙,你要小心了,这家伙很可能让项目变得一团糟)很多公司会用讨论一个更具体的问题方式来替代算法面试,效果也不错。但没必要关心算法,甚至鄙视精于算法的程序员,这种观点显然是错的。 

算法面试这种面试形式,和算法本身一样,要明白为什么这样做,这样做的意义是什么,才有可能正确得使用它。但不幸的是,我认为HR部门通常不具备这个能力,需要有经验的工程师才能有效果。 

当然,如果公司使用算法面试的目的是筛掉一些候选者,降低面试成本,这就是另外一回事了。

via: 西乔 神秘的程序员们