你的GitHub爆款项目,面试官可能问都不问

2,430 阅读15分钟

简历上写了一堆成功的项目,在面试官那儿真的管用吗?过来人表示:未必。近日,Towards Data Science 项目主管和 Recurly 数据科学家 Haebichan Jung 发文介绍了他的经历。他表示,项目做得多、做得好可能在简历筛选阶段比较有用,但面试官可能根本不关心你的项目,而是通过「智力测验」决定你的去留。

选自towardsdatascience,作者:Haebichan Jung,参与:Panda W、张倩。


项目心态

雄心勃勃的数据科学家是如何得到高薪职位的?其实人们对此有很大的误解,认为这和做过的项目有关。

这里所说的「项目」是指某种放在 Jupyter Notebook 上的最新机器学习或深度学习算法,而且会被上传到 GitHub。你可能希望借此得到面试官的好评。

但猜猜结果如何?那些面试官实际上不会读多少你的个人项目代码。如果你认为项目很重要,你就有我所说的「项目心态」。
项目心态:(名词)心里想着做的机器学习项目越多,简历里的项目越丰富,获得高薪数据科学职位的可能就越大;但实际上,这不会让很多人觉得你很厉害。
为什么这么说呢?因为我之前就是这样的蠢蛋。我之前就花了很多宝贵的时间来做各种不同的项目,以便扩展我的「个人履历」,有些项目还得到了数据领域中某些杰出人物的认可。

但现在,作为旧金山的一位数据科学家,我发现自己做错了,更糟糕的是还有很多人会步我的后尘。这篇文章是想要向你发出项目方面的警报,告诉你项目究竟能给你提供多少帮助(提前预警:没多少)。

PS:请记住,我只申请了加州旧金山的数据科学家岗位。因此我的意见可能与你的地理位置或所申请的岗位并不相符。而且这也只是我一个人的意见(实际上是两个人,后面会说到)。但这个故事里面有些东西是普适的,因为我看到世界上很多人都被「项目」所带来的(错误的)吸引力和潜力所折服。


项目火得一塌糊涂,但面试官根本不 care


面试之前,先花几周做个项目

在我申请数据科学岗位之前,我花了 4-5 周的时间来做自己的项目,因为那时候我觉得这才是正确的做法。作为一位专业钢琴师,我想做一些有关音乐的东西。这让我注意到了神经网络,尤其是 LSTM,我想用它来生成新音乐。

我花了整整两周时间来阅读有关这一主题的学术论文,现在回过头看,我大概懂了其中 30%。但在那 30% 中,有些东西真的让人很困扰。我觉得某些研究 AI 生成曲调的研究者并没有对音乐的基础知识有深度的了解。你可以看出来这一点,因为他们使用了非常复杂的神经网络架构来创造新声音,但这些架构并不能反映真正的音乐家作曲的方式。


使用 LSTM 创造音乐的学术研究示例

这让我深感困扰,于是我决定基于隐马尔可夫模型从头创建一个算法。我写了大约 800 行纯 Python 代码,开发出了我自己的音乐生成算法。我称之为 Pop Music Maker:github.com/haebichan/P…

Pop Music Maker 以音乐数据为输入,分解出其中的音符,然后寻找这些音符之间的统计学关系,最后基于这些统计情况重新创建一首全新的流行音乐曲。

Pop Music Maker 的架构基础

项目太火,网站崩溃

我在 TowardsDataScience.com 发了一篇文章介绍我的项目。不过几天时间,这篇文章就火了。每天都有数千人阅读这篇文章,尤其是当某人将我的文章发到了 HackerNews 之后。当我意识到这篇文章火了时,它已经在 Twitter 和 LinkedIn 上扩散开来。然后,Numpy 的创造者和 Anaconda 的创始人 Travis Oliphant 以及 O』Reilly Media 的 Ben Lorica 都在他们的社交媒体上分享了我的内容。

随着我的项目越来越为人所知,每天都有数百人通过我建的一个 flask 网站使用我的算法。这导致我的网站不断崩溃,因为我部署代码所用的 AWS EC2 实例太小了,不足以处理这么大的流量。网上有些人开始指责我是骗子,因为他们想试试我的算法,却发现网站根本打不开。


这就是我的那篇热门文章:towardsdatascience.com/making-musi…

不久之后,这些批评很快就在许多社交媒体上发展成了火力全开的争论。某些拥有博士学位的研究者愤怒地指出我使用的基于贝叶斯的方法完全就是错的。另一些人则为我辩解,为我的工作做辩护(包括 Ben Lorica)。简单来说,我在互联网的某些地方重新点燃了「贝叶斯派 vs 频率统计学派」的圣战。

