心路历程 | 非科班博士转码通关上岸后的经验之谈
这几天无意中在力扣社区发现了一篇很有意思的文章,结合最近很多扣友都会来问“我想要转行程序员,到底应不应该?”的类似问题,所以就想着分享一下,希望这个文章案例,能够给大家一些思考和启发,欢迎积极讨论。
楼主是凝聚态物理博士,2021.3 月开始准备转码,2021 年底拿到了机器学习(计算机视觉)的 offer,目前博士毕业,准备7月赴上海入职。
相信力扣上有不少小伙伴和我一样,是非科班选手,并且希望转码,这里我为大家分享一下我的转码经历,作为参考。
我 12 年开始读本科,专业是应用物理。16 年本科毕业开始攻读博士学位,专业是凝聚态物理,研究方向偏材料。本科和博士都在北京航空航天大学。
转码之前,我计算机方面的知识相对薄弱。具体来说,大一上过一学期的 C 语言课程。博二的时候,为了处理数据,自学了一点 python。博三的时候,为了开展科研,自学了一点 C++,开发了一套几千行的程序。总体来说,除了 python 和 C++ 的一些基础知识之外,一穷二白,计算机基础四大件也完全没学过。
为什么会萌生转码的念头呢?
1、我的科研成果一般。4 篇 SCI 一作虽然毕业绰绰有余,但是想找到一份体面的科研工作(进研究所或者高校),非常困难。
2、博士方向的薪资水平一般。
3、自己对写代码比较感兴趣。一方面。自己在科研过程中写代码感觉挺开心的;另一方面,实验室里有硕士师弟在刷力扣,自己跟着试了一下,发现也挺有意思。
阶段 1:起步(2021.3 ~ 2021.4)
我是 2021 年 3 月开始转码的,当时还没有明确的目标,不知道到底要从事哪方面的工作,只是单纯的刷刷力扣。
还记当年刚开始刷题,就遇到了新人杀手——三数之和,做了一个上午,历经无数报错和超时,才在下午两点成功通过,中饭都没吃上。那天累计有 132 次提交,这个数字直到现在都未曾被自己超越…
刷了一个月,差不多有五、六十题吧,对象就开始鼓励我投简历,找实习。
想想当时也真是初生牛犊不怕虎,投了华为。笔试只做出来一道 easy 题,过了。一面算法题二叉树的最大深度,面试前一天刚好刷过,当时给我激动得够呛,一面顺利通过了。二面算法题需要用到回溯的知识,当时还没学到,没做出来,虽然和面试官相谈甚欢(自我感觉),最后还是没有悬念的挂了。
过了两周,又试着投了腾讯的引力计划(一个面向非科班同学的实习计划),一面就直接凉了。
总而言之,作为一个普普通通的转码选手,没有任何奇迹发生,开局直接跪,就是这么真实。没关系,哪里跌倒哪里爬起来,接着干!
阶段 2:确定方向:后端开发(2021.5 ~ 2021.7)
之前我有提到,虽然我想转码,但是没有明确的方向。上次腾讯面试虽然惨败而归,不过面试官问了我很多计算机基础四大件的问题(计网、计组、操作系统),我当时感觉还挺有兴趣(也可能是因为被无情淘汰,有点不服气),所以那次面试间接帮我确定了转码的方向——后端开发。
确定了方向之后,我重新制定了学习计划,一方面,力扣还得接着刷,另一方面,我也开始恶补计算机基础(数据结构、计网、计组、操作系统)。说来也不怕大家笑话,我那段时间一直在 B 站上看王道考研的视频(这里不是打广告,这个课确实比较适合非科班转码的朋友补基础知识)。实验室里几个玩的比较好的硕士师弟还一老调侃我,说你一个五年级的老博士了,还天天搁这考研。我说老骥伏枥志在千里。
刚开始学四大件,还挺有热情的,但是几周之后,热情就开始慢慢消退了。其一在于,要背的东西实在太多了,缺乏实操的情况下,上周刚学的内容,这周就忘了,非常有挫败感(没错,说的就是你,计网!);其二在于,学习书本知识和我日常的工作状态差异较大,博士以看论文,想创新点,做实验为主,抱着书本狂啃的经历相对而言比较少,所以有点不适应了。
计网、计组、操作系统虽然学习进展很慢,但是刷题一直没落下,基础的数据结构(哈希表、二叉树、图等)、和算法(回溯、二分、动态规划等)混了个眼熟,题量也差不多到了 200。
2021 年 5 月,抱着试一试的心态,我打了第一次周赛,嗯,光荣的一题选手!定级 1507 分,我这个就是完完全全的大众水平啊有木有,不像那些天才选手,随便打几场 knight 了,再打几场 guardian 了,所以感觉我的经历还是挺有参考价值的哈哈。
阶段 3:切换方向:机器学习(2021.8 ~ 2021.9)
之前说到发现自己没有那么喜欢搞后端。8 月放暑假在家赋闲,一次偶然的机会,在 B 站(没错又是 B 站,B 站上的学习资料真的是无穷无尽!)刷到了一些机器学习的应用视频,觉得哇塞好厉害,居然还有这种神仙操作,就开始研究起机器学习了。
最开始,为了图快,刷了几个短系列(几个小时的速成课程),学了又好像没学,感觉没摸着门道。
直到我开始刷吴恩达老师的系列课程(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 的分享,感谢大佬。
https://leetcode.cn/circle/discuss/iKFgik/
(2) 对于想冲击四题的三题选手,可以针对性的练一下第四题,我之前发过一个帖子,统计了最近半年第四题的标签,对于出现频率较高的标签,可以重点关照,搭配方法(1)使用,上分事半功倍
(1) 知己知彼
知己包括两方面,一方面要知道自己喜欢什么(求职意向);一方面要知道自己擅长什么(能力)。
知彼,要换位思考用人单位需要什么。一方面可以从 job description 上知道岗位的职责,然后把自己的项目经历和技能尽可能地往岗位职责上靠拢;一方面可以多跟面试官或者过来人聊一聊有哪些用人单位比较需要,但是应届毕业生却往往不具备的能力,可以着重强化一下,作为你的闪光点。
(2) 保持信心,多投简历
(3) 保持刷题
(4) 面试过程中和面试官保持沟通
以上,希望我的求职经历能给广大的非科班转码选手提供一些经验、鼓励和信心。感谢阅读~
BY /
本文作者:阿柱
编辑&版式:Janson
声明:本文归“力扣”版权所有,如需转载请联系。
点个在看,少个 bug
微信扫码关注该文公众号作者