MagickRitual
2021-06-08T14:31:19+00:00
原贴首发于网事杂谈板块,马上要冲水了,应谭友的要求转到这个板块,希望能帮到正在纠结选专业的准大学生以及研究生想转计算机的学生。
先说个人建议: 不要想着曲线救国,想学计算机就报考计算机
先说个人经历。985本科数学(分流统计学方向),研究生计算机专业硕士(电子信息)。本科成绩基本上在年级前10%左右。数学系其实和高中差不多,没有那么多花里胡哨的课,就是上课听课,下课做题,课后订正,考前刷题,和高中的学习模式非常相似。至于大学数学课学的东西,和高中是天差地别。大学数学最突出的特点就是抽象,除了微积分和概率论之外,都是抽象的理论与推导。
这些课程让我现在来说,确实都没什么用。目前转专业后觉得这些东西基本上会一些基础的东西也够了,如果要继续深入学术研究,这些知识也只是个皮毛。不过我就业方面不是朝着数据分析去的,所以这里不做展开。就业方面,这些课程基本上是为了数据分析岗位服务的,但是很少有数学系出来直接就业的,考编方面教师比较吃香,考公方面大部分是税务和海关。数学系的升学率非常高,大概在50%左右,大部分人的选择都是金融和统计,少部分继续研究纯数学(应用数学),还有少部分去计算机了。
大三结束,本来认识嘻哈二校的一个教授准备过去读研,后来他们学校的计算机根本不收数学系的学生读研,成绩再好也直接拒。最后拿到了上海某985的软件学院和本校计算机院的保研资格,最终保研去了本校计算机。期间一个小插曲,实验室收24个人,最后自我介绍的时候发现只有我一个人是数学系,剩下要不是计算机,要不是网络安全,要不就是软件工程的。实验室是做CV的,负责招生的导师是一个学术大牛,连着好几年中顶会,每年十几个学生挂名20+篇文章。看到我的简历就说,实验室不喜欢数学系的学生,因为最近几届的招进来都发不出文章,要帮他们毕业,而且就业去向也不太好。最终软磨硬泡下导师说给我两个月时间,然后手写代码,证明自己的代码能力过关就录用我,最终如愿以偿。
大四刚好赶上疫情,研一才开始正式研究。读研之前漫无目的地看了很多论文还有pytorch之类框架的网课,但是这种学习是非常长期的事情,短期内学术上想要有成果是非常难的。研一刚开学的时候师兄刚好有一个课题,于是苦修两个月,我作为第二作者,11月投出了第一篇CVPR,最终225被拒(三个审稿人给意见,1代表最好,5代表最差)。顺着这个思路修改再投ICCV,前两天出结果,335,已经撤稿。目前论文已经投到论文回收站了,找了个开发的实习,准备跑路了。
研究生做的课题基本上都是深度学习,这里面对数学的要求已经远远不及以前了。原因在我看来,是2012年AlexNet提出以前,人工智能和图像处理这一块基本上基于特征学习、小波变换这一类方法在做,再加一些机器学习的基础方法,例如SVM、CRF、MCEM之类的,这些知识非常硬核,对于数学的要求非常高。AlexNet提出之后有一段红利期,这段时间神经网络的迅速发展,这玩意用数学都说不清楚,但是它的性能确实比之前纯理论推导出来的要更好。这导致了就算不会数学,也可以构建很优秀的网络,就算会了数学,代码能力不足导致搭建不出来也是白搭。也就是说,数学不再占那么大的比重了。数学方面只要会高数和代数,还有一些数理统计的知识基本也足够了。反倒研究生最重要的不是基础知识而是看文献,有自己的想法或者有课题,然后有代码能力把实验做出来,就能发文章。 当然,计算机本科的学生读研其实在知识储备上也没有太大优势,因为这些东西本科都没学,最大的两个优势反而是编程的能力还有学院的资源,以及可以提前接触导师、提前进入实验室开始做研究。
计算机硕士的就业,目前看来9个开发工程师1个算法工程师。算法很多数学系的学弟都不知道算法、开发、数据分析意味着什么。这里就不得不提到底什么是算法。算法这个概念太广了。算法工程师是算法,算法研究员也是算法。从贪心算法到模拟退火算法都是算法,一只猴子打开IDE,import pytorch之后把A网络加B损失放一起也是算法。数学的算法可能适合做算法研究员,就是发论文做学术的那种。但是大家适合做学术吗?我敢断言:大部分人不适合做学术,读研最初的目的也不是为了做学术。
目前以个人的理解,算法分为算法研究员和算法工程师。算法研究员算是理学集大成者,一般是校企合作项目,进去与在实验室做研究差不多,要做研究、发论文和专利,一般有些导师会派博士生去跟企业合作。大厂的算法岗一般指的是算法工程师,属于理学与工学的结合。工作主要是负责前沿算法的落地,就是从论文到应用这一步,实际的工作就是每个组复现论文,然后比谁的性能更好。目前岗位来看,算法岗的实习非常卷,没有论文天生低人一等。另外算法岗对于研究方向也有偏重,喜欢那些能落地的、更加传统的深度学习方向,例如目标检测、图像分割、强化学习。算法岗的代码要求也更高,手撕通常是LeetCode中Medium的题,笔试就是5道Hard。个人对于算法岗的就业形势并不太看好,因为从就业的广度来说算法基本上限定大厂和独角兽,还有一些主攻算法的公司。很多小厂根本养不起算法工程师,国企银行对于这一块的需求也并不是特别大。从深度上看,大家研究生学的东西都是算法范畴的,但是真的并不需要那么多人做算法,算法岗永远是僧多粥少。这也就导致算法出奇的卷:大家研究生为了毕业都在学算法,但是并不需要那么多算法,那么当然是有顶级会议论文的人优先。
至于开发工程师,基本上是工学的代表。开发岗位很多,一般分为前端、后端、客户端、测试,以后端服务器为例,就是一些网络编程,工作主要是负责实现一些功能,也就是写业务。不管是什么岗位都非常看中项目经验,包括课程项目的经历。开发的就业面相比于算法会广很多。但是问题是,研究生学的东西对于开发几乎没有任何帮助。开发的东西都是本科学的,本科计算机通常都有项目经历,但研究生没有。很多开发的面试官根本不知道深度学习,根本不关心你研究的项目,更多的关心的是你工程上的见识和水平,例如有没有用过Linux开发环境,知不知道C++的内存特性,有没有看过8000行以上的项目代码。有很多大厂(例如腾讯)计算机本科和硕士研究生开发岗的起薪是同一水平。
以个人春招面试实习的经历,想拿好的算法Offer,真的需要实力非常硬;想拿好的开发Offer,只要背好408八股文,有一定的项目经历,研究生就算什么都不学也能靠本科的知识储备进大厂。算法的面试非常硬核,一般先问研究经历和论文,然后是算法八股文(机器学习和深度学习基础,Boosting,Bagging,SVM,EM,手推BN层,计算Kernel Size,Loss和Regularization),最后是一道Medium的题目(无外乎BFS,DFS,DP)。面的腾讯TEG,竞争很大,在自我感觉良好的时候被淘汰了。最终一个多月的时间恶补计算机本科的课程,转开发了。转的过程也非常不愉快,期间一边学一边面,每次都会有没复习到的地方,以考代练。而且每次面试官都会说我为什么没有项目经验,有时候会用更难的题目来劝退我(例如手撕Hard),好几场面试中途直接主动挂电话。而且这些算法题,数学系也是绝对的劣势,数学知识完全帮不上忙,这些反而是计算机本科经历过机试、ACM的学生很亲切的题目。最终面了十几场,拿了一个开发的实习Offer。
另外实验室不一定会放实习,更不一定会放开发的实习,一定要选择好导师和实验室。没有实习,去秋招就不好进大厂,更别说SP、SSP。例如我们实验室的政策是,不发论文不给实习。这是非常尴尬的情况:要想找到好工作,要么拼命发论文卷算法,要么水一篇论文转开发。很多人觉得如果做开发相当于白读了研,包括我的导师也这么觉得。实际上确实白读了。
最后聊聊个人理解,不管是什么系转计算机,都要面临的问题是:很多计算机研究生学的东西、做的研究一般都是属于算法岗范畴,算法太卷了,除非读到博士,或者特别有能力,否则大概率转开发。转开发需要计算机本科的知识和项目经历,这恰恰又是跨专业最缺乏的。学校的培养方案不是拍脑袋拟出来的,计算机所需要的数学知识在计算机本科课程里面都囊括了,别听人天花乱坠的吹数学转计算机,本科想学什么就选什么。
附上一些课程让大家看看差距,算法岗需要的用红色标出,开发岗需要的用蓝色标出,非常直观,大家自行考虑。
以下是我在数学系的时候学过的必修课程:
数学分析,高等代数,常微分方程,偏微分方程,实变函数,复变函数,泛函分析,拓扑学,概率论,数理统计,回归分析,非参数统计,复杂数据分析,数值分析,随机过程,统计计算。
985硕士计算机在读,目前研究方向是深度学习里面的计算机视觉(CV),具体方向是生成对抗神经网络(GAN),这是我学过的研究生课程:
机器学习与模式识别,人工智能基础,数字图像处理,数值分析,多媒体中的人工智能、软件中的人工智能。
附带参考,以下是我校本科计算机中的重要课程:
高级语言程序设计,数据结构与算法,汇编语言,计算机网络,操作系统,计算机组成原理,计算机图形学,数据库原理,设计模式。
太长不看版:
1.不要想着曲线救国,想学计算机就报考计算机。
2.如果你要转计算机的研,先了解什么是算法岗,什么是开发岗。
3.如果你确定要转计算机走开发路线,先去把计算机网络、操作系统、C/C++/Java的语言特性等课程全部自学一遍,再看看JD来决定下一步的学习目标。每日打卡LeetCode,至少要到看到Medium也不慌的地步。然后Github上找自己语言做的项目,一定要动手去做。读研选导师的时候找那种最水的,最好不要求论文的,放实习,手头有很多工程项目的。
4.如果你确定要转计算机走算法路线,先去把CS231N、吴恩达的机器学习、李宏毅的深度学习、李航的统计方法给看了,然后早点去实验室做研究,早点投出顶会论文,最好再考虑一下要不要读博。LeetCode至少刷到Medium乱杀的地步,想笔试做出好成绩最好刷ACM的题。研究生选导师一定要找最近几年发论文多的,既然你要卷就要做卷王。
先说个人建议: 不要想着曲线救国,想学计算机就报考计算机
先说个人经历。985本科数学(分流统计学方向),研究生计算机专业硕士(电子信息)。本科成绩基本上在年级前10%左右。数学系其实和高中差不多,没有那么多花里胡哨的课,就是上课听课,下课做题,课后订正,考前刷题,和高中的学习模式非常相似。至于大学数学课学的东西,和高中是天差地别。大学数学最突出的特点就是抽象,除了微积分和概率论之外,都是抽象的理论与推导。
这些课程让我现在来说,确实都没什么用。目前转专业后觉得这些东西基本上会一些基础的东西也够了,如果要继续深入学术研究,这些知识也只是个皮毛。不过我就业方面不是朝着数据分析去的,所以这里不做展开。就业方面,这些课程基本上是为了数据分析岗位服务的,但是很少有数学系出来直接就业的,考编方面教师比较吃香,考公方面大部分是税务和海关。数学系的升学率非常高,大概在50%左右,大部分人的选择都是金融和统计,少部分继续研究纯数学(应用数学),还有少部分去计算机了。
大三结束,本来认识嘻哈二校的一个教授准备过去读研,后来他们学校的计算机根本不收数学系的学生读研,成绩再好也直接拒。最后拿到了上海某985的软件学院和本校计算机院的保研资格,最终保研去了本校计算机。期间一个小插曲,实验室收24个人,最后自我介绍的时候发现只有我一个人是数学系,剩下要不是计算机,要不是网络安全,要不就是软件工程的。实验室是做CV的,负责招生的导师是一个学术大牛,连着好几年中顶会,每年十几个学生挂名20+篇文章。看到我的简历就说,实验室不喜欢数学系的学生,因为最近几届的招进来都发不出文章,要帮他们毕业,而且就业去向也不太好。最终软磨硬泡下导师说给我两个月时间,然后手写代码,证明自己的代码能力过关就录用我,最终如愿以偿。
大四刚好赶上疫情,研一才开始正式研究。读研之前漫无目的地看了很多论文还有pytorch之类框架的网课,但是这种学习是非常长期的事情,短期内学术上想要有成果是非常难的。研一刚开学的时候师兄刚好有一个课题,于是苦修两个月,我作为第二作者,11月投出了第一篇CVPR,最终225被拒(三个审稿人给意见,1代表最好,5代表最差)。顺着这个思路修改再投ICCV,前两天出结果,335,已经撤稿。目前论文已经投到论文回收站了,找了个开发的实习,准备跑路了。
研究生做的课题基本上都是深度学习,这里面对数学的要求已经远远不及以前了。原因在我看来,是2012年AlexNet提出以前,人工智能和图像处理这一块基本上基于特征学习、小波变换这一类方法在做,再加一些机器学习的基础方法,例如SVM、CRF、MCEM之类的,这些知识非常硬核,对于数学的要求非常高。AlexNet提出之后有一段红利期,这段时间神经网络的迅速发展,这玩意用数学都说不清楚,但是它的性能确实比之前纯理论推导出来的要更好。这导致了就算不会数学,也可以构建很优秀的网络,就算会了数学,代码能力不足导致搭建不出来也是白搭。也就是说,数学不再占那么大的比重了。数学方面只要会高数和代数,还有一些数理统计的知识基本也足够了。反倒研究生最重要的不是基础知识而是看文献,有自己的想法或者有课题,然后有代码能力把实验做出来,就能发文章。 当然,计算机本科的学生读研其实在知识储备上也没有太大优势,因为这些东西本科都没学,最大的两个优势反而是编程的能力还有学院的资源,以及可以提前接触导师、提前进入实验室开始做研究。
计算机硕士的就业,目前看来9个开发工程师1个算法工程师。算法很多数学系的学弟都不知道算法、开发、数据分析意味着什么。这里就不得不提到底什么是算法。算法这个概念太广了。算法工程师是算法,算法研究员也是算法。从贪心算法到模拟退火算法都是算法,一只猴子打开IDE,import pytorch之后把A网络加B损失放一起也是算法。数学的算法可能适合做算法研究员,就是发论文做学术的那种。但是大家适合做学术吗?我敢断言:大部分人不适合做学术,读研最初的目的也不是为了做学术。
目前以个人的理解,算法分为算法研究员和算法工程师。算法研究员算是理学集大成者,一般是校企合作项目,进去与在实验室做研究差不多,要做研究、发论文和专利,一般有些导师会派博士生去跟企业合作。大厂的算法岗一般指的是算法工程师,属于理学与工学的结合。工作主要是负责前沿算法的落地,就是从论文到应用这一步,实际的工作就是每个组复现论文,然后比谁的性能更好。目前岗位来看,算法岗的实习非常卷,没有论文天生低人一等。另外算法岗对于研究方向也有偏重,喜欢那些能落地的、更加传统的深度学习方向,例如目标检测、图像分割、强化学习。算法岗的代码要求也更高,手撕通常是LeetCode中Medium的题,笔试就是5道Hard。个人对于算法岗的就业形势并不太看好,因为从就业的广度来说算法基本上限定大厂和独角兽,还有一些主攻算法的公司。很多小厂根本养不起算法工程师,国企银行对于这一块的需求也并不是特别大。从深度上看,大家研究生学的东西都是算法范畴的,但是真的并不需要那么多人做算法,算法岗永远是僧多粥少。这也就导致算法出奇的卷:大家研究生为了毕业都在学算法,但是并不需要那么多算法,那么当然是有顶级会议论文的人优先。
至于开发工程师,基本上是工学的代表。开发岗位很多,一般分为前端、后端、客户端、测试,以后端服务器为例,就是一些网络编程,工作主要是负责实现一些功能,也就是写业务。不管是什么岗位都非常看中项目经验,包括课程项目的经历。开发的就业面相比于算法会广很多。但是问题是,研究生学的东西对于开发几乎没有任何帮助。开发的东西都是本科学的,本科计算机通常都有项目经历,但研究生没有。很多开发的面试官根本不知道深度学习,根本不关心你研究的项目,更多的关心的是你工程上的见识和水平,例如有没有用过Linux开发环境,知不知道C++的内存特性,有没有看过8000行以上的项目代码。有很多大厂(例如腾讯)计算机本科和硕士研究生开发岗的起薪是同一水平。
以个人春招面试实习的经历,想拿好的算法Offer,真的需要实力非常硬;想拿好的开发Offer,只要背好408八股文,有一定的项目经历,研究生就算什么都不学也能靠本科的知识储备进大厂。算法的面试非常硬核,一般先问研究经历和论文,然后是算法八股文(机器学习和深度学习基础,Boosting,Bagging,SVM,EM,手推BN层,计算Kernel Size,Loss和Regularization),最后是一道Medium的题目(无外乎BFS,DFS,DP)。面的腾讯TEG,竞争很大,在自我感觉良好的时候被淘汰了。最终一个多月的时间恶补计算机本科的课程,转开发了。转的过程也非常不愉快,期间一边学一边面,每次都会有没复习到的地方,以考代练。而且每次面试官都会说我为什么没有项目经验,有时候会用更难的题目来劝退我(例如手撕Hard),好几场面试中途直接主动挂电话。而且这些算法题,数学系也是绝对的劣势,数学知识完全帮不上忙,这些反而是计算机本科经历过机试、ACM的学生很亲切的题目。最终面了十几场,拿了一个开发的实习Offer。
另外实验室不一定会放实习,更不一定会放开发的实习,一定要选择好导师和实验室。没有实习,去秋招就不好进大厂,更别说SP、SSP。例如我们实验室的政策是,不发论文不给实习。这是非常尴尬的情况:要想找到好工作,要么拼命发论文卷算法,要么水一篇论文转开发。很多人觉得如果做开发相当于白读了研,包括我的导师也这么觉得。实际上确实白读了。
最后聊聊个人理解,不管是什么系转计算机,都要面临的问题是:很多计算机研究生学的东西、做的研究一般都是属于算法岗范畴,算法太卷了,除非读到博士,或者特别有能力,否则大概率转开发。转开发需要计算机本科的知识和项目经历,这恰恰又是跨专业最缺乏的。学校的培养方案不是拍脑袋拟出来的,计算机所需要的数学知识在计算机本科课程里面都囊括了,别听人天花乱坠的吹数学转计算机,本科想学什么就选什么。
附上一些课程让大家看看差距,算法岗需要的用红色标出,开发岗需要的用蓝色标出,非常直观,大家自行考虑。
以下是我在数学系的时候学过的必修课程:
数学分析,高等代数,常微分方程,偏微分方程,实变函数,复变函数,泛函分析,拓扑学,概率论,数理统计,回归分析,非参数统计,复杂数据分析,数值分析,随机过程,统计计算。
985硕士计算机在读,目前研究方向是深度学习里面的计算机视觉(CV),具体方向是生成对抗神经网络(GAN),这是我学过的研究生课程:
机器学习与模式识别,人工智能基础,数字图像处理,数值分析,多媒体中的人工智能、软件中的人工智能。
附带参考,以下是我校本科计算机中的重要课程:
高级语言程序设计,数据结构与算法,汇编语言,计算机网络,操作系统,计算机组成原理,计算机图形学,数据库原理,设计模式。
太长不看版:
1.不要想着曲线救国,想学计算机就报考计算机。
2.如果你要转计算机的研,先了解什么是算法岗,什么是开发岗。
3.如果你确定要转计算机走开发路线,先去把计算机网络、操作系统、C/C++/Java的语言特性等课程全部自学一遍,再看看JD来决定下一步的学习目标。每日打卡LeetCode,至少要到看到Medium也不慌的地步。然后Github上找自己语言做的项目,一定要动手去做。读研选导师的时候找那种最水的,最好不要求论文的,放实习,手头有很多工程项目的。
4.如果你确定要转计算机走算法路线,先去把CS231N、吴恩达的机器学习、李宏毅的深度学习、李航的统计方法给看了,然后早点去实验室做研究,早点投出顶会论文,最好再考虑一下要不要读博。LeetCode至少刷到Medium乱杀的地步,想笔试做出好成绩最好刷ACM的题。研究生选导师一定要找最近几年发论文多的,既然你要卷就要做卷王。