起初,我决定向那些因为某些原因而感到被冒犯的人道歉,我也礼貌地问了他们我该如何改进我的方法。但道了几天歉之后,我再也受不了了。这场争辩让人心力交瘁,我只想让自己躲开互联网。我关掉了我的所有电子设备。

然而,应聘时没人问我项目的事情

你可能会觉得尽管有争议,但如果把这个项目放在我的简历中,定能助我找到数据科学工作。但结果是:并没有。除了某个小创业公司的一个人问过我,其他人没人在乎。从宏观上来看,我所面对的炙热火焰只是湾区科技界的飓风吹过来的一点小火星而已。

更重要的是,招聘委员会的成员并不会在这些项目上对我进行测试。因为招聘流程不是看你做过了多少项目。但我看到很多数据科学工作的应聘者却会这么想。

这可不是我的一家之言,在采访 DoorDash 的 Jeffrey Li 的过程中,他也说到了在那些雄心勃勃的数据科学家身上看到的缺点:

「在大多数数据科学家身上,我见过的最大缺点是将机器学习模型与商业效果联系起来。所以,很多非常非常聪明的人会打造出这种非常复杂的五层神经网络。它能做出很好的预测,分数也非常高。但当我们深究这个特定模型的商业效果时,他们通常又难以作答。」

如果数据科学招聘不是基于项目,又是基于什么呢?基于招聘方所说的「智力测试(Intelligence Testing)」。

臭名昭著的「智力测试」


我并不喜欢「智力」这个词,因为这个词暗含了生理禀赋的意思(你要么有,要么就没有)。但不幸的是,我在技术招聘世界里经常(而且是隐秘地)见到这个词。我总是听见有人以某种形式在背后说:「对这个技术工作来说,那个人智力不够/不够聪明。」我最早是在加州湾区的软件工程师好友那里听到这种说法的。

之前,在我看来,这样的说法非常具有压迫性,而且很空洞。但是,在长时间思考了科技界所用的「智力」一词之后,我开始理解其实际的含义了。了解了它的含义之后,我发现这根本就与「生理」无关——也就是说任何人都可以通过充分的准备来提升。更重要的是,我发现了顺利通过数据科学面试的秘诀。

智力测试是所有招聘流程的基础。这是技术问题测试、带回家检验开发能力以及面试问题的基础。智力测试有四大主要元素,即:
  • 分析思维

  • 变量提取

  • 边缘案例检测

  • 流程优化

前面三个是最重要的,拥有第四个会锦上添花。而且当招聘者在前三个方面对你有所了解之后,他们会问到第四个。这四个方面都是为了了解你在未来的技术岗位上的潜力和能力。
简要说明:下面四个技能非常重要,但是理解统计学、写代码和 SQL 也很重要。我觉得这是每个人都知道的显而易见的事情,所以这里就不谈那些知识基础了。

分析思维

分析思维是指将大问题分解成容易解决的不同部分以逐个解决的能力。简单来说。这是要建立一幅心智路线图,其中包含多个检查点,最终达成最后的解决方案。

衡量这部分智力的方式要么是通过实际的编码难题,要么是通过理论上的业务/产品问题。面试官会向你展示一个乍看之下感觉很开放的问题。这是故意的,因为这个问题的答案并不是测试的目的。所以你的解决方案是否真的有效其实无关紧要。这个问题的重点是评估你协调多步计划来解决复杂问题的能力。

为什么要测试这种能力呢?因为在实际的数据科学工作中,有的问题是非常复杂的,难以通过一步到位的方法得到解决方案。因此必须制定战略上的路线图,要列出每一步对业务和技术方案的影响,有哪些优点和缺点。要做到这一点,数据科学家必须具备一个灵活、有战略思维的头脑,才能得到有可识别的检查点的各种有效的解决方案。

对于想要提升这项技能的应聘者而言,可以去解决尽可能多的 Leetcode 问题。也要读读数据科学产品的问题。下面是一个产品问题示例:

一家外卖公司正在发布一款有新 UI 的新应用。其目标是通过增加外卖员的里程数来提升他们的收入。请给出一种测试策略,以便了解这款新应用是否比旧应用更好。

变量提取

变量提取是指为了解决手头上的问题,你能够想出多少个相关的变量。举个例子,给你这样一个场景:「在一栋建筑物中有两台电梯,一些人抱怨说其中一台比另一台慢。你需要什么才能确定这些抱怨是否合理?」

这类思想实验通常是由不太了解数据科学的产品/非数据人员提出,他们想要借此了解你的「智力」。这里的智力是指你是否有能力构想出解决这个问题的变量(能不能想到面试官自己所想到的那些)。

