老生常谈的问题:DS要不要转码

avatar 276748
szyyn95
61648
75
好吧我承认这是一个非常烂大街的问题:如果我准备去读DS相关的项目/正在读DS相关的项目,我能不能/要不要转码?这段时间也有些人问到过我这个问题,就暂且开一个帖子说一说这个问题,希望对一些人有帮助。

1. 为什么要转码

一个非常简单粗暴的道理就是DS这个行业适合newgrad的岗位并不算太多,至少比起CS少太多。另外一点则是DS的起步薪水比CS差一点点。确切的讲,第二点并不算非常客观。造成很多人有第二点印象的愿意依然要回到第一点:愿意支付高薪的大公司和明星startup需要的newgrad DS岗位明显少于CS岗。

除此之外,还有一些其他的原因,例如我本人转码的最基础动力在于我个人对于我自己的项目的一些课程设置的不甚满意,以及DS这个领域本身兴趣的逐步衰减。当然这一点私货很多,暂且略过。

无论如何,不管是功利还是不功利的原因,我身边的DS转码个例并不在少数。但是,请一定记住一点:如果你从开始就像转码,那么请认准MSCS,而不是跑来读DS再曲线救国,否则你十有八九会后悔的。原因一,学校开设DS项目不是为了给你转码的,你想上CS课,申请CPT去当码农,你认为学校会乖乖同意吗?说不准对不对?原因二,每年这么多CS newgrad,为什么公司要招你?你学历上的DS就是你的”原罪“,你有说服HR考虑你的理由吗?你知道有多少公司因为各种原因直接过滤掉非CS专业的毕业生吗?

2. 我需不需要转码/什么样的人适合转码
一亩三分地很多转码贴事实上应该叫做:从不相关的本科考入MSCS。这里的”转码”则是属于:我自己并不在MSCS但是我希望进入科技行业做码农。除此之外,如果你之前有一个CS的学位(例如本科的major),那么这里的”转码”用在你身上也不是非常贴切。无论如何,假设你是一个DS专业的grad student而且懂一点点代码,那么接下来的内容会比较适合你。

非常重要的一点在于,并不是所有人都适合/应该转码。假设你是一个对DS及其有热情的人,同时非常不擅长大量码代码的话,怂恿你转码就是在害你。其次,DS本行业的好工作非常多(虽然远远不能支撑每年的应届生就业),我身边的dalao非常能够说明这一点。我个人的感觉在于,转码适合以下几种人。

  • 对CS及其有兴趣的人
  • 对DS失去热情,同时有一点CS基本功的人
  • CS基本功比较好的人
  • 真dalao,学什么都是三天学会

除此之外,我建议各位思考一下转码是不是值得。地里有一些人信奉的CS万能论我个人非常不赞同。非常明显的原因在于,既然你的学位上写的是DS,那么你在DS这个领域就有独特的优势,而一旦离开这个领域,就会有相应的劣势(没错,你和科班CS出身的人永远无法完全公平竞争),而且这个劣势是需要你自己努力弥补的。

3.我的目标应该是什么
很多DS的同仁转码的目标是“Machine Learning Engineer”,这个职位听起来很高大上,但是很不幸的是,在大部分大公司中这个职位对于newgrad是不存在的。newgrad可以去做专精是machine learning的码农,但是首先,他们必须是码农。这就意味着,你的ML再强,你也需要会做算法题。

我个人建议的心态和目标是:瞄准general SWE,但是在简历和面试中突出自己擅长machine learning。ML是你的加分项,但是在SWE面试中并不是你赖以求生的主要手段。永远不要做出一副”我是来做ML的”表情,除非你是超级大佬或者申研究岗(后者已经超出”转码”的范畴了)
同时需要注意的一点是,DS出身的人并不需要一定是擅长ML。你可以标榜自己擅长data engineering和大数据工具的使用----很多DS项目都会涉及这一领域。当然这也需要你有足够的背景。Data visualization也是非常好的一个切入点,但是很不幸的是我并没有听说很多DS项目很认真的在教自己的学生用d3.js。

总的来说,ML/big data/visualization可以作为找SWE时标榜自我而且说服力非常强的三个根据(脑补一下,一个DS学生声称自己对于network很懂行,你会相信吗?),但是不可以做为找工作的唯一目标/手段。最大众化也是最可行的目标依然是general SWE,对,就是面试做算法题的那种。

4. 如何转码
假设你看过了前面的部分,而且你现在想转码,那么下面的三个情况会有一个适合你。以下的内容并不包含general的如何投简历/面试的经验,只说一些具体到DS转行的。

a. 我马上要毕业了/我已经毕业了
说老实话,朋友,我不是很建议你现在临时抱佛脚转行。但是如果你实在是无路可走,而且自认为CS基本功还不错,那么就开始刷题吧。我对这种情况毫无经验,就不误人子弟了。

b. 我度过了/基本度过了MS的第一年
很好,假设你还有至少六个月才毕业,六个月的时间足够你干很多事情。

首先,刷题。总的来讲,至少200+的核心题是需要的。再具体下来,把binary search/binary tree/BFS/DFS这些内容重点看一下,太难的题不要死磕了,收益很小,花费时间很多。

