厌恶到热爱,付出到收获——转码两周年感悟

avatar 357166
qkang
33416
99
今天,我参加了学校的毕业典礼,在成功完成学业的同时,自己长达大半年的找工求职也正式结束。三个offer的结局固然圆满,但是当我发现真的上岸的时候,回想起过去这几年,觉得有太多太多想说的话,想借着这个帮助过无数国人的平台,分享一些自己的心路历程,这篇文章有几个部分,会很长。但是不管你是否在犹豫转CS,还是为了上岸努力坚持,甚至一直饱受失败的煎熬到自我怀疑,希望我的故事能够给你一些帮助。

别犹豫,行动起来

相信有很多朋友和我一样不是CS专业的,在做出是否转码这个决定时,有的朋友可能还是很犹豫的。毕竟人在刚开始学习新事物时,不管是主动还是被动,很容易打退堂鼓:

算了,这么晚了,来不及了
我对这个没兴趣
可能我不是这块料吧

这种思维,会让人优柔寡断,稍微听到别人对这个的负面评价,或者遇到一点挫折就会放弃。

关于晚不晚的问题,我自己是来美国一个学期后才开始转CS,除了上了两门CS课基本靠自学,地里也有很多案例。所以只要你愿意,都不晚。

关于兴趣,楼主自己对于编程甚至是做技术,在相当长一段时间里,都是无比厌恶的。虽然我本科是通信工程,怎么也和编程有些关系,但是说实在的,自从写了一丢丢C和汇编以后,我就对编程say goodbye了,本科写过的代码不超过200行,连最基本的语法也要查书,一度认为自己就不适合搞技术。所以这方面我还是有一些发言权的。

首先我想谈谈什么是兴趣。当你刚接触某个东西,觉得很有趣,想去进一步了解,这只能叫好奇心;而兴趣,是经过一段时间的钻研和实践获得成就感而产生的一种爱好。好奇心是一时兴起,兴趣则是培养出来的。也就是说,如果你没有花时间精力去好好研究和付诸实践,仅仅凭第一印象就认为不感兴趣,这是不负责任的。

兴趣的产生,需要一个外部推力和不断获得成就感。外部推力可以是你的好奇心,这是最理想的情况。但即便没有,它也可以有别的来源。

我大一的时候,因为英语还可以,外语学院的老师要我参加学校的演讲比赛,我当时对演讲完全无感,何况自己还是比较内向的人。但是在老师的“胁迫”下,我硬着头皮报了名,为了不丢脸,只能认真备赛。结果出人意料地拿了第一名。这一下可以说激发了我的潜能,对演讲有了完全不一样的感受,在后来的2年代表学校参加省里的比赛,取得了优异的成绩。

这里,老师的胁迫和怕丢脸就是我的外部推力。而这个第一名就是我的成就感,这个成就感是通过我自己的努力得来的,当我不断获得成就感,我就会越来越有兴趣。

那对于转码这个情境,你需要思考的是,你为什么想转码?是因为高薪,还是因为可以更容易在美就业,还是因为你对象学的是CS?

这背后的原因,就是你的推力。我如果不转码,我只能羡慕那些刚毕业就年入10几万美刀的程序“猿”;如果不转码,我可能因为就业问题回国;如果不转码,我可能没法和我爱的人在一起,开始煎熬的异国恋。所以,即便我对CS无感,为了爱人,为了不996,我也得试试。恭喜你,你被逼踏出了第一步!

外部推力有了,你战战兢兢地踏上了转码的道路,接下来是最重要的,如何获得成就感?

我的建议是,别上来就急着学算法,刷题,先从做一个小项目开始,比如你学校CS专业那些带大project的课,Udemy和YouTube上也有很多项目课,老师会手把手带你做,而且花个10天就能做完。这样的好处是:

1. 可以快速开发出一个实际的应用,能够放到你的简历里;
2. 相比于枯燥的理论知识和刷题,更加有趣;
3. 在这过程中或多或少也会接触到理论知识;
4. 最关键的是更有成就感!!

以楼主自己为例,我在决定转码后就选了一门Web Technologies的课,一个学期下来,完成了6个project,特别是最后顶着deadline,全天扑在图书馆开发了人生中第一个真正的全栈App。看着自己写的几千行代码,进入界面一按按钮,图表、数据立即呈现在你面前,伴随着炫酷的动画效果,这感觉真的很爽。借着这股劲儿,我利用寒假在Udemy上学习了一门网页开发的课程,这门课让我接触了更多的技术,并且跟着instructor开发了一个更牛X的App,并在此基础上自己添加了一些新的功能。看着app上的各种交互,心里是满满的成就感。自此,我对全栈开发产生了浓厚的兴趣。

当你发现你的App所有的一切都在你的掌控之下,你可以随心所欲添加,修改或者删除feature的时候,你会发现写代码是一件多么有趣的事情。当你投入越来越多的精力,写了越来越多的代码时,你便不再会去想什么自己是不是这块料了,你甚至会觉得:原来我写代码还有点小天赋呀!

