转行Machine Learning Engineer? 看这篇就够了

大家好,我是Lucy@FinTech 社区。今天给大家带来的文章关于工作转换和转行。

先介绍一下背景,作者之前在顶级对冲基金公司工作,后来对机器学习感兴趣,于是通过细致的准备,成功转行为机器学习工程师,文章分享了他是如何准备机器学习面试,并且成功的拿到理想的工作机会,希望对想转行的你,在找工作的你,都有所帮助。

 

摘要

 

创造:从事一个你感兴趣的项目,并在网上展示它

研究:深入实践算法和数据结构编码及系统,设计问题

应用:利用多种渠道方法,申请和面试

这3个步骤看起来十分简单。但完成每一步都需要付出很大的努力。 


 

创 造


 

从事一个你感兴趣的项目,并学会展示它

四月初,当我和家人在墨西哥度假时,一天晚上我突然发现我很想要造一辆无人驾驶汽车。鉴于我以前没有机器人或电子产品的经验,我开始建造一辆深度学习/自动驾驶的机器人汽车DeepPicar,并让它可以在我的起居室里运行。一个月后,在成功制造了无人驾驶汽车之后,我开始写博客,教其他人如何制造无人驾驶汽车。几周之内,我的博客就收到了超过1万次的浏览量,全世界读者的反应都非常热烈。

然而,直到面试官问了我“你为什么想从你现在的行业中跳槽?”这个问题的时候,我才意识到这对我职业生涯的全面影响!我不仅能够告诉他们我对AI/ML的热情,当我从我的背包里拿出我的汽车(是的,真正的机器人汽车),并把它交给面试官的时候,我还能从他们的眼睛里看到兴奋!他们中的许多人甚至说他们愿意和他们的孩子一起造这样一辆车。随后我告诉他们,我已经发布了完整的指导与源代码在网络上(也附上了简历链接),供他们遵循。我很确定从这以后,他们不会把我的简历放在回收箱里了。 

我的一些朋友问我,做什么才是好的项目。以下是一些建议:


 


 

1. 如果您对AI/ML感兴趣,可以使用现有的计算机视觉或自然语言处理深度学习模型,并尝试用它来制作一个产品。例如,我采用了一个预先训练的对象检测模型SSD,并将其改编为DeepPicar的交通标志检测器。如果您不熟悉AI/ML,请务必阅读DeepPicar的第1部分,在其中我列出了几个ML课程和资源来帮助您入门。

2. 如果你对机器人感兴趣,试着用Raspberry Pi或NVIDIA Jetson Nano制造一些酷酷的机器人。一定要使用新的Raspberry Pi或NVIDIA Jetson Nano。Raspberry被制造商广泛使用,而Jetson Nano则搭载了GPU,因此它可能更适合深度学习项目。

3. 如果你没有任何项目想法,也没关系。您可以随时为上面提到的开源项目中做出贡献,如果您喜欢AI/ML,还可以为TensorFlow或Pytorch做出贡献。 您可能认为您需要成为专家才能为这些著名的开源项目做出贡献, 但其实是不需要的。实际上,在每个开源项目中,都有相当多的小特性和简单的bugfix被指定给Noobs。这样,在处理更复杂的问题之前,您可以熟悉代码库和提交过程。


 

一旦你完成了你的项目,一定要让其他人知道它!仅仅在GitHub上发布完成的代码并完成它就足够了吗?不!因为大多数人更喜欢阅读关于代码首先做什么的博客。精心打磨的博客是十分必要的。我花了大约整个五月的时间写了6篇文章,总计大约200个小时,即每篇文章30个小时。如果你是全职工作,也许写一个写得很好的博客,可以作为你的项目的概述。(顺便提一下,我花了10多个小时写这篇文章,而这只是第一部分。)


 

还有需要记住的一点是,你必须享受你正在做的事情,而不是仅仅为了得到一份工作而做这个项目。如果你对你所做的事情有激情,当你和面试官交谈时,你的眼中会闪耀出光芒。这一点非常重要!


 

努力并且聪明高效地学习


 

算法和数据结构


 

在技术面试中需要掌握一项技能,那就是算法和数据结构(A&DS)编码技能。尽管现在大多数公司不会在意你使用哪种编程语言,但现在不论你面试的是大公司还是小公司,他们都会盘问你的编程技巧。我使用了以下资源:


 

Cracking the Coding Interview Book(CtCI):

这本书大约有700页,但只花了我30美元。如果你需要一个关于A&DS概念的复习,这是一个很好的起点。除了概念之外,它还提供了一系列易于中级实践的问题和完整的解决方案。我花了大约2到3个星期的时间阅读,1到2天的时间在每一个与A&DS相关的章节上。


 

Leetcode.com:

我也大量使用Leetcode(LC),我强烈建议您每月花30美元注册LeetCode Premium,因为它可以让您访问所有LC问题和解决方案。 


 

