机器学习在职跳槽找工经验总结

背景:
楼主一年前开始准备跳槽,有一年多的 ML 工作经验,entry-level 和偏 senior 的岗位都有申。因为身在东岸,没有什么 networking 的机会,年初去了三次三番参加 conference (公司赞助), 但之后因为成本太高收益有限就没再去了。

这篇文章贡献给找机器学习工作的小伙伴,尤其是异地在职跳槽的同学,尤其尤其是今年抽到 H1B 还要考虑 RFE 和身份问题的同学。真的没想到过程这么艰难漫长。我申请的都是纯机器学习 machine learning engineer 的岗位,事实却被问到了好多好多其他的问题,经常措手不及。

这篇文章主要是想分享下我的经历和反思,不过心态和策略的调整可能比一门网课更重要哦。

时间线和结果:
首先汇报下我的整个找工经历。我大概申了50家,谈了大约20家。有14家进入技术考核阶段,其中4家因为时间过早,我申到 H1B 只能十月后入职所以推迟(八月左右又联系这几家公司但是似乎都已经招到人了),两家职缺和我的兴趣不符,5家在一轮或二轮电面后被拒,1家 onsite 后被拒,3个 offer 最后选了一家。

这几份面试,基本都是海投 (Glassdoor, linkedin, KeyValues, AngelList) 或 recruiter 联系,也有找了几个大厂的内推可是都没有消息。觉得大小公司两头抓好难,所以后期就专注在申请我感兴趣的小公司上了。

我一共经历过的面试考点包括:

  • Leetcode (easy to hard)
  • Pandas data manipulation
  • 当场给一个数据集建模
  • Take home data challenge
  • Hackerrank (机器学习、深度学习概念多选题,算法题)
  • machine learning concepts: loss function, assumptions, overfitting, evaluation metrics, time series, data mining, ensemble, real world scenario debug
  • Deep learning concepts
  • 统计分布
  • 概率论:贝叶斯的计算
  • 假设检验:T检验和开方检验
  • A/B Testing
  • SQL
  • Platform engineering
  • AWS
  • 现在做的项目和简历里的其他内容

这些项目地里的都有很详实的学习资料总结,我就不再赘述了。如果有问题欢迎评论里交流。只是借机再次吐槽一下机器学习的面试,考的东西也太多了吧,不知道是叫面试者如何准备,又不是学生哪有那么多时间,还要免费劳动力做各种 take home.

今年其实主要是想和大家分享找工快一年我的心态变化和学到的东西。上学时急着上岸,第一份 offer 就直接接了,也没想好是不是最好的选择。这次在职跳槽是抱着要找到一份我想至少工作几年的岗位的愿望,觉得最后也找到了。我总结了学到的六点,想和大家分享,也请评论告诉我你的想法。

  1. 做好整个过程会有6到9个月的准备。

这点并不是叫大家消极,只是在职跳槽确实是一个很漫长的过程,尤其是机器学习方面的工作,有的职位偏 research, 要你学习各种最新的 deep learning paper, 有的职位是 end-to-end ML pipeline, 要求你不仅会调 sklearn 也要会在线/离线 deploy 模型,有的需要你会挑参,会看你是不是参加过 Kaggle 比赛。而且 job description 上有时也看不出公司的 preference, 要聊了才知道。

不同的需求都被归在 data scientist / machine learning engineer 下,导致可以准备的东西太多,很多转行来的同学还要花很多时间学习基础的算法和数据结构(比如我),复习大学的统计、微积分和概率论,刷 kaggle 或者 AWS certification. 说不定过程中你司突然有重要任务或者需要出差,加上还要和对方公司和其他 candidate 的时间线配合,即使拿到 offer, negotiation 也要时间。所以定下一个半年左右的计划我认为是比较合理的,千万不要一两个月没有什么结果就灰心。

另一方面其实是要学会给自己适时的安排假期。要想好这不是一次短跑,允许自己休息,千万不要做不找到新工作不放松的计划。保持动力不 burn out 的方法是接受这会是一次长跑,过程中需要休息和娱乐。

  1. 花时间了解自己

我其实和一位 career coach 合作了几个月,做自我反思,想清楚我喜欢什么不喜欢什么,对我来说下一份工作什么最重要,什么是没那么重要的。反思说起来容易做起来难,不过这个 clarity 对你真的很重要,帮你很快想清楚一份招工通知到底值不值得你付出时间来申请,以及当面试时被问到为什么跳槽为什么选择我们公司,你都可以轻松应对。

比如我发现自己喜欢 practical machine learning 胜过 research 或者 general SDE.

对我来说很重要的事有:

  • 我认同公司的 mission statement
  • 与小组的同事和经理是否合得来,大家中午是不是一起吃饭,下班了还是不是朋友
  • 公司有一个安全的环境可以提出不同的意见或者反馈
  • 公司的 D&I 政策
  • 内部 mobility 好,有自主选择做什么项目的自由
  • 可以想穿什么就穿什么(说起来可能有点奇怪,我现在的公司有 dress code 比如牛仔裤只有周五才可以穿,所以每天都很不爽)

