从没写过代码到一线大厂,我的五年转专业之路

avatar 407008
xiaohuolong
70792
208
背景
我是13年加入一亩三分地,研究生到现在在这个论坛受益良多,想写点个人转专业的经历分享给大家,算是对这个论坛和帮助过我的人有所回馈。
本科在某一线985学土木类,除了学得最扎实的材料力学,还打得一手好dota,天梯2200,排名前500左右,和PIS中单对位过。游戏打得好直接导致绩点非常低。大三因为个人原因要出国,但从没有研究过出国的事宜,全部交给中介去办。惨痛的结果是研究生被中介忽悠进波士顿某二流学校学Engineering Management,如梦初醒痛定思痛,为了能找到工作决定转专业,上过十多门网课,旁听和选修过CS的课,找实习找工作并且跳槽两次,现在在FLAGUAP某家上班,在这里想分享一下美国这几年的学习找工跳槽经历,对转专业的同学兴许能有些帮助。这篇文章大抵是一篇比较流水账的个人奋斗史,想看跳槽如何准备的可以直接跳至第三次跳槽片段。

入学前:没写过一句代码
研究生第一学期:拿不到面试
研究生第二学期:电面过不了
第一次跳槽:电面全过,onsite全过不了
第二次跳槽:终于能过了三个onsite,一个一线大公司两个中小公司
第三次跳槽:终于能拿到FLAGUAP几个较好的包裹

起步
像上面所说,我的研究生专业是EM,几乎和CS没有任何交集,那个时候所有获得的信息都来自一亩三分地,研究生第一学期我也基本都是在网课中度过的。那时候开始对数据科学感兴趣,了解到这个学科对编程能力的要求相比较更低一些,而一亩三分地那时候的自学风气也很盛,Coursera和Udacity刚开始流行,我网课上了10多门Java, Python, R programming,数据结构和算法课,data mining类的课,也早早地打算好,并顺利地转到同个学院下的Operations Research,其实同样是水专业,学的内容的本质并不大,转专业主要考虑到OR更接近数据科学,对以后找工作身份更友好一些,OR也可以选一些CS学院的课,所以为长远计第一学期结束就换了专业。

对于一个转专业的人来说,最难的不是找到正确的渠道和资源,最辛苦的也不是要在学校课余之外需要不断地上各种课,而是自学CS的过程中,一方面,所学的知识一直是个知识碎片,你不知道怎么把它们粘合连接起来,也并不知道他们到底有什么用,缺一个领路人,另一方面你每时每刻都会看到一些新的名词新的领域,感觉好像自己还是什么都不懂,只会写几个for loop,当你做网课作业的时候看到科班出身的人总能写出优美的代码,调一些你没见过的库,你甚至都不知道去哪里学这些。时间长了你根本分不清是见识的差距还是能力的差距,容易自我否定,这才是前进路上最大的障碍。明明只是资源的不平衡和学习的先后所导致的见识和能力的差异,却很容易给自己扣上矮人一等的帽子,放弃希望,放弃争取,甘于停留在这个圈子。

发展
第二学期我参加Career Fair的时候,那时候还是很稚嫩,简历在CS方面除了网课真是一张白纸,只写了我本科做的土木设计院的实习,和本科在学校做的农场cofounder,career Fair的招聘人员看我简历,问我这农场是怎么回事的时候,我还自信满满地介绍,换来的只是对方尴尬的微笑。其实我不是不知道简历要放相关的经历,但真的是没有任何CS相关经历,只能凑点数提现自己的领导力了。还有特别rude的招聘人员,看到我的专业,直接问:“WTF is this major”,简历被耻笑,专业被质问,已经是家常便饭,也算是给我之后的屡战屡败锻炼了心理韧性。不出所料,没有任何一家公司会招来历不明的专业的无CS经验的人,暑假也只能回国内找实习,我找了一个不知名的小公司的数据分析的岗位。其实我很感激这个实习,回国我只面试了这一家,也在第二天直接拿到了面试。几个创始人都是麦肯锡的大牛,很年轻,其中一个也正在MIT读MBA。我实习正好做了一个非常好的项目,学了很多R和excel的技巧,也通过创始人的关系和MIT的OR博士做了一点算法研究,算是在简历上增添了第一个有实战有insights的经历,为之后的找工作打下基础。