但你怎样才能和一个陌生人想得一样呢?但好在(我认为)这些实验中 99% 的变量都属于这几大类:

1. 时间(高峰时间是否影响电梯的快慢?)

2. 位置(也许某些楼层使用电梯的人比其它楼层多?)

3. 技术(也许电梯存在一个技术问题,这在人的内在感知之外。)

4. 用户统计(建筑物中有什么人?访客会使用一个电梯而工作者则使用另一个电梯吗?)

变量提取为什么很重要?因为其直指实验的核心。执行实验需要相关的变量来进行测试,如果你可以提出更合适的变量来提升测试的准确度,甚至超出面试官的构想,那么这个技能将极有价值。

你可以通过研究尽可能多的不同数据来提升在这方面的智力,像是时序数据、地理位置数据等等。只要能拓展你对不同知识领域数据的了解,都值得一试。


边缘案例检测

边缘案例检测通常是在你的面试官了解完前面两项之后出现。在足够了解了前面两种智力之后,面试官会给你制造一个难题。他/她会用某种方式完全推翻你为解决问题而想出的路线图和变量。

这是面试过程中的难点,因为你会感到不安,因为你的逻辑被发现了漏洞。你要冷静下来,仔细听经理话语中抛出的暗示。通常来说,他们的头脑中已经有一些答案了,你必须想办法找到它。他们会丢出一些线索提示,能提醒你找到他们头脑中的答案。

他们制造这样的能使你偏离思考流程的难题是为了了解你在处理从没遇到过的情况时表现如何。实际上,在数据科学工作流程中,你没想到过的边缘案例还有很多,尤其是在开发产品时。

如何练习?这个还真没法练习。当遇到这种情况时,做个深呼吸,提出问题,搞清楚你需要做什么,并且紧跟线索。


流程优化

最后这一项是可选的,而且如果时间足够,通常出现在技术面试的最后。这一技能基于第一项智力测试(分析思维)。一旦你脑子里面想出了一种特定的方法,经理就会问你还能不能想出解决这个问题的更好方法。

为什么要这样做?因为行业中所有数据科学工作一开始都很粗糙,需要多次迭代才能改进。但这项工作只有在第一版粗糙成果完成后才能进行。因此我觉得这个能力的优先级比不上前三个。


项目到底在什么地方有用?

我相信项目在找工作初期还是有些作用的。在我看来,项目能解决一下问题:

1. 建立自信。很多人将完成项目看作是申请公司工作之前的必要前置步骤(内心的仪式感)。

2. 练习变量提取和优化。项目能让你尝试许多不同类型的数据。让你能通过实验工作流程来优化数据处理方式,等等。

3. 让你有机会赢得初始招聘人员的认可。初始招聘人员的任务不是进行智力测试,而是为面试官筛选候选人,然后让面试官去测试。项目也能让初始招聘人员知道你对数据科学的积极性和投入。项目能帮助你很好地展示出这一点。

但经过初始的筛选后,项目的重要性就不高了。原因有三点:

1. 项目无法帮助你通过技术题测验。

2. 项目无法为你作为数据科学家的潜力提供外部验证——只能告诉面试官你能很好地复制或记忆已有的代码。

3. 面试官没有时间阅读你一页又一页的笔记。他们每天都要处理几百份申请。他们还必须管理自己的团队——这已经足以占用他们的全部工作时间了。

重点是最后一点,你需要的外部验证是你完成过的工作。换句话说,在你的机器学习项目上得到 83% 的 AUC 并不能为面试官了解你作为数据科学家的潜力提供多少帮助。但是,如果你说有数百人尝试过你的机器,你展示的东西就比较有力度了。

还没有被我说服?那最后来听听哥伦比亚大学数据科学研究所主任的话吧:

Jeannette Wing 主任:「有些特定的解决问题的技术和方法是计算机科学家每天都要做的事情。其中包括:

1.如何设计一种算法来解决这个特定的问题

2. 如何将这个特定问题分解为更小的部分

3. 如何定义抽象层

4. 如何定义组件之间的接口

这是求解问题的技术的集合,也是实现大系统和解决大问题的方法——这就是我所说的像计算机科学家一样思考。」

我也曾问过 IBM 一位高级数据科学家:「作为一位数据科学家,最重要的能力是什么?」

他回答说:「IBM 的所有人都有一个共同点,就是他们都是顾问。他们需要有能力与客户合作。他们需要与高管开会并且聪明地探讨解决方案。」

原文链接:towardsdatascience.com/sorry-proje…