第一次跳槽经验小结

Tech talks

第一次在职跳槽总算完成了!在面试准备的过程中,我学到了不少工作之外的知识和技能,这里分享一下我的跳槽经验。下周入职新公司Spotify的Machine Learning Engineer职位。

PhD转行之路这篇文章发表已经过去2年,这里总结一下第一次跳槽的感受。

工作一年多,本来还没打算跳槽,Linkedin上几个猎头联系,电话聊了之后发现有些机会还不错,就接着面下去了。因为是计划外的跳槽,加上个人原因比较忙,所以并没有一次面很多公司,也没有自己去投大厂。面了几家风格迥异职能不同的公司,基本都给了口头offer,但由于各种原因,比如公司突然停止招人,或者人事不批准工作签证等,最后只拿到一家的正式offer。技术面经可以自行搜索一亩三分地的面经贴

我并没有提前几个月就系统地准备跳槽,很多时候面试都是提前几天突击。当然,还有自己平日工作中的积累。跟两年前作为应届毕业生(new grad)申请相比,能明显感到自己现在面试时心态的变化。

1. 工作中的日常积累

1)总结知识点

上班跟上学不一样,不太有机会能够系统地学习新知识,很多时候都是一些零星的知识碎片和概念技巧,学了不记下来马上就忘了。我之前实习时的mentor教我用Google Doc分门别类地及时记录新知识点,不定期地整理总结。比如关于evaluation metrics,书本上写的跟自己工作中实际用到的,会有不同的理解。这样长时间积累下来就会有很多自己独创的“使用手册”。

可以利用上班时间查漏补缺地学习相关的知识,也不算是干私活。如果公司里有其他组用到某些tooling,自己就可以在工作之余学习。

Learning on the job,在工作中学到的东西确实很多。

2)精读基础书

为了更好地深入了解巩固某些概念,精读一些经典的基础书总是好的,特别是像我这种从STEM转行的同学,在学校没有读过统计名著。现在重新读ESL(The Elements of Statistical Learning),虽然真的很吃力,但很多时候有豁然开朗的满足感。读Numerical optimization也对优化有了更加深入的认识。

精读的时候可以自己推导公式,思考算法逻辑,自己写代码implement,读一些博客文章,看看YouTube上一些讲得很好的视频加深理解。

至于时间安排,我自己是利用每天通勤的2小时看书看视频,然后周末用几个小时推导公式进行总结。

3)了解行业发展和前沿

关注科技博客medium, 知乎的技术专栏,微信的IT类公众号,提高自己的姿势水平。

2. 了解面试官

基本在面试前都会知道面试官的名字,这是非常有用的信息。我一般都会LinkedIn + Google去搜面试官的背景、经历、之前的工作方向,在面试的时候可以作为谈资,特别是在面试最后问问题的时候,如果能够针对面试官的背景提问,就显得你做足了功课。

 

举几个例子
1)面试官A之前在大公司担任要职,现在在一个startup,问问他之前经验那么丰富,为什么现在选择了小公司?想要实现什么?
2)面试官B跟你一个学校,就可以聊聊他在学校时上过的课,哪个最有帮助?
3)面试官C跟你一样是博士转行,问问他转行的感受,5年之后有什么计划?
4)面试官D之前发了不少paper(你Google发现的),可以问他paper细节(如果你读了),问他工作中是否也要求发paper呢?发paper的idea是谁的呢?
5)面试官E之前一直在小公司工作,现在在大公司,问问他工作环境有什么不同

人啊,都喜欢聊自己,如果能够让面试官感受到你对他很关注很感兴趣,让他对自己的经历侃侃而谈,会留下不错的印象。

3. 了解公司和产品

除了公司官网介绍和技术博客,我也是准备面试的时候才发现YouTube是一个很好的了解公司产品的平台。很多公司会把自己的meet up,tech talk,conference talk放在youtube上,这些视频对了解面试公司非常有帮助。

这里分享一个我准备面试时看的Spotify相关视频https://www.youtube.com/playlist?list=PLT-lveGqOjgGBCZLir8KNyrVQCWwkbL5i