回到美国读第二年的时候,那时候选CS学院的课的时候,还必须等CS的学生选完了有空位了能轮到外系的去选,好在我还是选上了CS的DB课和算法课,开始慢慢认识了很多CS专业的同学和学长。不过当这种夹心人还是挺痛苦的,一头是CS的同学有他们自己的圈子,可能并不带着你玩儿,也并无法理解转专业同学的痛点,所以一起上课并没有带来心理认同,始终觉得自己是个异客。而另一头是本专业的同学基本上都struggle在自己的课程上,也从没有想过要在美国找工作。所以我一直是孤军奋战。我记得有一次我在地铁上弄电脑投简历,正好碰到一个同一个专业的学长,当他知道我在投简历的时候,嗤之以鼻的笑着说:我们专业根本找不到工作的。他自然不会理解我想找到工作的决心,我却理解他自我放弃的原因,因为我们专业的确没有人留下来过。

Amazon始终是一个大量招人大量轮换的血汗工厂,现在是这样,我那会儿也是这样,我那个时候应该是最早开始流行做个QA,然后打个电话walk through一下题目,就能进amazon,我自然也是寄希望于这馅饼能砸我头上,周围有相当一部分朋友靠这方法进了Amazon,我运气不太好被选中去onsite,那算是我在美国第一个很正式的面试了,我还记得那时候我是穿着西装去的,早上到了,大家都在一楼等人来接进去面试,并在等待的时候攀谈交流,缓解一下紧张的气氛,我记得那时候坐我旁边的是个CMU科班,拿着他的mac在写码,然后指着我的领带很装逼地跟我说:你这样穿,面试官见到你第一件事就是把你领带剪了。我听了挺恼的,其实就是嘲笑我太过于门外汉。 Leetcode那个时候只有150题,我也才刚开始不过 30来题的储备量,加上还会变相地考一些计算机的知识,自然是fail了。
我在国内的实习,虽然不比在美国科技公司的实习,也不比国内大厂的实习,但一个实实在在做过项目的实习的确很有加分,我在之后陆陆续续拿到过30+ 个data scientist,data analyst的面试,途径无非就是在linkedin,hired,indeed各种网站海投和找人内推,现在想来曾经的我对数据科学有误区,觉得这是个交叉学科,计算机要求并不是很高,但其实数据科学更考验你的综合能力,扎实的数学统计知识,coding能力,完善科学的分析步骤,清晰的表达能力,真的是发现什么方面都上过课,但每个都只是学了皮毛,面试的时候大多是鸡同鸭讲,没有受过专业训练的,真的不是几门网课可以弥补的, 那个时候每天的心情在拿到面试的喜悦,面试碰壁的心灰意冷中上下起伏的,Leetcode刷到后来,我一天就能刷50题,三天刷一遍,反反复复反反复复,因为Leetcode真的是唯一能看得到抓得住的实实在在的学习工具。

上岸
这种状态一直到4月临近毕业的时候,出现了转机。我在上海的实习公司的创始人之一,在MIT读MBA,他在波士顿开了一个local startup,需要有人来做运营和数据分析,我可以在他公司做实习,虽然工资不高,但足够cover生活成本,opt也可以继续使用,在快毕业还没找到工作的情况下,这真的是一根救命稻草了。
对于非CS专业,非名校,拿到好公司的面试真的不容易,真的是把每一次机会都当做最后一次机会去准备,我一边实习,一边继续刷题投简历面试,找到朋友内推拿到了一个一线老牌Fintech公司的面试,虽然总部在湾区,但他们在波士顿也有分部,其实对于我这种只会刷题的人来说,像这种一二线科技公司是进不去的,因为一旦问你一些刷题以外的东西,大脑就一片空白马上露馅了。这个Fintech的波士顿分公司严格意义上来说是他们新acquire的一个小公司,虽然挂着这个总公司的名头,但是项目和做事风格完全是小作坊,好处是面试难度属于easy到medium的难度,主要还是集中问
问背景和兴趣,而我面试的职位也是偏向QA automation,虽然过程中还是有些不顺利,好在最后还是成功录取上岸了。

上岸感悟:我记得毕业的时候,有个东西需要找系里导师签字,那个导师见到我第一句话就说:我还记得你,你上了很多CS的课,由于你,我们在课程设置中多了CS的选项,给大家更多的选择。我当时感触颇深,在我们学校那一届和上几届,即使是CS的学生,能进一线大厂的也是寥寥无几 (当然我们学校也在不断完善,在我们之后的几届生源也越来越好,大厂也给我们学校越来越多的机会,每年的CS学生的去处都非常好)。我还记得这个导师上的OR课的期末考试,我是第一个交卷,并且提前了一个小时,而其他学生绝大部分需要延长时间才能做完。在系里同学经常桌游聚会的时候,我基本都在旁听和上网课,也认识了很多CS系的同学,有些后来成为了一起奋斗一起受益的良友。所以我想这个导师对我印象深刻,除了我的确课堂表现优异,应该是像我这种到处蹭课到处认识人的厚脸皮的确不多见吧。

