快下班的时候,楼道间偶遇刚结束面试 debrief 的 team lead, 他半开玩笑的对小编说,”前阵你电面放进来的 candidate,今天 onsite 可是全灭啊(所有人都给 no hire).” 有点囧,记得当时小伙子在电面中题目做的不错,交流能力也可以,怎么一到 onsite 挂的如此惨烈。
一个刷题时代的困局。
刷题的历史
大概是五六年前,彼时的互联网还没有所谓的”泡沫“说。Facebook 作为 Google 的挑战者,在社交领域玩的风生水起,颇有点像目前的 Uber, 一半鲜花一半口水。金钱、上市的刺激,伴随着金融危机的阴影散去,互联网的新老势力同时发力招聘。看到了机会,有心的同学们开始了刷题之旅。
第一阶段,刷书。比如很有名的 , 甚至国内的微软朋友们出的<编程之美>, 认真做好一两本书,很多朋友就敢跑出去面试,多少会有点收获。
第二阶段,Leetcode 的横空出世。Leetcode 提供的 Online Judge 的模式非常适合准备期的训练,每当看到那个绿色的 ”Success” label 出现时,小编心里流过的不仅是开心,还有种“在努力”的自我感动。这一阶段,刷好 Leetcode 基本上确保有很理想的 offer.
第三阶段,刷题辅导班、困局。Leetcode 的副作用慢慢显现,很多公司尝试屏蔽掉 Leetcode 的原题,加上刷题带来的面试者整体实力的水涨船高,刷好题就能拿大 offer 的日子一去不返。在之后,各类刷题辅导班雨后春笋般出现,核心都是在 Leetcode 的模式上做填鸭式的辅导。困局解决么?小编私以为,只要核心还是刷题,那么这局就没解。
症状
回到本文开头的例子,小编在电面的时候出了一道 Leetcode 的原题,小伙子做的虽然磕磕绊绊,但是整体思路一直正确,最后在时间内顺利完成。虽然给了通过,但是小编心里其实并没有被完全 convince,后来看了看 onsite interviews 的反馈,也验证了当时的很多 concern:
做题时交流很少,做过的题目可以大差不差的做出来,但是碰到变种题目,规定时间内甚至无法给出一个粗糙的回答;
计算机的基础知识非常薄弱,做题中偶尔涉及一些 OS, Threading, Network, 某些类库的底层实现,往往一头雾水;
回答设计类的问题很糟糕,无论是 OO Design 还是系统设计。知识面过于狭窄,缺乏实践经验,这都是命门;
其实以上都是刷题小伙伴的常见症状,当年小编毕业刷题的时候,这些问题一个不少,只能暗说一声幸运了。
破局
对于精英群体,其实困局从来不存在。
所谓的精英群体,指的是背景强悍、海本名校 CS 或者国内名校 CS、海外镀金找工作的学霸们,又或已经进入北美互联网圈子,等待骑驴找马的朋友们,他们本身就是各大公司主力追逐的对象。所以无论公司的门槛如何改变,这群人总是可以通过努力顺利进入,否则公司需要考虑自己的 hiring bar 是不是过高了。更重要的是,刷题绝不是他们唯一的凭证。四五年的 CS 科班教育和非常相关的实习实践经验,这些刷题之外的背书,至关重要。
这局困住了谁?
简单说,转专业求职,弱 CS 背景的 candidate. 再换句话说,如果找工作时最大的依赖就是刷题带来的熟练度,那你可能要被困了。
先说一段绕口令:
公司招聘的目标是找到那些愿意一起工作的人;
在北美顶尖互联网公司,愿意和你工作一般意味着:聪明、有基础有能力、team player;
team player 是个很虚的概念,而且人可以慢慢改变,那还是找聪明有基础能干的候选人;
出一些有意思的算法题,可能是最容易找聪明人的办法;解算法题需要一些背景知识,所以也是找有基础的人的办法;
这是一个简单的逻辑推演,也是小编心中的局眼。
出算法题的初衷是寻找那些聪明的、有一定 CS 基础的的人。但是刷题作为一个杀手锏,几乎让这个逻辑失效。可凡事总有利弊,公司只要感受到足够的不合理的招聘反馈,自然要调整考察的办法。比如越来越多的公司选择做 group project 来考察交流,用更多的设计类题目来考察背景知识和实践经验等。
归根结底,刷题锻炼的是 coding 能力,这确实是找工作必须的技能,但并非充分必要条件。