所以,当你犹豫的时候,最好的办法就是立即行动,给自己半年的时间,心无旁骛,努力学习和付出实践。万事开头难,不管遇到什么困难,告诉自己坚持完这几个月再说,相信我,你会有意想不到的收获,看到不一样的风景。

求职路上,资源最重要

很多同学经过一段时间的准备后,依然拿不到面试,这个原因有两方面:

1. 简历不过关
2. 申请渠道问题

针对第一点,你需要做的是充实自己的简历,提高项目的技术含量,并且你的项目最好focus在一个领域,这样才能体现你这方面的expertise。

重点说一下第二点。在申请公司的时候,海投永远是下下策。因为公司会收到很多申请,你的简历很可能都没有机会被HR看到,自然就是杳无音讯。所以申请渠道很重要。

到这,资源的重要性就体现出来了。什么是资源?一亩三分地是资源,领英是资源,微信群是资源,但所有的这些资源都脱不开一个因素——人脉。

如果你广交朋友,多和同学们接触,你会获得很多非常有价值的信息,比如很多人在朋友告诉他们之前,压根就不知道还有内推这回事,不知道领英为何物,更不知道还有一亩三分地这么高大上的先进论坛。此外,一旦有什么风吹草动,比如某公司开始大量招人,哪个HR或者HM需要招什么岗位,你很快就能知道。而且,如果你的某些朋友成功入职,他们帮你内推绝对比陌生人靠谱得多,他们使用过的一些学习资料,tips,求职经历对你而言都是宝贵的财富。伟大领袖毛主席说过,人多力量大。所以,大家一定要走出去,认识不同的人,切忌闭门造车。

关于拿面试,内推和直接联系HR或者Hiring Manager才是上策。以LinkedIn为例,我建议大家准备几套不同的搭讪模板,分别用于内推,HR和Hiring Manager,一定要简短,有礼貌地直接说明来意,不要觉得不好意思。大概意思是:

XXX您好,

我是A,我在B学校读某专业,擅长某某开发,有X年相关经验,对贵公司/team很感兴趣,能否占用您一些时间帮忙内推一下/请问您的组还有opening吗?

在发送邀请前,把这段话附在notes里,这样一显示尊重,也节约时间,如果对方没接受你的邀请,那就说明没戏,没必要再发简历了。如果对方接受了,多半会回复你,这个时候你就可以顺理成章地把职位链接,简历发过去了。

最终回复你的人可能很少,但是没有关系,每天花上1小时加人,总有人愿意帮助你的,一定要感谢他们,即便最后没有拿到面试或者offer,也请告知一下。

珍惜每一次面试

转专业的拿面试本来就不容易,所以务必认真对待每一次面试。我想重点聊聊面试的timeline,面试准备和面试进行时。

Timeline:

1. 早点投,多投。不要因为某些条件不满足就不投,Job Description,特别是工作经验要求很多时候不靠谱。
2. 不要为了准备一家公司的面试而停止其他公司的申请,多面试才能更快拿到offer。
3. 收到面试预约后不要拖太久,2周足够,早点面bar可能低。

面试准备:

英语:

很多人容易忽略英语能力的重要性,结果就是题目会做,但是说不清楚,白白浪费时间,面试官说的话不能完全听懂,最后被冤枉落得个communication不行的下场。所以,别闷着做题,多给别人讲题,自言自语也行。

刷题:

不细说了,地里有很多精华帖。我的看法是,刷题量是必须保证的,但是一定要打好基本功,算法数据结构就那么几种,好好理解和消化经典题,不要太依赖面经。前400题理解好了,基本可以应对任何算法面试。

简历:

凡是写上去的东西,从Google火星总部实习到最不起眼的做出来了1+1=2,请务必弄清楚细节。为什么用这个技术,这个技术的优点,缺点,某个功能是怎么实现的,必须能说出个所以然。

OOD和系统设计:

先理解概念,什么是SOLID,实际应用的例子,Sharding,Replica,CAP等等。准备常见的题目,自己多在白板上演练,一上来不要拘泥于细节,先从high level出发,设计一个workable的解法,然后再一个个组件细化。

Behavior Questions:

这种问题问的是过去的例子,所以不要泛泛而谈,必须有故事。常见的问题提前做好准备,写好稿子或者提纲。对new grad而言,实习,学校project,学生会,志愿者经历都可以做素材。此外,把写好的稿子给有经验的职场人看看,这点非常重要!作为毕业生,我们对职场的为人处世方式不了解,很多时候还想当然地带着学生的思维,你可能觉得你的故事选的很好,但是在职场老司机看来,你这是天(no)真(zuo)无(no)邪(die)。所以,把问题和你的回答给你的父母,亲戚或者是其他有经验的前辈看看,如果他们有在外企工作的经历,会给你很大帮助。

此外,如果你的回答中谈到了技术,请确保你说的是对的,同时对这个技术有一定的理解。不然面试官可能笑而不语,接着一个follow up你可能就打出gg。

面试进行时:

我觉得面试最重要的是沟通和coding style,特别是在题目没有完全bug free的情况下。不论问的是算法还是设计,好的沟通能力能营造让双方都非常愉快的面试体验,让面试官喜欢和你一起工作,提高你通过的概率。有同学反映自己题目做出来了还是挂了,或者是谁谁谁水平没我高,题目没做出来还拿到offer,问题很可能就出在沟通上。而好的coding style更是会加分不少。

如何有好的沟通和coding style呢?通过亲身体会,我认为有以下几点:

以算法题two sum为例:

1. 澄清问题(clarification)

重复问题,把白板分成三部分,第一部分列出所有的条件:输入输出是什么(类型,pattern),数据大小等;第二部分用来做演算,第三部分用来写代码。

2. 开始在白板第二部分研究面试官给你的例子,为面试官分析问题,比如要解决这个问题,我们需要解决哪些子问题,然后看能否得到一个brute force的解,这里就是检查所有的pair,O(n^2)的复杂度。

3. 面试官肯定会叫你优化,这时你就要积极思考,同时说出你在想什么,比如可不可以不用检查pair,找每个数和target number的差值是否已经存在,这样只需要遍历一遍就行了呀,为了更快检查出来差值是否存在,可以用哈希表实现最好情况O(1)的查询速度。

4. 面试官表示他认可你,这个时候你要总结一下你的解题步骤1,2,3,然后在每一个步骤下,书写对应的代码,中间不需要说太多话,每一个block写之前交代一下,写完后总结一下就行,每完成一个要求,在白板第一部分对应的地方打钩。

5. 可以使用不同颜色的笔,标注不同的部分。

6. 写完以后,跑几个有代表性的test case,时空复杂度分析。

7. 整个过程中,注意好变量和函数的命名,少用全局变量,大的函数一定要拆分成若干子函数,分别负责不同的任务,这样代码可读性高,修改起来也非常方便,比如说面试官说你A函数里有个bug,你可以迅速定位到A函数的位置。大家可以搜索一些关于good coding practice的文章。

实际碰到的题目可能不会这么简单,你的思路可能会卡住,不要慌。面试官想要看到的就是你的思考过程,你需要做的就是告诉面试官你的方向,你卡住的地方在哪里,而不是自己闷头想。你这么做释放了一个积极的沟通信号,那么面试官自然也会给你积极的回应。

此外,如果面试官打断了你,问你what about doing something in this way....这很可能是一个提示告诉你的方法不对。请你一定,一定,一定按照面试官说的做!即便你觉得你的方法马上就要做出来了。要知道算法题就好比走迷宫,你用你的方法发现出口好像就在眼前,这个时候,面试官提醒你尝试另一种方案,而你需要往回走很多步。很多人这个时候根本就听不进面试官的话,觉得自己的方法肯定行,殊不知面试官知道整个迷宫是什么样的,而你看似正确的那条路,很可能最终是一条死路。如果你一意孤行,你的feedback绝对是不好的。

面试过程中,保持自信,保持微笑,开始和结束时的握手用力一点,体现出对对方的重视也是好的印象分

把失败当成生活对你的考验

当你终于拿到第一次面试机会后,你准备了很久,尽了自己最大的努力,但是很遗憾你没能通过。此时,你会怎么做?如果是第二次,第三次,第十次呢?

我的3个offer,是在一周之内拿到的,但是在此之前的半年,我足足挂了11次面试(就是因为前文说的步骤没有做好)。而且,在去年8月实习结束后,我是10个实习生里唯一一个没拿到return offer的,因为组里没headcount。自己谈了3年的女友也分手了。

当初,你是你们小伙伴中最先找到实习的。可现在,你发现身边的朋友们一个个上岸,室友们一个个离去,曾经5个人的学习小组,大家互相mock interview,如今只剩下你一人背靠白板,微笑着对眼前的椅子说: I think this problem can be solved using DFS,what do you think? Can I start coding?

在不断经历失败,离梦想似乎还遥遥无期的时候,你是否想过放弃?

不,我从来没有失去信念,因为我清楚,这是生活在考验我,我要做的,就是迎难而上。

每天依旧是找人内推,刷题,复习,抽空还学学Spring,写写React。累了就看看YouTube,看NBA highlights, 看影评。

在我最煎熬的时候,地里的朋友给了我非常多的鼓励,在这里对他们报以最真诚的感谢。

终于,我游上岸了,虽然很累,但这段挫折对自己而言,弥足珍贵。

如果你面试失败了,好好想想原因,好好总结,争取在下次面试变得更好,就算不断失败也不要紧,上岸只需要一次机会就够了,把它当成老天对你的磨练吧。古人云:天将降大任于斯人也,必将苦其心志,劳其筋骨,饿其体肤。你是要做大事的人,如果这点小苦难都过不去,能有什么出息?身边的人都上岸了又如何,说明你也快了啊。

写在最后

如果你读到了这里,我真的非常感谢你。写了这么多,愿你看完以后,能够从中得到一些启发,上岸不易,且行且珍惜。不管遇到什么困难,希望你不忘初心,坚持到底。请相信,offer会迟到,但绝不会缺席!
  • 620
99条回复