对我来说没那么重要的事有:

  • 做最酷的人工智能模型,实现全自动驾驶,定居火星,定义人类未来
  • 有机会发 paper 参加 KDD
  • 公司有台球桌和 snack bar
  • 公司很知名说出来别人都羡慕
  • compensation 比市场价高

我一开始很不愿意把这些原则讲出来,因为似乎甚至有点蠢,我花了十几万美金来读书,结果找工作最在乎的是这些人际关系的事,但后来我意识到这就是 who I am. 了解自己是谁 what makes me happy 是最有力量的事,要允许自己 unapologetically 的表达出来。

反思的过程帮助我过滤掉一些本来我可能会尝试申请的职缺,更重要的是,我学会针对每份工作 customize 我的简历。其实我只修改简历最上面的自我介绍,只有两行,但是我会找到那个公司的 mission 或者市场或者文化和我的经验和兴趣的共性,然后针对的表达。所以我其实简历和 recruiter 关过的还蛮顺利的。

  1. 学会面试对方

我觉得中国学生尤其要练习这点,学会问问题,问难的有意义的问题。每次面试都要抱着双向选择的心态,每轮结束后都思考自己对这家公司的感受,问自己如果现在他们给你 offer, 你会愿意接么?如果有什么 concern, 可以问些什么问题来获得更多的信息。比如有一家公司我的所有面试官都是男性,当我提出这个问题后,recruiter 有马上给我介绍一位女性工程师和我沟通,帮我介绍公司里的 D&I initiatives.
KeyValues 是一个很好的学习可以问什么问题的网站,Madeline Mann 的油管频道我个人也觉得很受用。

  1. 少报课,多训练

这是我自己犯过的错误。每每不知道怎么办,报一门课好像是最快的解决焦虑的方法。但看视频消极学习能带来的收获真的有限,不如 quiz 自己。网上有很多面试题目汇总,找到自己的弱点,再针对学习。现在 Medium 上有好多好文章,可以先从阅读 towards Data Science的文章开始,甚至通过开始面试,找到自己的弱点再去上课或者深入学习。

我一开始以为对工作不满意,所以我想自己可能不适合机器学习,说不定去做 big data infrastructure 更好,就斥巨资报了一门培训课,后来发现我其实还是喜欢建模,工作不开心是其他一些原因(好蠢)。课上做的项目写在简历里是看起来很厉害,可是变成我心里负担很重,因为我其实只是囫囵吞枣,更重要的是每个项目都是为了教学设计的,所以都尽可能涉及更多的 tech stack keywords, 并没有一个 motivation, 或者说你为什么做了这个项目,放在简历里就像是一堆 keywords 的堆砌。

长话短说,结果是我用了半年每周四天跟西部时间半夜上这门课,花时间复习做作业,最后还是把项目都从简历中删掉了。(决定删掉那天我真的如释重负,虽然我的简历可能看起来没那么厉害了,但是我对每一个项目都很有热情,也很自信可以讲出我做了什么,为什么做。)

另外一些我付费后搁置了的课包括 Interviewcake (data structure & algorithms), Brilliant (probability & statistics), Python Morsels (Python)…

当然不是不支持大家上课,只是报名前要想好这门课能带给你什么,你付出的时间成本有多少,是不是有更有效的方法考察自己的 skillset 然后针对的学习。还是只是想花钱买安逸,骗自己买了这门课两个月之后我就会学会 deep learning 了。

  1. 没有 dream job

好像听起来有些令人沮丧,但其实很多时候并没有那一份100%完美的工作在等着你,即使有,你当下的视角和知识可能也理解不了。一切都是 trade off.

我 onsite 被拒掉的公司是我最想去的公司,被拒后难过了好几天。可是后来反思,面试过程中其实负面的体验也不少,第一轮就被问很难的 DFS, 觉得有点莫名其妙,第二轮面试官有迟到,onsite 时被问了一个小时的纯 soft skills interview(你的优缺点,你现在老板的优缺点,你之前学校 RA 老师的优缺点,如何解决纠纷等等),整个面试过程没有问过我任何关于我现在工作中做的东西。才发现好像想象中的 dream company 其实也没有那么 dreamy.

这就又回到之前第二点讲的,要想清楚什么对你最重要。

  1. 表达热情

我曾经每次面试时都装作很酷的样子:“你们公司也就一般般吧,还有很多公司在面试我,你们要把握住我这个人才哦”。后来才慢慢学到,表达你的热情是很重要的。美国人本身沟通模式就比较外放,我们加上语言的障碍,很多情绪容易在沟通中不见。作为面试者,不管你对这个公司的兴趣有多大,请努力装作很感兴趣的样子,因为你一开始喜欢的公司最后可能最后并没有 work out, 一开始并不在乎的公司可能成了你最后的 offer (比如我). 积极热情的态度只会帮助你留下更深更好的印象。

2 Likes

非常感谢分享。关于斥巨资学习那段我也深有同感,我也是学完了觉得被动的学习收获不大。不如自己主动找project去做。