好久没有更新了。回来报个到,也向关注和提醒我 blog 更新的朋友们道个歉。原因在于,最近非常忙,忙于找工作。现在下家还没有定下来,手头有几个 offer,还在考虑中,但是很快会决定下来,然后更新更进一步的信息。无论如何,blog 的更新已经恢复正轨。
通常人的一生中不会有太多属于自己的求职季节,尤其像我这样的,总觉得在一个地方需要积累,因而并不是频繁跳槽的粉丝。第一份工作在华为,我干了三年半;第二份工作在亚马逊,直到现在,超过了五年半。职业生涯的前方就将是第 10 个年头。
为什么是现在?
三年半前我通过 L 签证来到西雅图,而 L 签证是不能够更换雇主的,因而自然也不用考虑工作变更的可能性。去年 10 月我正式变更为 H1B 签证,可以变更雇主了,但是我的孩子很快出生,而且我身体状况也不是很好,就选择等一等,这一等就到如今。人都是有惰性的,这件事情上就是潜意识里害怕变化。但是另一方面,潜在的变化也会让人感到野心勃勃和充满欲望。我对自己说,不管结果怎样,一定要把自己放到这个市场上掂掂分量。在任何一个地方呆太久了,都不利于眼界的扩展。
都从哪些角度考虑下一份工作?
工程师,Individual Contributor,技术路线。对管理岗没有什么兴趣。
技术的角度看,我希望能够继续专注于我感兴趣的领域,既包括全栈工程,也包括分布式系统。前者从能力上可能更适具备竞争力,后者则是我近几年的兴趣点。以往我总是说要积累各个领域的知识和体验,但是现在我慢慢在计划,到 35~40 岁,我需要明确下专注的领域,而不再像以往这样 “不挑食”。这几年我会不断接近和过渡到这个目标,慢慢地明确和提炼自己的核心竞争力。
随着经验的增长,往往每一份工作都会比前一份报酬更高,也被寄予更大的期望。换言之,跳槽也会越来越难,这是职业生涯向上发展的一个标志。
非技术的角度看。我当然想拿更高的薪酬,体现我的价值,包括薪水也包括级别。我也希望能继续做一些有影响力的工作,既包括用户层面的影响力,又包括产品层面的影响力,和出色的工程师一起工作。小团队,但是有大野心。这是我的偏好,优先级上先考虑团队和项目,再考虑雇主。工作签证的关系,我不太想考虑特别小的公司。对于中型公司还是巨头,我是有挣扎的。但是无论如何,产品和雇主的前景,是我看中的东西。
北美工作难找吗?
既难,又不难。说它难,是因为它的玩法和国内大不相同,对于工程师的功底,特别是数据结构和算法的考察,比国内大多数公司要严苛得多。几乎所有的面试都要求现场写代码,而且要写可工作的代码,不是伪代码。说它不难,则是因为这里的面试更便于准备,项目、代码和系统设计,几乎涵盖了百分之八十的面试内容。换言之,北美的技术面试更注重工程师的思维,而国内则问很多知识性的内容,各有利弊。我得适应这种不同的玩法。
不过相对于说工作难不难找,我倒是想从 recruiter 的角度说一声,招一个优秀的工程师,真是太难了,大量的人力成本,电话面试 1 到 2 个小时,onsite 4 到 7 个小时,再加上组织沟通的成本,feedback 和 debrief 的成本,有时还需要管酒店机票,等等等等。最后,这个工程师还不一定去了哪家。这也是为什么很多 IT 公司都已经把 “招人” 作为第一要务了。几年前在国内的时候有一个 recruiter 说过两个有趣的二八法则,一个是,软件工程师的 20% 的岗位由那些 80% 的工程师去争抢;另一个是,市场上最容易发现的 80% 的简历都是那些 20% 的不够优秀的工程师撰写的。
简历重要吗?
我犯过一个错误,觉得简历这个东西,不是很重要,重要的是面试表现。于是 “简历拒” 就生生打了我脸。简历需要好好打磨,如今的简历并不需要局限在一页纸。如果经历丰富,一页纸是很难说清楚的。
由于工作机会很多,特别是在 LinkedIn 上,不断有猎头 “骚扰”。因此我没有使用像 Monster 或者 Indeed 这样的招聘网站,这和我在国内当时离开华为找工作的策略是不同的。我只选择自己感兴趣的公司,或推荐或定向投简历。事实上,这种也帮我过滤了信息,避免了很多不必要的沟通。
怎么准备面试?
关于算法和数据结构。很多人都说要刷题,Leetcode 已经到了差不多 700 道,刷题这种事情是没有止境的,我看 “一亩三分地” 上有一种很不好的风气,就是试图通过题海战术去 “偶遇” 面试中刷过的题目。作为骑驴找马的我来说,自然不愿意也不可能去选择这样的方式。我给自己定下的目标是,与其去统计那些做过的题目的数量,不如精致地总结一些常见的套路。套路这个东西数量并不多。事实上我做过一些题目,但是很多题目做得都很差,而且大部分都忘记了,只有少部分能够在面试中遇到,即便遇到了,还是需要我现场去通过思考和交流解决问题。
关于系统设计。因为我已经工作好些年了,系统设计往往会成为一个重点考察对象。除了日常的积累以外,也是有一些套路可寻的。仅仅凭借日常积累,是很难做好面试中的系统设计的。总结常见和经典的系统设计,就成为了非常有助益的一环。以前写过一点点,但是现在看起来还是太浅了,我也许以后为稍微写一点经典的系统设计。
最后,关于自己的项目,说清楚,画清楚,从架构到细节。还有那些烂大街的 behavior questions,我想不必提及了。
面试时间规划上有策略吗?
有。我的经验是,把特别想去的公司往后放。电话面试相对宽松,但是最初的两三次电话面试只能用作积攒经验,成功率肯定不如后来进行的高。对于 onsite,把想去公司的 onsite 放到一起,密集一两周完成。越想去的公司越往后放。这里的原因是,雇主一旦给 offer,很多只有一周到两周的决定时间,希望 offer 互相 compete,就只能把这些 onsite 放到一起。几乎所有的公司都愿意在有 offer deadline 的情况下加快流程前进的速度。
如果可能的话,面试的数量要达到一定才能积累足够的经验。我前前后后总共 onsite 了 15 家公司,可以说每 5 家都是一个阶段,每一个阶段都比前一个阶段总体来说发挥更自如,表现更好。
当然,这可能只适用于我这种短时间内骑驴找马的策略。有朋友喜欢常年在准备,随时可以跳槽的,自然就有不同的策略了。
面试的随机性
有位朋友和我说过,面试的随机性很强,不要太当回事。对于任何一次面试的个体,这是非常有道理的。如果面试挂了,并不代表你不够好,常常也不代表你发挥得不够好。原因是多方面的,有的时候只是在团队文化上不那么契合,有时候只是某一点小的行为表现被错误地放大为一个负面的信号,有时候甚至是被人故意黑了(在北美工作的同学都知道这一点,面试中很难避免)。因此想要在吊死一个选项,非得拿到那家的 offer 不可,无疑是非常困难而危险的。
另外一点是,特别是在面试的前期,往往没有 offer,经验缺乏,甚至面一家挂一家,无疑对自己的心理压力巨大。自我的调整显得举足轻重。但是就像一句老话一样,“道理我都懂,可还是过不好这一生”,有时候尝试去坦然地接纳这些事实,承受这些压力,未见得是件坏事。
最后,我想说的是,坚定地相信,对工程师来说,技术是非常有价值的。尊重自己并且尊重技术,就会有别人尊重你,获得报酬,享受生活,也就能够在职业生涯上继续迈出坚实的步伐。祝愿和我一样近期找工作的朋友们能得到较为理想的结果。
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》
走出去已属不易,加油。