这几天无意中在力扣社区发现了一篇很有意思的文章,结合最近很多扣友都会来问“我想要转行程序员,到底应不应该?”的类似问题,所以就想着分享一下,希望这个文章案例,能够给大家一些思考和启发,欢迎积极讨论。
简介
楼主是凝聚态物理博士,2021.3月开始准备转码,2021年底拿到了机器学习(计算机视觉)的offer,目前博士毕业,准备7月赴上海入职。
相信力扣上有不少小伙伴和我一样,是非科班选手,并且希望转码,这里我为大家分享一下我的转码经历,作为参考。
动机
我12年开始读本科,专业是应用物理。16年本科毕业开始攻读博士学位,专业是凝聚态物理,研究方向偏材料。本科和博士都在北京航空航天大学。
转码之前,我计算机方面的知识相对薄弱。具体来说,大一上过一学期的C语言课程。博二的时候,为了处理数据,自学了一点python。博三的时候,为了开展科研,自学了一点C++,开发了一套几千行的程序。总体来说,除了python和C++的一些基础知识之外,一穷二白,计算机基础四大件也完全没学过。
为什么会萌生转码的念头呢?
1、我的科研成果一般。4篇SCI一作虽然毕业绰绰有余,但是想找到一份体面的科研工作(进研究所或者高校),非常困难。
2、博士方向的薪资水平一般。
3、自己对写代码比较感兴趣。一方面。自己在科研过程中写代码感觉挺开心的;另一方面,实验室里有硕士师弟在刷力扣,自己跟着试了一下,发现也挺有意思。
转码经历
总的来说,我的转码历程主要包括以下几个阶段:开转(没有具体目标)-后端开发-机器学习-求职-拿到offer之后。
阶段1:起步(2021.3~2021.4)
我是2021年3月开始转码的,当时还没有明确的目标,不知道到底要从事哪方面的工作,只是单纯的刷刷力扣。
还记当年刚开始刷题,就遇到了新人杀手——三数之和,做了一个上午,历经无数报错和超时,才在下午两点成功通过,中饭都没吃上。那天累计有132次提交,这个数字直到现在都未曾被自己超越…
刷了一个月,差不多有五、六十题吧,对象就开始鼓励我投简历,找实习。
想想当时也真是初生牛犊不怕虎,投了华为。笔试只做出来一道easy题,过了。一面算法题二叉树的最大深度,面试前一天刚好刷过,当时给我激动得够呛,一面顺利通过了。二面算法题需要用到回溯的知识,当时还没学到,没做出来,虽然和面试官相谈甚欢(自我感觉),最后还是没有悬念的挂了。
过了两周,又试着投了腾讯的引力计划(一个面向非科班同学的实习计划),一面就直接凉了。
总而言之,作为一个普普通通的转码选手,没有任何奇迹发生,开局直接跪,就是这么真实。没关系,哪里跌倒哪里爬起来,接着干!
阶段2:确定方向:后端开发(2021.5~2021.7)
之前我有提到,虽然我想转码,但是没有明确的方向。上次腾讯面试虽然惨败而归,不过面试官问了我很多计算机基础四大件的问题(计网、计组、操作系统),我当时感觉还挺有兴趣(也可能是因为被无情淘汰,有点不服气),所以那次面试间接帮我确定了转码的方向——后端开发。
刚开始学四大件,还挺有热情的,但是几周之后,热情就开始慢慢消退了。其一在于,要背的东西实在太多了,缺乏实操的情况下,上周刚学的内容,这周就忘了,非常有挫败感(没错,说的就是你,计网!);其二在于,学习书本知识和我日常的工作状态差异较大,博士以看论文,想创新点,做实验为主,抱着书本狂啃的经历相对而言比较少,所以有点不适应了。
计网、计组、操作系统虽然学习进展很慢,但是刷题一直没落下,基础的数据结构(哈希表、二叉树、图等)、和算法(回溯、二分、动态规划等)混了个眼熟,题量也差不多到了200。
2021年5月,抱着试一试的心态,我打了第一次周赛,嗯,光荣的一题选手!定级1507分,我这个就是完完全全的大众水平啊有木有,不像那些天才选手,随便打几场knight了,再打几场guardian了,所以感觉我的经历还是挺有参考价值的哈哈。
阶段3:切换方向:机器学习(2021.8~2021.9)
最开始,为了图快,刷了几个短系列(几个小时的速成课程),学了又好像没学,感觉没摸着门道。
直到我开始刷吴恩达老师的系列课程(20小时起步的那种),才打开了新世界的大门。吴恩达老师讲的非常清晰,循序渐进,而且浅显易懂,对非科班选手来说很友好。他有一门机器学习和一门深度学习的课(都是免费的!),如果感兴趣的话可以先学前者再学后者。
吴恩达老师的课虽然讲的很精彩,但是偏理论,如果只上他的课,会发现缺乏实践能力,而且课程比较老,16年之后的研究成果就讲的比较少了。后来,我又在B站发现了两个宝藏:李沐老师和李宏毅老师!前者是亚马逊的大佬,后者是台大的老师,李沐老师有一个《动手学深度学习》的系列课程,手把手教你怎么写神经网络;李宏毅老师则讲了很多相对前沿的研究成果,而且同样通俗易懂。
暑假在家的一个月时间里,我就在几个老师的轮番栽培下,快速成长。
当然刷题也没落下,随着题量的不断积累(差不多400题),我也逐渐从1500分的一题选手,成长为保2争3的1700分选手了✌
阶段4:屡战屡败的求职之路(2021.10~2021.12)
在醉心机器学习的过程中,我完全将求职的事抛诸脑后,总感觉自己学的还不够,想准备充分一点再投简历,所以完美错过了8月9月的求职旺季(虽然不错过其实拿到offer的机会也不大,哈哈)
后来我对象实在看不下去了,开始每天不厌其烦地催我投简历。于是我正式开启了我的求职之路。
现在回想起来,那真是一段压抑的时光。没有深度学习方面的顶会论文,也没有实习经历,靠着985的背书,和几篇物理方向的一作paper,想拿到深度学习的offer简直是难如登天。。。
投了很多企业,一部分简历被拒,偶尔倒在笔试上,大部分时候倒在一面,因为每当面试官问我项目经历时,都乏善可陈,这注定了面试结果的悲剧。
后来我开始思考如何能够改变被动的局面,显然需要针对上述问题下手。
于是我开始尝试着去kaggle上打一些非常简单,对硬件需求不高的小比赛,虽然往往名次一般,但是好歹可以写在简历上了;然后跟着李沐老师写了一个简单的SSD(目标检测网络),并且学习了相关网络(RCNN系列、YOLO系列等)的知识,在面试的时候总算不至于乏善可陈了。除此之外,在之前的一些失败面试中,我发现实际的工程能力也是面试官比较看重的,所以我也学习了一下git的使用,作为锦上添花。
当然,即使做了上面这些,我仍然在不断地经历一次又一次的面试失败。
等到11月底,仍然颗粒无收的我的情绪已经非常沮丧了,一度想要放弃转码,滚回去做博后了,结果11月底突然收到了一家公司的二面通知,在一周之后又收到了三面通知,最后神奇的通过了!就是来的这么突然,让人没有一点点防备。
后来谈薪环节,hr开出的工资是博后的两倍,我没有任何argue,直接同意,签了三方,结束了我的求职之路。
求职这段时间,为了补项目,刷题就比较少了,周赛也没怎么打,这也导致了一些笔试翻车的情况出现。大家不要学我,求职的时候题不能停。
阶段5:天梯慢慢爬(2022.1至今)
拿到offer之后,整个人的状态就轻松多了,再加上毕业季也没有那么忙了,所以刷题也可以继续保持。不知不觉中,题量就慢慢涨到了700,心态放平之后,竞赛分也从1700+涨到了2000+,希望有朝一日能上个guadian吧~
这里分享两个周赛上分的方法:
(1)你现在周赛多少分,就去刷比你自己高100~200分的题,题目对应的分数可以参考zerotrac的分享,感谢大佬。
(2)对于想冲击四题的三题选手,可以针对性的练一下第四题,我之前发过一个帖子,统计了最近半年第四题的标签,对于出现频率较高的标签,可以重点关照,搭配方法(1)使用,上分事半功倍
求职经验
经历了多次面试,我也积累了一些经验教训,抛砖引玉,和大家分享一下。
(1)知己知彼
知己包括两方面,一方面要知道自己喜欢什么(求职意向);一方面要知道自己擅长什么(能力)。
知彼,要换位思考用人单位需要什么。一方面可以从jobdescription上知道岗位的职责,然后把自己的项目经历和技能尽可能地往岗位职责上靠拢;一方面可以多跟面试官或者过来人聊一聊有哪些用人单位比较需要,但是应届毕业生却往往不具备的能力,可以着重强化一下,作为你的闪光点。
就拿我个人来说,虽然我在机器学习方面的项目经验在很多计算机科班同学眼里不值一提,但是我作为物理选手,可能数理基础会相对而言好一点;此外,我作为博士,接受了完整的科研训练,发表了几篇Q1区的paper,虽然不是计算机方向,但至少表明我掌握了科研的泛式;而且,机器学习和代码方面完全是自学的,说明我对这方面比较感兴趣,而且自驱力比较强。以上这些可能是我最终拿到offer的原因(我猜的,也有可能单纯因为公司缺人)。
(2)保持信心,多投简历
很多时候,没有拿到offer,不是因为你不优秀,而是因为你的能力、经验与应聘岗位的匹配度不高,所以不要因为几次的失败就妄自菲薄。多投简历,多尝试,总有机会能撞上一个和你匹配度比较高的岗位!
(3)保持刷题
除了投过的两家国企不用手撕代码之外,面试的所有其他企业都是要手撕代码的。所以一定要多刷题,保持手感,而且要保证自己的一次性正确率,因为在面试过程中,由于紧张,且没有测试用例,debug会比平常在力扣上刷题的时候难很多,所以这也是为什么很多过来人推荐大家打周赛,因为周赛的紧张氛围和编码环境是和面试比较接近的(相比于平常刷题来说)。
(4)面试过程中和面试官保持沟通
我在面试过程中,有好几次遇到比较困难的题,因为紧张,思维短路,大脑一片空白,不知道大家有没有遇到类似的情况。这时候千万别慌,也不要一直闷头瞎想,在经过一段时间的思考没有头绪之后,果断深吸一口气,开始和面试官沟通,比如“我有点紧张”、“我这题的思路是xxxx,但是xxxx问题没有想清楚”,也就是说要勇敢地、坦诚地表达自己的想法和困难。为什么要这样做呢,你的面试官通常是你未来的同事,或者领导,你在遇到问题的时候,是选择积极地与大家沟通,还是闷不吭声憋在心里,会很大程度上影响团队的工作效率和相处融洽程度。面试不仅仅是考察一个人的知识或者代码能力,也会考察一个人的情商,好不好相处,有时候后者甚至比前者更重要(我猜的)。
写在最后
以上,希望我的求职经历能给广大的非科班转码选手提供一些经验、鼓励和信心。感谢阅读~
BY/