举几个例子
1)我在网上读到说你们现在用这个技术X,你能给我介绍一下么?
2)我看了一个你们的tech talk,里面提到你们的平台Y,能告诉我一些细节么?
3)你觉得工作中最大的技术挑战是什么?
4)你觉得你们最大的竞争对手是什么?是A,B,C么?你觉得你们的优势是什么?
最后一个问题一般可以问pm或者manager。问的时候可以加入自己的理解,表示自己确实在思考这个问题,而不是为了问而问。

4. 突击ML系统设计

这里的突击是指像我这样的非计划面试。如果你定了计划打算准备几个月再面试,那就可以把【突击】改成【持久战】。

我这里主要就是对那些下周就面试了,还没系统学过系统设计的同学。

1) 工作中保持全局观,始终思考着system和pipeline。即使自己只是做一个环节一个model,也可以跟engineer跟其他组员聊,从大局上了解整个流程。比如你做了一个新feature,怎么scale,怎么evaluate,怎么productionalize,怎么上线,怎么monitor。就算自己不做,也可以问问多了解别的同事怎么做的。
2)看视频学习。速成是不可能速成的,但一些概念性和框架性的东西,其实也不难理解。
3)看经典系统设计书Design Data-Intensive Applications。当然如果有时间还是要精读,但突击的时候可以花1、2天时间浏览一下,同样是熟悉概念和词汇。

5. 突击刷题

首先,你得系统上过至少一节算法/数据结构的课(网课或者学校),不然连概念都不熟悉。上过课做过作业应该就熟悉常用算法,那么刷题就是时间和熟练度的问题,所以突击的效果肯定远远比不上几个月的刷题。

但是如果平时你的工作偏建模或者分析,基本没刷过题,面试的大多数公司也不考蠡口,但下周的一个面试要考蠡口,与其坐以待毙,不如有技巧地突击刷个题,尽人事。

这里我推荐下YouTube上Cracking the Coding Interview作者的系列视频,她非常系统条理清楚地讲了常见的问题和解题思路。这些视频不只是突击的时候可以看看,大家长时间刷题之余也可以看看巩固自己的知识点。

当然还要看看论坛里和glassdoor的面经,如果能刷到高频题就luckyyyy

6. 好好准备自我介绍

一般面试的第一步都是自我介绍,大概1-2分钟。这算是第一印象,也决定了面试官之后技术提问的内容。如果你不想让面试官问你NLP,就不要在介绍中说自己做过NLP的项目。如果你觉得自己pipeline做得很好,那就可以强调自己做过end to end。

这个介绍不宜太长,可以说完之后跟面试官说, 如果你有兴趣我们可以接着说。

7. 短处、处理人际冲突的2个故事

长处不说了,单说这两个负面的行为问题。

New grad面试的时候我还在用常见的模板,比如完美主义,同组同学不干活……工作之后发现这些问题其实很常见QAQ

短处基本工作中跟manager聊天的时候都会提到,自己刚开始工作肯定也有遇到各种不适和问题,意识到自己图样图森破。短处不一定是你已经改好了的,比如我的短处就是有时候太偏research而没有考虑到production的可行性,可以举例说明因为自己的短处导致项目不成功之类的,现在自己意识到并且在努力改善。

至于人际冲突,当然还是有套路的,出现矛盾然后约咖啡单独聊天。主要是体现你这个人能够接受别人的意见,并且能够妥协达成一致。

8. 态度和沟通

常言道,说啥固然重要,但话怎么说更重要。面试从开始都最后,我们的态度都要是自信正面积极乐观的,最好还能带点幽默和适当的自嘲。从基本的礼仪来说,见到面试官主动打招呼握手,讲话的时候尽量直视面试官的眼睛,在别人讲话时不打断别人说话,但也要engaged适时给些诸如“厉害了,牛逼,怎么做到的“之类的正面反馈,自己讲话的时候注意别人的反应,不要独白太长时间。