真正重要的在于,如何在仅剩的时间里快速包装自己的简历,让它看起来像是一个CS码农的简历。首先,既然你是DS出身,那么我默认你会有一些比较hardcore的ML项目/实习经历。把他们写上去,重点突出你所用的技术和IMPACT(记住这个词,IMPACT)。其次,如果你之前的CS经历完全是空白,那么最快的弥补办法之一就是通过网课速成一个web app。udemy之类的在线平台有很多资源,这里就不做广告了。这样的一个项目如果做的快,从头到尾的时间不会超过一个月,非常适合”填补简历上的空白“。

如果你还有时间,那么著名网站geeksforgeeks就是你的主要帮手。看一些关于算法和operating system的大纲类介绍文章,对于快速了解CS这个领域有很大帮助。

当然,还是希望各位不要到这个时候才开始准备。如果真的面临这样的情况,请记住题要刷得牢固,面试要能扯淡----你没有太多时间很系统的学习CS基本功了,这样做也不值得。

c. 我还没有开始我的MS/我刚刚开始
首先,你需要反思自己:为什么我要来读DS?被麦肯锡忽悠了吗?

好了,反思完毕。现在的问题对你来说是:如何在一年半/两年的DS项目中把自己变成CS学生。你有很多的时间,但是不要浪费他们。

第一点,和上面的内容一样,你需要刷题。既然你有时间那么就越多越好,400+就是个起步价。除此之外,你有时间系统的学习刷题的核心:算法。强烈建议报一门学校的课。算法这门课,有作业和考试的重压下的学习深度,和自己报这本书随便看看的深度,完全不是一个档次。而且,这门课是你最需要深度了解的。好消息是,很多DS专业对于自家学生报算法课很宽容----利用好这一点。当然,如果你本科上过算法课,那么请忽略这一条----刷题去吧。

第二点,既然你有很多的时间,那么系统的在学校上课永远比自学强一万倍。对于找工作这个功利的目标而言,CS值得上的课主要是四门:algorithm,operating system,data base以及computer networks。四门课重要程度递减,前两门极其重要。如果你没有足够的时间/学分/学校的宽容来上所有的课,那么就按照这个顺序上,而那些没上的课,最好最好看一本靠谱的教科书系统地了解一下(见最后一部分)。如果你还有其他的时间上CS课,当然你可以上一些类似于distributed system一类的课,但是我更建议的是上上水课,然后花时间来找工作。要不要上compiler/security之类的课?well,我不会拦着你去毫无意义地自虐......

第三点,课外的自学。虽然你(至少是认为)自己自学了很多,但是对于公司和HR来讲,你依然是DS学生,因此他们期待的你的长处依然是之前说的三条:ML/big data/visualization。
  • ML跳过,这是你的老本行,你应该很懂。
  • big data方面,如果你有足够的热情,而且有足够的知识储备(DB,OS和network你都需要懂一些),强烈建议去了解一下big data tools背后的设计和理论基础,例如,看一下著名的amzn.to。Hadoop,Spark,Hive,Cassandra样样精通?对于大数据工具的使用不需要刻意去尝试,根据实习和项目学习就可以(关键是,你不可能学习所有)
  • Visualization,这一条你还不如说是general front end。如果你对这个感兴趣的话可以深入研究,我个人并没有(除了一个d3写的小玩意之外),在这里就不详细说了。当然,general front end是一个天坑,我个人的建议依然是在这里点到为止,除非有特殊的个人兴趣。


第四点,找实习。这一点是废话,就不多说了。唯一要强调的是,一个真正的CS 实习才 能很大程度上说服HR你是一个合格的SWE candidate,而不是一个不知道从哪里冒出来的转专业菜鸡。当然类似的问题来了:如何在找实习的时候说服HR?这是一个先有鸡还是先有蛋的问题,我并不知道怎么解决,但是很明显你必须解决(大雾)

5. 最后的一点总结
  • DS转码并不适合所有人,而且一定不要抱着转码的初心来申请DS----学校也不傻,转码的压力很大程度的上会有学校课程和项目设计的不配合的因素。
  • ML/big data/visualization可能会是你的优势,甚至是HR看你时持有的stereotype,但是不要只会他们。
  • 转码这条路越早开始越好,而且不要浪费你的时间。每个学期选的课都会直接影响你的简历在HR心中的说服力,以及你个人对CS这个领域的掌握程度。光刷题是远远不够的。

另外推荐几本书。OS和network的教科书,我个人很推荐Andrew Tanenbaum写的两本,Google一下就有pdf。另外就是amzn.to,不过这本书有点hardcore,不建议每个人都一定要看。

周末在家随便写写,如果有其他问欢迎跟楼。然后,走过路过欢迎加分......

补充内容 (2020-4-26 00:38):

最近地里有另一个(有一些悲观的劝退气息的)讨论DS/DA行业的的帖子, 看这里:instant.1point3acres.cn
我本人不想对里面的观点有任何倾向性评价,但是各位也可以参考下。
  • 473
75条回复