一个非典型材料转CS找实习的故事
415在美国是个很重要的日子,很多事情都以这一天为分界线,比如申请确认接受offer与否,比如报税,比如H1b抽签。
去年这个时间点,我还在麦迪逊 Lake Monona 湖边的住处写下了这篇文章
shimmer:Whatever will be, will be
其实也不能算文章,最多也就是个随笔吧。当时大概仔细思考了一个月的时间,最后做出了一个我认为更合适的决定。
转眼之间,一年都过去了。生活的轨迹也如同预想的那样稳步发展着:回国答辩,暑期补习CS基础,来美国上课,刷题,找实习,拿到offer,准备上班。所以一年前的那个决定是好是坏呢?现在仍然看不出来。或者说,决定本身没有好坏,只不过在放弃了一些可能性的同时给予了另一些可能性。现在看起来好不代表未来同样更好,毕竟局部最优不代表全局最优嘛。
在这个一年的节点,觉得自己应该写一点什么好好梳理一下这段轨迹。
2017年4月中旬 - 2017年5月底:
和材料做一个不完美的告别
虽然决定了要转CS但是材料的毕设还是要好好做的是吧,毕竟就算是有再多的不满,也是我花费了三年心血的专业,告别也要画个最好的句号,也算是给自己一个交代。这段时间,我在实验室做了一批又一批的二维薄膜,做成样品晚上去看SEM,做成器件测电化学性能。中途还不幸被抽中了论文查重要提前半个月交毕业论文,那段时间在实验室肝了一个星期,其实现在想来也是挺美好的回忆。带我做实验的访问学者是个很豪爽性格很好也很乐于助人的东北汉子,和他在一起做实验很开心。论文提交前的两天晚上熬夜拿着赶出来的数据写好了初稿交了上去。之后就是与实验室的告别,离开美中大农村,回到北京。
值得一提的是,因为在材料实验室的缘故所以我一直没好意思说我要转行了。还和他们一起参加了match for science的游行凑了下热闹。415过后实验室里的人对我去向都很感兴趣,有几个师兄和我关系很好一直问我要去哪儿,我实在是说不出口啊。。。。后来回了屯里几次,和他们见了几面单独说了,感觉大家对我最终去向的反应还是有点唏嘘啊。
实验室里的人都很好,老板学术能力很强为人也很好,师兄师姐们都挺善良的,我很享受我材料科研生涯的最后一站,感谢他们让我的材料之路留下了一个美好的尾声。
2017年6月:
北京的夏天有着独特的气味,它会侵入你的记忆中占据一隅。
回到学校就要开始准备答辩了,因为毕设做的是目前学术圈很火的二维材料,加上做出来的结果也比较reasonable,答辩很轻松就过了还顺手拿了个毕业论文最高分。毕业季其实也没有那么伤感或者多难忘,和班上人吃了几顿饭,和好朋友们聚了聚也就结束了。反正现在通讯和交通这么方便,想见买张机票随时都能见啊。
那段时间主要就是办很多程序上的事情,所以CS的课几乎没怎么学。临毕业之前想着要好好利用暑假充实一下简历,正好ZL告诉我清华那边有个学长在做一个新项目在招人,抱着试一试的心态就去面试了一下没想到就进组了啊……所以说很多时候不要觉得自己不行什么的,试一试没准就成了。
2017年6月 - 2017年7月:
我一个在钢院学金属材料的,怎么就来清华当产品经理了?
YH哥那时候在做一个很有意思的项目,想建立一套地下的管道物流系统。需要有人写一个中控系统的展示界面。当时我还在补习数据结构和离散数学这种基础课,对于C++的GUI真的是两眼一抹黑,和YH哥沟通之后,我就机缘巧合阴差阳错地成了组里的PM???负责设计整个中控系统的界面分布,风格,交互逻辑,安排代码工作任务以及和硬件组那边的沟通协商。
某种意义上来说这是我第一份有工资的和代码有关的工作。虽然我自己不写多少代码,但是对整个项目开发迭代的流程还是有了很直观的认识(也对改bug的难度有了全新的认识)。更为重要的是,在组里我认识了很多善良而优秀的小伙伴,现在回想起他们感觉大家身上都闪着光。其中我和Y哥说的话算是最多的,那时候心里有什么想法和疑惑都会和他讨论。还记得Y哥在当时我害怕自身水平不够不能胜任工作好几次想放弃的时候鼓励我, 在我因为转行学校降档前途未卜而焦虑的时候陪我吃饭让我别急,在我因为生活问题烦心的时候陪我去五道口喝酒散心。
很惭愧,到了最后离开的时候都没做出什么微小的贡献,但是从他们身上学到了很多东西,看到了更大的世界,我很感谢这段经历。
2017年8月:
ZL家的味道是加州夏天的味道
回美国之后因为房子租期还没开始,在ZL家住了一段时间,之后来了个哥们儿刚从MSE MS毕业,拿着OPT在找工作。这下我俩一下就有共同话题了。没事就和他出门吃个Pho,聊聊找工作的事儿。我也亲眼见证了他从海投简历渺无音讯到LinkedIn各种加人到拿到面试到找到工作的全过程。不过这边的材料工作绝大多数都集中在半导体行业倒是真的。后来ZL有时候就拿这个事儿向我论证材料仍然大有可为以及我转码的行为是多么的naive。
那段时间也没什么别的事情,每天也就继续看看代码的公开课什么的,日子很快也就过去了。
2017年9月 - 2017年11月:
不敢迈出comfort zone的我
九月,开始上课了。第一学期选的是PDP和DB,PDP这门课很奇葩,本来定位似乎是一门教代码规范和程序逻辑的课,非要用一种叫做Racket的语言(lisp系),结果几乎是硬生生上成了函数式编程。DB就比较简单了,没什么好说的。
上课不是重点,重点在于,这个时候,各大公司开始招2018summer的实习生了。
我知道应该去刷题,但是我觉得一来我数据结构和算法的基础还没有打牢,二来我简历上几乎空空如也,加上点开leetcode看了几道题,非常怀疑自己的智商是不是有问题,就自己把自己给吓退了。压根都没有投任何实习。
看着身边的人一个个刷题找内推,前面一段时间我还可以安慰自己说时间还长不急,随着时间流逝,心中的焦虑感也越来越严重,每周学完课程要求的内容,写完作业后就根本就不愿意去想找工作的事。也不怎么去network,白天就整天把自己关在屋子里打游戏,享受着短暂的麻痹,而到了晚上,虚度光阴的负罪感涌上来让人睡不着。这种情况就一直持续到了11月。
中途有一个小插曲,这件事要说回大三那年,那时我为了攒文章申请材料PhD在某所干了大半年,进去之前老板说好赶出了成果给我一篇一作的小文章方便我申请,结果做出结果了去找老板说能不能发一篇IF 5,6左右的文章的时候老板一句“我们不发IF 10以下的文章”就把我怼回去了。没办法,老板不同意我一个本科生有什么办法。只好换了个课题继续搬砖。到了大三暑假离开实验室的时候和老板约好了给二作。(其实当时已经赶不上申请季了所以其实内心也已经无所谓),之后也就没关注这个事情。到了17年11月突然收到某SCI发来的邮件告诉我文章要发表了,点开一看变成了三作,问了师兄才知道老板给Postdoc福利挂名在了我前面……不过那个时候我是真的无所谓,毕竟我已经不需要材料的paper了。但是收到这个消息,心情有点复杂,一方面是觉得自己之前的努力还是得到了证明,一方面觉得自己当时做这些对于现在没什么用真的naive,再一方面就是更加印证了自己之前对材料学界的一些判断吧。
那段时间真的很低沉,觉得自己就是一个loser,但是现在回想起来完全是自己把自己吓住了,事实并没有那么糟糕,只是我缺乏走出舒适区的勇气而已。
2017年12月 - 2018年2月:
开始动手做事了才发现其实没有那么难
颓归颓,然而内心毕竟是有B数的,到了12月,各大公司的实习都快招满了,这时候内心告诉自己真tm不能这样下去了。其实有的时候状态的改变,就是一念之间。于是开始硬着头皮去刷leetcode,从two sum开始一题一题地刚,渐渐的也找到了感觉,渐渐的发现其实也没有那么难了。与此同时跟着网课做了一点too young too simple的项目,也算是渐渐的把简历给充实起来了。
题目刷到mid之后觉得时间太紧张,光靠自己分析总结效率太低,于是去报了九章算法,开始了每周20道mid20道hard的生活。
同时,开始准备简历投实习了。
于是每天就在刷题和做项目中度过。寒假和圣诞节也没有出去玩。
然而毕竟实习投得晚,加上项目经历薄弱以及自己写的简历水平太低,投出去的简历被FLAG拒了一轮,找内推都不好使。这下我更慌了。因为当前的形势是没有实习会非常难过全职工作的简历关,我这个情况多半是要转行失败找不到工作滚蛋回家了,看着上学期4.0的GPA想着tm的绩点高有屁用啊,要是有个工作让我GPA 3.2来换都行。
尤其是,看到投的早的同学拿到的面试题,我发现也不是特别难啊!我也会做啊!
这就很难受了!
但是难受归难受,日子还是要过的,大公司不要我那我去投小公司好了,只要有个地方要我,总比没有实习好。每天看看WayUp,LinkedIn上有没有公司在招实习生的,JD match的上的我都去投一投试试。
但是似乎小公司也不喜欢我,投了那么多家公司,一个面试都不给。
于是学校的Coop系统成为了仅存的希望,系统里有合作的公司可以投,有Amazon, Intui, Oracle之类的大公司,还有很多之前都没听说过的小公司。
于是满怀憧憬地每周投10家公司(学校系统限制),等待着回音。
2018年2月 - 2018年3月:
事情有了转机
最先等来的是Intuit的OA,这是我开始找实习以来的第一个OA。我挑了个黄道吉日打开了链接开始写,然后就华丽丽地出bug了(好像是Java reference 传参出错了来着,基础还是不牢啊)。当时心情比较焦躁,沉不下心去想,所以改了半个多小时,导致整个OA时长有点长,三道题做了一个小时二十分钟这样,但是我确定没有bug而且是最优解。然后就没有然后了。同时做的人50分钟做完,成功进了面试。
之后是Zappos,OA要写Stdin和Stdout, 常年对着Leetcode刷算法题的我手生得一批啊……又挂了。
之后有大半个月没有收到任何面试。
和已经工作的师兄吃了几次火锅,师兄把他当年生物master毕业找工作的心酸历程和我捋了一遍,那叫一个惨。。。经过了那绝望灰暗的一年师兄现在整个人特别洒脱,告诉我说现在的都不是啥事,机会往往不是求来的而是某一天突然就来了,心态要稳不能急,这之前只能好好做好准备。
不过那时候心态已经有点死猪不怕开水烫了。大不了过半年开始找春天的实习呗。怕毛线,该过年过年,该吃火锅吃火锅,该买模型买模型,心态反而比12月1月好多了。我承认我是个loser是个傻逼呗,我就躺地上了生活你还能怎么打倒我,有种来rape我啊。
当然了投简历这种事情没有断过。
师兄果然说的没错。
3月初的时候SF有家start up看上了我的简历,觉得我简历上的一个项目和他们现在做的事情很像,在给我的邮件里展示出了极大的热情并且直接给了onsite。当时收到邮件真的是太惊喜了。我觉得可能就是这家了!
不过他们好像过于热情,周四发邮件就问我:小伙子周五有没有空来SF downtown当面聊聊啊?我想了想这一天的时间啥都没法准备啊。。。刷了快两个月的题都没写过product代码了。。。这要是去了妥妥是跪的节奏。。。想了想找了个借口把面试推到了两周后。还发邮件确认了一下面试要问什么问题,确认了不考算法题之后我赶紧放下了leetcode捡起了JavaScript。但是其实之前的代码是跟着网课敲的所以很多细节还是有理解不透彻的地方,于是之后几乎是完全focus在之前的项目代码上了,课也不怎么听了,作业也不要求bug free了,几乎是把之前的项目从头到尾重新撸了一遍。
根据墨菲定律,如果你想做一件事,实际花的时间一定比预计的多。
我本来以为重新撸一遍之前的项目最多五天就搞定了。但是总会有意想不到的bug出现。
我的项目有一个部分是涉及到python爬虫爬数据集的,在我刷题的这段时间里,目标网站的layout变了,Google的reCAPTCHA(判断请求是人类还是bot发出的)也更新了,我原来的爬虫,用不了了。。。
没有办法,硬着头皮刚,上网翻技术论坛,看别人的源代码,请教群里的前辈。一个方法一个方法地试,差点连TOR都用上了,把爬虫从xpath改成了xpath和beautiful soup混合的奇怪的二不像,最后终于又能跑了。
那种快面试了但是项目还跑不起来,并且不知道问题多久才能被解决的压力。。。真的太大了。。。
你以为撸完项目就结束了?naive!onsite有onsite的坏处,当别人的OA都是给一周写出来提交上去的时候,他们打算让我在面试现场用vue.js写一个前端出来。
啥玩意哦!劳资Angular都刚开始学没学明白呢你要我现场写Vue?
更可怕的是,撸完之前的项目离面试大概就只有四天了。
还是没办法,还是硬着头皮刚。看了一遍Vue的官网教程,大概心里有了个数,然后找了几个网上的项目教程,在面试的前两天做了一个too young too simple very naive 的前端网页,可以显示比特币以太坊等数字货币的实时价格。
离面试还有一天的时候,真的什么都做不下去了,之前肝得太伤了,觉得反正一天也学不了啥了,就玩了一天的守望先锋。
对了,我还把我的所有头像封面签名都换成了锦鲤。
2018年3月14日
代码骑脸怎么输?就问你代码骑脸怎么输?
平常都是十点十一点起床的(三点睡十一点起,不要学我,我已经秃了),那天面试约在十点半,考虑到highway 101以及SF downtown在工作日可能的堵车情况,八点多一点我就出门了。怕路上犯困直接干了一瓶红牛,开车上路。
十点半到了公司,先是和co-founder聊了下,简单介绍了一下公司的商业模式等情况,问了我一些behavior question,比如什么时候毕业,喜欢大公司还是小公司,平时的爱好是什么之类的。我也是real耿直,问我有什么爱好的时候我就说我喜欢打游戏。当时他就愣住了,估计心里在想“这小伙子怎么不按套路来啊”。。。但是问了得了下去啊。。。就和我尬聊喜欢玩哪款游戏,喜欢看别人直播还是自己玩之类的。后来想想当时的表现觉得自己真是傻得可以,再不济我说我喜欢做游戏mod也行啊,多geek范儿!
之后就是技术面,这时候前两个星期的准备就起作用了。两个engineer往会议桌上一坐,我就说我把我代码带来了,我现场给你们演示一下。拿着马克笔在会议室的白板上画我整个项目的架构,然后一块一块拆开来,mac连上投影仪,对着代码一行一行给他们讲这是干嘛的那是干嘛的我为什么要选择这种方式。从前端讲到后端,讲到爬虫,讲到数据集(当时我的电脑里有湾区三分之一的在售房价数据),讲到ML(其实就是Tensorflow的linear regression)。就算我也不是完全明白很多地方,但是我要表现出我什么都懂的样子啊。
很快一个多小时就过去了。看样子两位面试官似乎也被我忽悠瘸了。开始很热情地向我介绍他们公司的技术栈,我有不懂的地方还会停下来仔细和我解释。
说到Vue的时候我说啊你们不是今天下午要我写Vue的前端嘛,我之前写了一个你要不要看看?于是又是一番代码糊脸,这个过程中他们一边看一边说:嗯vue-for显示数据,嗯这个header 的common component,嗯这个用aixo和API通讯,嗯和我们想让你现场写的代码差不多嘛!我就知道嗯,这下可能稳了。
快中午一点了,两位工程师说成了说得差不多了咱们去吃个饭吧,带我去了公司楼下两个街区的寿司店一人买了俩饭团(蟹肉的饭团真香!)。这时候我可能是睡眠不足也可能是聊技术聊傻了也可能是有点得意忘形,总之就是脑子抽了和他们说了我是转专业的刚学CS一年。于是,我就在他们脸上看到了和CEO听到我说我喜欢打游戏时同样的表情。。。我心想坏了。。。傻逼了。。。
回到公司一边吃饭团一边聊天,聊了一些游戏啊每天工作流程啊公司发展方向什么的。最后我问我啥时候现场写代码。他们表示我们想看的你都写完了,加上今天公司大楼网络不好你查不了文档,就不用写了,我们一到两周做决定,回家等消息吧!
出来我就发了条朋友圈:“和面试官谈笑风生”,然后开车去金门大桥看了一下午的风景。
图为当天拍的金门大桥
2018年3月15日 - 2018年4月3日
可是换来成长,可是换来希望
这段时间陆陆续续有一些别的面试过来。印象比较深的是Oracle,面试官脾气很臭。问了我一万个分布式系统和网络通信的问题,一直问一直问问到我完全答不上来为止。有的问题我没怎么听明白向他复述一遍已确认自己的理解是否正确,他还怼我说“是我面试你不是你面试我”。。。到最后我整个人都面懵逼了。。。面完就知道自己挂了。
在等SF那家公司消息的时候得知我们web课的TA,一个有着两年前段工作经验的印度姑娘也去他家onsite面试了,顿时之前那种“稳了”的感觉变成了“要GG”。于是在朋友圈半开玩笑半当真地发了去年寒假去雍和宫玩拍的照片说自己要“云拜佛求Offer”。
因为已经快四月了美国这边实习还没定下来,就麻烦 @朋克雪球兔 panda老师内推了腾讯,找学姐内推了小红书。面的到时候美国没有实习国内也没有,那就真爆炸了。
三月底的时候收到了之前公司的二面邮件。这次的面试主题变成了“深入探讨AWS”。因为他们正在考虑要不要深入使用AWS提供的服务而不仅仅是把代码托管在elastic beanstalk上。
有了之前硬着头皮刚的经历这次我倒是很淡然。没什么,就是肝呗。
于是又是一番看文档找资料Google的过程。面试前一周用Node.js + Express + MongoDB以及AWS API Gateway + Lambda + DynamoDB搭了两套两套功能一样但是不同技术栈的Restful API。又看了很多关于AWS的分析评论文章,觉得已经准备好继续忽悠了。
面试前一天照例转发了锦鲤,还在朋友圈立下Flag说面试过了自己就女装直播(结果大家对这个记得贼牢)。
二面是电面,早上起来特地很仔细地刮了下胡子整理了一下头发。10点钟打开面试链接准备谈笑风生,结果人家对我具体的代码倒不是很感兴趣,一个劲儿问我“你觉得AWS的这个服务有什么优点缺点,你觉得这个需求可以用到哪些服务”之类的问题。还好准备的时候不仅仅是关注了具体代码实现还看了点分析文章,还是能聊下去的。
原定一个小时的面试最后半个多小时就结束了。最后当他们说“今天就到这里吧”的时候我有点不爽。我辛辛苦苦敲了一个星期的demo你看都不看一眼的,不给我表现的机会啊!我就问“你们真的不看一眼我的代码?”,“我PM的经历你们不想了解一下?”。人家表示嘿嘿嘿不了不了,本周内给你答复哈!我也不知道他们是决定不要我了所以懒得理我还是已经决定要我了所以不用问了。
三个小时后,室友和我开车晚饭去吃拉面,在车上收到了公司的offer。
那一瞬间,觉得这一年的各种焦虑、压抑和苦逼,都值了。
2018年4月4日 - 2018年4月17日
如今我站在台上,为你歌唱
因为这家start up给的各方面待遇都还可以,面试的时候觉得公司氛围也很好,大家都很亲切,对技术也有爱。同时比较了一下手里剩下的几个面试,要么要relocate去Boston、NYC,要么就是给的也不多。就打算接了这个offer。
后面一个星期和老板谈了一下offer细节,前两天正式签了合同,开始办CPT。
马上也快final了,之前忙着找工作课也没怎么用心project也没怎么写。这几天都在忙着写project和补习之前的课,还是挺忙的。
但是毕竟找到实习后压力小了很多,生活开始变得有滋有味。周末没事和ZL爬爬山,和 @勃加蕊 嗦嗦粉泡泡澡,和 @徐国曦 在群里水一水,日子还是充满希望的。
回国的机票也买好了,算起来也快一年没回去了。打算先回北京雍和宫还愿,去见见北科还有清华的朋友们,在回家呆一段时间。五月中旬回美国,打算沿着66号公路搞一次从西海岸到东海岸到横跨美国自驾游。六月份就要入职上班好好挣钱啦。
从去年决心转CS,到今年找到实习准备上班这一路走过来。我觉得转CS最大的难度并不是学习专业知识,而是要不断快速准确地刷新对事物的认识。我几乎每个月都觉得上个月的自己somehow naive。比如说因为没信心害怕冷冻期不敢投实习而错过大公司实习机会,比如说2月份之后大公司基本招满了开始轮到小公司招人的时候,小公司更多关注具体技术而非算法这时候刷题其实可以放一放,再比如说面试中一些问题怎么见招拆招等等。但是不管一路上有多少磕磕绊绊,到现在也算是符合了一年前的规划。
以后的日子,愿生活对我温柔以待。
We played hide and seek in waterfalls
We were younger, we were younger
Someday we will foresee obstacles
Through the blizzard, through the blizzard
04/17/2018
(这篇文章断断续续写了三个晚上,最后一次发布了之后在手机上手贱用以前的草稿覆盖了原文导致后面很多内容丢失有重写了一遍,对于我这种懒人来说也算是不小的工程了。但是做一个内容创造者而非单纯的内容获取者的感觉,挺棒的)