想象面试官是每天坐在你旁边的同事,他的问题可能就是他工作中遇到的问题,来找你讨论。所以回答问题的时候,我觉得可以就用跟同事聊天的语气,而不是学生回答老师提问的语气。当然这个可能也因公司而异,tech公司一般比较随意,传统行业以及咨询公司可能就得稍微端着。总之,入乡随俗。

Non-verbal的态度(肢体语言)也很重要,挺胸不驼背,肩膀挺直,不要坐立不安,也不要总是盯着天花板。

遇到不会的问题,及时说明自己的思路和想法,如果面试官知道你在哪里卡住了,就可以给你hint。

用我一个朋友的话,面试的时候就乐呵呵的,谁也不想找一个苦大仇深或者动辄就崩溃的同事。工作中肯定会有困难、不会、卡壳的时候,这个时候最好能够保持冷静和学习的态度,遇到问题,解决问题,寻求帮助,共同进步。

举几个例子:
1) 面试官问了个SQL 的问题,你在他问完之后马上就知道用个join groupby count就解决了。但设想一下这是日常工作,那么最好就先重复一下他的问题,确定需求没有搞错,然后一步步地先说明自己的思考方向和理由,要实现‍‌‌‌‌‌‍‍‍‌‍‍‍‍‍‌‌‌‍X,我们得先join这两个表,用这个column X,然后我们根据column Y看每个不同的Y的情况,这里我们可以用groupby,最后我们数一下每个Y的数目。解释完思路问,sounds good? 然后你就可以开始写SQL了。如果在任何时候,面试官提问说这个不清楚,或者那个不对,你就可以及时停笔跟他交流,解释自己的思路和想法。
2) 面试官问怎么设计用户流失模型,你脑中立马搜索到相关的pipeline和专业知识。但设想一下如果这是日常工作,那第一步还是先确定需求和目标,然后大方向地讨论一下,解释自己的思路框架,然后再说细节和优化。
3)面试官问你如何监测一个模型,你在brainstorm地说了几个思路之后,他都说不太对,你确实没有思路了,这个时候可以问,能给我一点hint 么?我有点stuck。一般这时候面试官都会给你指点,对这个hint可一定要听明白了,然后举一反三,并且对面试官表示感谢。

9. 关于薪资期待和讨价还价

猎头联系的时候,一开始就会问薪资期待。我看有些帖子说不要告诉猎头自己的期待,有些则说要往高了说。我个人的经验是,自己先做好调查,比如市场均价,h1b info上类似公司类似职位的底薪,论坛里大家分享的包裹,当然还有自己现在的薪水。一般来说,跳槽的薪资涨幅至少20%。跳槽的时间可能会影响现公司的年终奖,改变通勤时间,交通费用,这些影响都要考虑在内。在说薪资期待的时候,可以给一个区间,表示有缓和的余地,区间的最低值表示是自己的底线,就可以按照20%的涨幅,区间的最高值可以是你调查出来跟你的资历相仿最高的那个数,而不是你异想天开随便给的一个数。当然,如果你觉得自己值得更高的价,也可以给一个更高的数。我当时给所有的猎头说得都是同一个区间,有些猎头听了之后,会直接帮你筛选一些职位,说某某公司付不起,你也就不用费时间去面试了。当然凡事都有例外,如果你特别喜欢某一个公司或者某一个领域,薪资并不是你唯一的选择标准,那区间就可以给得宽泛一些。

在发offer之前,不少猎头也会再次确认薪资期待,特别会问是否有其他offer在手。如果有其他offer,一些公司可能会match包裹;如果没有,那就只能空手套白狼地讨价还价,问能不能给sign on,能不能有更多年终奖,能不能加薪,虽然问了也不一定有用,但是不问的话,肯定什么都不会发生。如果对方直接给出自己薪资期待的最高值,就很难进一步提高了,这时候,我觉得可以见好就收。

讨价还价的环节,我倾向于在电话里进行,但对方给出数目的时候,先不要接受,先提出需求,然后不管对方接不接受,都说自己要再想想,问问家人朋友,等等。之后再邮件约对方电话谈。讨价还价是一门大学问,我也还在学习中,这里推荐这篇offer讨价神贴 https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/