整个研究生阶段由于一开始想做数据科学,学了很多皮毛,走了不少弯路,回头想来,坚持下来的原因无非有两点,第一点是为自己的前途担忧,想找一份好工作赚钱,能在美国积累几年实实在在的工作经验。另一方面,我在入学的时候,我发现我们系大部分都是一些没有听说过的二流学校录取过来的,我不敢说我本科学校多好,但在刚入学的时候真的觉得自己被中介坑了。而系主任当时对我们说,觉得我们一学期三门课可能会压力比较大,建议选两门课,我本科最多的一学期一门有13门课,即使算硬课,也至少四门,所以当时在系里我显得非常格格不入,大家每天在桌游火锅旅游享受美国新奇事物的时候,我像一个nerd一样只知道学习上课,自己心里也憋了一股劲儿,因为觉得这么多年的努力,在转专业的那一课全都归零了,不再有光环,不再有学校的资源,一切靠自己,绝不能输。

此外,找工作真的像是爬阶梯,你想爬高阶楼梯,就肯定需要爬过第一第二第三级楼梯,不否认有很多转专业直接去FLAG的同学,尤其是这两年信息更加开放,好的资源和干货更加丰富,拿实习更加容易。但我自认为我是个运气不好不坏很普通的人,没有一步登天,没有一蹴而就,因为自学了很多编程课,拿到了第一个国内实习,因为国内实习认识了创始人拿到了第二个美国实习,有了两个实习最后拿到了第一个全职offer,每一步都是有之前的几步铺垫好,这也同样适用于我之后的跳槽。

跳槽和再跳槽
第一个全职干了大概一年多,虽然干automation,但还是学到不少东西的,算是把一个只会刷题的小白进阶成大概了解到backend是怎么work的职场新人。一年半后开始有了跳槽的念头,主要是做automation的成长空间不大,写代码的机会很少,而且公司波士顿分部的项目其实基本没什么客户,用的技术也比较老,大多数人停留在养老的状态,技术环境也不利成长,我举个例子,组里以前有个title是automation architect的10多年工作经验的老人,那时候我还不会用git,向他请教,他对git的操作方式是,每个branch,会有一个新的文件夹来存,意思就是说,一个git repo,他在local会存很多份,不同的branch是不同的folder,我如获至宝,用这种方法操作了一段时间越想越觉得不对,后来网上自学再自我纠正。

有了跳槽的念头,无非又是开始刷题了,公司分部虽然做的项目比较水,但是毕竟一线fintech大厂,简历上是实实在在的加分,我那个时候先后拿到过Snap, Facebook,Uber,Google,Bloomberg,Two Sigma,Microsoft等,除了Google,去每个公司都参观了一遍,主要都是跪在系统设计上,对系统设计真的是相当有阴影了,那个时候系统设计也是在各个大厂中刚起步,也没有算法班什么的,你能把tinyurl和web crawler这种题说熟了跳槽大厂都很有机会进,但是那时候这些题都还比较cryptic,没有算法,没有Github的总结,没有educative.io,没有标答,在工作中没做过那就是真的不会,FB我记得当时问我的是他们新实现的feature,你的好友有个post,这个时候你在看他的post,正好他的另一个好友给他的post做了comment,怎么做到你这边不用刷新,就能看到这个comment,像这种没有前端的经验,也没准备过design wechat,pull push model什么的,面试起来真的很尴尬。

全军覆没后,真的是痛定思痛,又准备了一年,这一年里参加Hackathon做项目练手,公司正好也有新项目还算是有流量和含金量的,我也稍作参与其中,把这个项目的需求,目的,技术,后端如何交互,如何在cloud环境里scale up细致地写下来整理了一遍。第二次跳槽其实也很痛苦,一方面一个两年半经验的人,在简历上只有一个项目,会经常被质疑,另一方面这个项目其实有相当不完善的地方,我作为一个项目比较边缘的人,面试的时候被有经验的人指出后,也不知道如何去回应和完善。自然也是屡战屡败。第二波面试我面过Airbnb, Uber, Yelp, TripAdvisor, Microsoft, Expedia, Facebook, 一个startup,一个中型公司,也都走到了onsite,最猛的时候一周飞四个城市面试,最后拿到了MSFT和小公司的offer,挂的基本都挂在设计题上。Facebook我记得当时考的设计题不是很难,很可惜后来有了微软offer,没有太细致地准备。
本帖隐藏内容需要登录后才能查看。
    • 890
    置顶回复
    收起
    avatar 2
    Warald
    就业形势好的时候,刷刷题能进大公司。但这两年情况不一样了。今年就业形势估计不会更好。要实现目标,可能得像楼主这样脚踏实地,不断努力,耐心争取机会。

    感谢楼主从普通人的角度分享这么多干货。非常棒!
    给你全站置顶 + 200大米。
    208条回复