TusharRoy的LeetCode硬件解决方案:

Tushar是苹果的一名工程经理。当他还是一个软件工程师的时候,他制作了这些视频。我想说的是,看他的视频不仅教会了我这些算法,还教会了我如何清晰地表达复杂的想法/算法。当我在面试中做白板编码时, 这极大地帮助了我。


 

请注意,大多数面试官会给LC中级水平的问题,因为要求面试者在20-30分钟内解决中级水平的问题是十分公平的。我建议你在第一次电话面试前至少做20个简单的LC问题和30个中等的LC问题。


 

而且,对于每一个练习问题,我都十分认真,就像在进行面试一样。但是,我使用IDE,带有计时器。你不会在面试中获得这些,所以当我练习的时候,我通常会设置一个更严格的时间限制,大约30分钟,而不是45分钟。


 

系统设计


 

你需要掌握的第二个最重要的技能是系统设计。通常,现场面试会要求你设计一个大规模的分布式系统,这是一个软硬结合的技能测试。这是一个很难的技能测试,因为您需要了解许多常用的分布式系统组件,如分布式数据库,分布式内存缓存,分布式配置管理器,分布式文件存储和分布式搜索引擎等,以及何时使用每个组件。这也是一个软技能测试,因为您需要能够绘制一个清晰的图表来说明您的设计,并讨论和捍卫您的设计。有人告诉我,如果你通过了现场面试,系统设计面试会对你的水平产生很大影响。


 

这是我常用的资源:


 

Cracking the Coding Interview Book: 

有一章讨论了系统设计,但内容十分基础。


 

Gaurav Sen’s System Design YouTube Channel: 

在读了CTCI的系统设计一章后,我感到很不满足。然后我偶然发现了Gaurav的频道,里面有22个视频。大约10个视频是对单个分布式系统组件的深入描述,其余是关于如何构建Netflix,Tinder或Facebook系统等的实际用例讨论。


 

Tushar Roy’s System Design Videos: 

虽然Tushar在LC硬问题方面非常出色,但他也有5个很棒的系统设计视频。我建议在Gaurav之后观看这些视频,因为Gaurav为您提供了系统设计的坚实基础,而Tushar的视频则假设了其中的一些知识。


 

就我个人而言,因为我以前在很多分布式系统上工作过,所以我能够很快地掌握总体思路,尽管我没有使用上面视频中提到的一些新技术。在观看了足够多的视频之后,我能够将大多数分布式系统概括为以下几层:


 

客户端(PC/Mobile appos,浏览器)

用于处理客户端请求的分布式负载均衡器

基于定位的内容递送网络(CDN)或内存中的高速缓存,以快速地将较大且相对静态的内容(视频和图像)递送到更靠近CDN/高速缓存的客户端。

处理各种业务逻辑的一系列微服务,如身份验证,服务/保存用户内容,在用户之间的信息传递。

微服务之间的通信通过分布式消息传递系统发送。

用于保存用户内容和消息的分布式数据库。可选地,在数据库之前添加分布式缓存层,以提高读/写吞吐量。


 

行为问题


 

对于一个职业转换者来说,最重要的问题当然是,“你为什么要考虑转换行业?”希望通过你在步骤1中构建的项目,你可以通过展示你的项目和你对新行业以及你申请的公司的热情,把这个问题回答好。


 

以下是一些可以准备的行为问题:


 

你为什么想为我的公司/我的集团工作?

举一个你达到目标的例子,告诉我你是如何做到的。

举一个你没有达到的目标和你如何处理它的例子。

描述工作中的压力状况以及你是如何处理的。

你有没有遇到过没有足够的工作要做的情况?

你犯过错误吗?你是怎么处理的?

描述一个你与同事/老板/下属意见不一致的情况,以及你是如何处理的?


 

所有行为问题的关键都要以积极的语气结束。例如,即使你被问到与同事意见不一或事业失败的问题,也要如实地提到发生了什么,但更重要的是,要提到你从中学到了什么,以及当类似情况再次出现时,它是如何帮助你成为一名更有效的团队成员/工程师的。


 

通过多渠道申请职位


 

6月初,我就开始密切关注湾区的ML工程师就业市场。同时,我开始了为期一个月的密集的全职编码准备(总共大约200个小时)。到六月底,尽管我还没有完全准备好,但我开始向公司申请。原因是从我发送简历到电话面试之间有1-2周的准备时间。通过多种渠道,我接触了20多家公司,并进行了30多次电话采访。有时是同一个公司的多次电话采访。


 

最后,请在公众号 FinTech社区 后台回复:简历,我们会推荐简历模版。 


 

相关资料链接

Cracking the Coding Interview Book:

https://amzn.to/2LLxmSm


 

Tushar Roy’s System Design Videos:

https://www.youtube.com/watch?v=UzLMhqg3_Wc&list=PLrmLmBdmIlps7GJJWW9I7N0P0rB0C3eY2