有时候也不用太执着于包裹大小,特别是工作不满3年的新手,更重要的是积累经验,学习技术,或者体验大厂平台。也不用非得得到最优的包裹,自己觉得可以接受,就可以尽快接受。做人嘛,真诚很重要。

10. 辞职

从拿到offer到最终辞职,经过了足足3个月,主要是因为需要律师办理工作签证转移H1B transfer。有的美国同事比我拿到offer晚,却能马上入职,我还是有些羡慕的。幸运的是H1B transfer顺利批准。批准之后,跟新公司确认了入职时间,然后跟老板面谈了辞职,确定了离职时间,发了辞职信。一般公司要求一到两周的提前通知,方便工作的交接和手续的办理。

两份工作之间,如果有空,最好稍作休息,给自己放个假!

最后,祝大家工作开心,跳槽顺利!

13 comments:

  1. 大神投简历是一页好还是两页? 想跳槽,现在建立一页有点太紧,两页又有点空泛。求指导

  2. 写的一如既往的好. 干货满满.
    Btw, 有一条也许是错字? 1, 3) “提高自己的姿势水平” 是想说知识水平?
    不过, 完全是可以看懂的. Thanks for sharing.

  3. 看了你的文章,很感动,谢谢你!
    我是国内化学PhD毕业, 然后到美国来做博后。现在想转行的话,是不是必须通过再读一个硕士才可以呢?谢谢。

    1. 也很难说需要不要再读一个硕士,因为我自己也没读过。现在的转行形势跟我转行的3年前又不太一样,很多ds和ml的硕士毕业。我也很难给出有参考性的看法。

  4. 从您的《PhD转行之路》开始关注您,一直到看到这篇文章。谢谢您干货满满的文章。我本人是经济学博士在读,但后来上了一些data mining的课,萌发了转行data science的想法。后来看了您那篇《PhD转行之路》,更坚定了我的想法。我现在上了3~4门data science课,课上学习了R和Python,另外自己有接触一些SQL,不知这样够找一个data science(比如data scientist或者data analyst)的intern吗?另外,您提到了最好上过一些data structure/algorithm的课程或网课。这些是指学一门以Java或C为基础的相关课程吗?因为我现在时间紧迫,想知道这样的课程含金量有多大?谢谢!我会持续关注您,希望看到您更多的分享。

    1. 谢谢。经济学应该算是ds很对口的专业,申请intern之前做一些相关的项目吧。至于data structure/algo,取决于具体的职位。现在整个ds分得很细,偏商业的ds不需要algo,但更看重business、communication,ab test, sql, analytics,偏工程的ds需要engineering的能力,就需要algo。所以看你对哪个方向感兴趣了。

      1. 谢谢您的回复!说实话,我还不了解这两种ds的差别,所以想找一个实习试一下。不过,我对需要communication的不是太有信心。另外,我看一些做ds engineering的似乎要会hadoop等一些比较fancy的技术。是不是做engineering的会技术门槛高一点呢?

        1. 我觉得这算是两个不同的方向,需要的技术和能力不一样,无所谓门槛高低,只看你自己的优势和兴趣。

  5. 您的总结写得真好,全是实用的信息。我跟您一样是生物背景,也同是哥大校友,不得不说大神您真是生物转行的标杆啊。崇拜~
    有一个小问题,您觉得ds是不是一定要刷题走码农路线呢?走统计方向偏analyst会不会让路越走越窄?总觉得刷题怎么也刷不过本身计算机背景的人。谢谢。
    另外,对Spotify的职位很感兴趣,找您refer会不会太唐突?

    1. analyst道路并不会窄,你可以跟一些做这个方向的人聊一下。
      至于刷题,无所谓刷得过谁才行,数据算法也就那些个题型和题库,用心努力地刷,还得加上运气和机遇。

      至于refer,我是觉得跟自己投没什么区别,就不提供refer了。

Leave a Reply to Ju Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.