找回密码
 立即注册
楼主: BlaXuan

计算机专业研究生必须找算法岗才有前途吗?

[复制链接]
发表于 2021-7-5 06:56 | 显示全部楼层
21届暑期实习生,求职定位:机器学习算法岗。
目前一个offer都没有,一方面自己比较菜,另一方面几家大厂面试下来的感觉,做算法都以具体业务为导向,无非是cv nlp 推荐搜索。奈何研究生两年读了个寂寞,没有接触过落地的算法项目。打的比赛名次也不好,没摆在简历上。
看今年形式,开发的岗需求量挺大,算法岗由于前两年的井喷,实际上hc不多了,被某些厂子刷kpi也是意料之中。
谈几点看法:
    计算机的基础仍然是开发。作为计算机系的学生,考研三大课加上数据库原理等必须要扎实。很多人搞了两年所谓的算法和科研,没接触过具体落地的开发项目,这些知识无从接触,实际上也就忘了。这就是目前很多搞算法的研究生的现状。 有些大佬会说,你作为计算机系的学生,这些都不会?至少我自认为我的开发能力和基础知识应该是比不上本科生的,搞算法的两年一直在看论文,而且算法也并没有落地。( 这是高校和业界的区别)算法只能是开发的补充。作为国内的研究生,无非就是帮导师做项目,目前这些项目多半是有系统和算法。有种模式是比较好的,以开发为培养方向,前端后端挑一个,写系统,其中的算法也试着去研究和创新。但这种研究不以发顶级论文为导向。这样的话,就不要求有很大的创新性。因为研究生只有三年,实际上很多人到第二年就已经佛系了,而整一篇论文可能会贯穿硕士生涯前两年的大部分时间。我的体会是,硕士把经典机器学习算法原理搞清楚,有心者用numpy写一下,会点框架,调调参,以项目为导向或者竞赛在某个应用领域里把开源代码复现一下,找算法岗工作时未必就比专心搞两年科研做论文的硕士差。当然,形势而言,今年算法岗还是难的一批。以硕士找工作为导向,重视开发,辅以一定的算法知识,开发算法自由切换,反观我这类专心搞了两年算法的,虽然手头有两篇论文,但是真的没用。到头来,开发的本事丢个精光,在这种山外有山的算法岗上,再想要转开发,至少找到暑期实习已经无望。
薪资方面,私以为,算法岗的红利即将到头,最后找不到工作的都是深陷在算法泥潭的(比如我),真正搞算法搞科研的都去美帝读博了。国内的高校科研环境,说实话,并不适合读博。
趁早意识,趁早脱坑吧。开发岗一样有前途,有钱途。
<hr/>更新一下,9月秋招,目标还是算法岗。
只拿到一家互联网养老厂,BATTMD要么没投要么挂,问题不大。
发表于 2021-7-5 07:03 | 显示全部楼层
我做个简单的预测,3年以后就不会有算法岗这个称谓了
算法岗,始于大概3年前。人工智能深度学习机器学习大火带动了相关岗位的产生。很长一段时间,算法岗几乎特指会用传统机器学习算法以及DNN、lstm。稍有常识的程序员都知道人工智能=/=算法。不过HR是不管这些的。不知道是谁第一个发明了“算法岗”这个词,但是这个词确实大行其道成为了一种招聘标准。大家都不明白怎么回事。但当时有钱烧,有高薪拿,有各种等待神经网络解救的行业摆在那里。都忙着赚钱,懒得较真。
之后技术逐渐落地,算法岗演变成了更具体的要求,比如会声音图像视频自然语言处理自动驾驶人脸识别。目前诸神黄昏。算法岗的要求逐渐变成了名校,顶会,大赛经验,项目经历。面试更是要推的了公式,打的了编程题,扯得出行业前景,搞得了各种调参奇淫巧计。听说今年有的公司已经是算法开发一个起薪了。
我个人预测未来几年的要求还会加上有相关项目的至少1年以上实际工作经历。"算法岗"也终于从万物转AI,退化成了一个常规的岗位。
如果"算法岗"这么明显的供大于求和去魅都看不出来。仍然看着几年前的大新闻跳坑,有学术热情、格物致知的当我没说。只是看重行业热度的话。就有点不明智了。有点看着几年前的热门板块炒股的意思。
那么你可能会问,现在行业热点是什么呢?我哪知道,我要能猜出来我就开live割韭菜了。
发表于 2021-7-5 07:12 | 显示全部楼层
算法岗到底还能存在多久都是一个问题。
深度学习结果深度不够,也是很尴尬了。
发表于 2021-7-5 07:18 | 显示全部楼层
作为一名计算机专业的教育工作者,我来回答一下这个问题。
首先,从近两年计算机专业研究生的就业情况来看,更多的毕业生会选择开发岗位,一方面原因是算法岗位的人才需求有所收紧,另一方面原因是开发岗位的薪资待遇与算法岗位已经基本持平,而且开发岗位的选择空间更大。
虽然人工智能当前受到了广泛的关注,但是目前由于人工智能技术尚存在一定的落地应用问题,所以算法岗位在整体的人才需求量上并没有延续前些年的上升态势,近两年算法岗位的招聘量有了较为明显的下降,不少原本计划从事算法岗位的毕业生,也都选择了开发岗位。从具体的人才需求方向来看,当前大数据领域的开发人才需求量相对比较大。
相对于算法岗位来说,从事开发岗位往往是更好的选择,一方面开发岗位的从业者完全可以向算法岗位发展,另一方面开发岗位本身的发展空间就比较大,可以说当前选择开发岗位是更为理想的选择,也可以看成是一种“进可攻退可守”的选择。实际上,当前很多算法岗位也要求从业者具备一定的开发能力,纯粹的算法岗位已经非常少了。
从算法岗位的分布情况来看,早期一部分算法岗位的从业者会从事数据分析岗位,随着人工智能技术的快速发展,不少算法工程师转向了人工智能领域,但是在人工智能领域从事算法设计也存在比较大的从业压力。目前随着人工智能平台的陆续推出,算法工程师也在面临越来越大的从业压力。实际上,当前已经有一部分算法工程师正处在职业发展的困难期。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
发表于 2021-7-5 07:21 | 显示全部楼层
说的不一定对,但就我个人研究生做了一年多的nlp算法,也发了篇论文来看的话。绝大部分paper是没有实际落地的可能性的,包括绝大部分顶会。深度学习在很多nlp子问题上应用的效果远没有图像这么好,并且很多子领域的发展已经渐渐进入瓶颈很难有实质性的突破。在这个领域,未来实际有商业价值的落地项目很少。所以无论现在的算法岗开多少高的工资,我觉得这也是不可持续的。资本都是逐利的,等他们渐渐发现这个东西实际上看起来高大上,但是可以落地的项目,能盈利的项目非常少。那就等着玩完。人工智能发展至今的三起三落每一次落幕都是资本、大众对其不切实际的期望,以及研究者们的“有意”夸大。
当然不是完全否认nlp领域的落地项目,只是个人觉得真的不多
所以我反正是转开发了hhh后面可能还会往产品方向尝试,但毕竟刚工作,开发还是不错的
发表于 2021-7-5 07:29 | 显示全部楼层
都2020年了还真的有人觉得machine learning engineer前景广阔?某大厂连cmu博士毕业生都说裁就裁了,更不用说普通学校的硕士研究生了。
一个岗位有前途,首先它要能创造价值。就机器学习现在这种窄的不能再窄的应用场景,很难像当年移动互联网那样,给各大企业带来足够多的真金白银。
如果现在整个行业的风气还是执着于把预测准确率刷高个百分之一而不是积极去找真正能够在工业界大规模落地的应用场景的话,这个岗位的被边缘化也就是几年内的事情了。
说到底还是那句话,如果你只是冲着风口和钱去的,做开发就足够了,虽然移动互联网的肉已经差不多分光了,但汤至少还能喝它个十几年。如果你是真爱machine learning,deep learning,AI这些东西的话,立刻马上竭尽全力去探索开拓它们的应用吧,只有这样才能拯救这个领域。
发表于 2021-7-5 07:32 | 显示全部楼层
算法难度大,开发B事多。
 楼主| 发表于 2021-7-5 07:39 | 显示全部楼层
说一下近两年招人的感觉,算法岗方面尤其是深度学习方面的毕业生非常多,跟15年时候的情况完全不一样。现在不要说计算机专业,通讯,机械,航天,甚至化学都有很多学生找算法岗。主要原因是市场的滞后性,因为近两年算法岗的薪资的确高出其他岗很多。
但是要注意一点,现在对于算法岗的要求也越来越高。以图像算法为例,很多人包括计算机专业的同学认为跑跑guthub上的模型,就可以去做算法了,这个认识是错误的。但是认为算法岗遥不可及也是错误的。目前大部分的算法岗,更准确的名字应该是算法应用,所以算法工程师的名称是OK的。刷榜对于这些算法工程师不再有特别大的价值,更多的要求是对于实际业务问题的解决能力,以及自身知识的迁移能力。举个简单的例子,做图像去噪,做论文,大家看psnr高了0.几个db就觉得可以水论文了。但是在实际中可能完全没有价值。因为可能你时间复杂度高了,不能落地了。对于公司来说,你就没有创造任何价值。
评论里很多没工作的,或者不熟悉这个领域的同学都认为算法岗会消失。确切来说名称会不会消失我不清楚,但是把有价值的算法从学术研究落地到产业界需要大量这样的人才来实现,所以这个岗短时间不会消失。
关于调参,和调用API的问题
实际上算法工程师能够调一手好参,或者靠调用API就能落地产品的话,我还是挺佩服的。从读博开始,在cv领域我也做了十几年了,至今还没遇见我接手的哪个项目可以靠调用现有API或者拿着现有模型调调参就能搞定的。
貌似回答已经偏离的问题,其实总的意思不要神话算法岗,找工作非算法不找。也不要诋毁这个岗,认为都是一些API调用工具人。
发表于 2021-7-5 07:46 | 显示全部楼层
当然不是,
只是,对于科班来说,如果你的目标是开发岗,研究生的两三年时间所带给你的成长不如工作带来的
发表于 2021-7-5 07:50 | 显示全部楼层
干货警告长文警告

大家好,我是阿广,第一眼看到这个问题,尤其亲切,作为中国科学院计算机专业的研究生,我感觉我有资格来回答这个问题并给大家一些建议,所以建议大家拿好笔记进行学习。
下面的场景是我十分常见的:
阿广:同学,你研究的什么方向呀?
某数学专业研究生:运筹学最优化算法
某计算机专业研究生:计算机视觉
某软件工程专业研究生:自然语言处理
某地理专业:机器学习与模式识别
电气专业:机器学习
。。。
这种情况屡见不鲜了,“算法热”比“东京热”还热?但是当我们静下来的时候,认真去想一想自己到底想要什么?自己适合研究什么方向是非常重要的!
回到题主的问题:计算机专业的研究生必须找算法岗才有前途嘛?
答:不是
我身边有很多因为“算法热”而选择了算法,也有很多因为自己不喜爱而选择了其他研究方向。我们可以看到各个方向都有大牛,都有撸代码撸的贼六的秃头老鸡贼的程序员。
而且因为“算法热”导致算法的岗位竞争十分激烈,某些公司的开发岗位和算法岗位工资也都一个价格了。所以到底是不是必须读算法岗?我的建议:真热爱,就读,不要随波逐流。
你能够提出这样的问题,说明对算法也是想有一些了解,那么阿广作为中科院大学的研究生,我来讲一下大公司算法面试到底面试啥?大家可客观的判断自己到底适合不适合算法岗。

算法面试不仅仅是正确的回答问题,对于面试中遇到的大多数问题,都能有一个合理的思考路径。

到底什么是算法面试?
让大家在面对面试中的算法问题时,有一个合理的思考路径:
不代表能够“正确”回答每一个算法问题,但是合理的思考方向其实更重要,也是正确完成算法面试问题的前提
算法面试优秀不意味着技术面试优秀
技术面试优秀不意味着能够拿到Offer
什么是给出合理的思考路径?
算法面试的目的不是给出一个“正确”答案,
而是展示给面试官你思考问题的方式。
“正确”本身是一个相对概念
算法面试不是高考。
把这个过程看作是和面试官一起探讨一个问题的解决方案。
对于问题的细节和应用环境,可以和面试官沟通。
这种沟通本身很重要,它暗示着你思考问题的方式。
例子
  我们需要对一组数据进行排序
设计排序接口,标准库的设计,业务中排序算法。
排序是基础操作,很重要。
解决
  快速排序算法:O(nlogn)

    忽略了算法使用的基础环境。要动态选择。
  (向面试官提问):这组数据有什么样的特征?

    有没有可能包含有大量重复的元素?如果有这种可能的话,三路快排是更好地选择。普通数据:普通快速排序就行了;java语言标准库排序使用的三路快排。是否大部分数据距离它正确的位置很近?是否近乎有序?如果是这样的话,插入排序是更好地选择。
      按照业务发生顺序,先发生先完成,几乎有序,插入排序是更好的选择。
    是否数据的取值范围非常有限?比如对学生成绩排序。
      如果是这样的话,计数排序是更好地选择。高考成绩取值范围有限:计数排序更好。

  (向面试官提问):对排序有什么额外的要求?

    是否需要稳定排序?
      如果是的话,归并排序是更好地选择。

  (向面试官提问):数据的存储状况是怎样的?

    是否是使用链表存储的?
      如果是的话,归并排序是更好地选择。快排依赖于数组的随机存取。

  (向面试官提问):数据的存储状况是怎样的?

    数据的大小是否可以装载在内存里?
      数据量很大,或者内存很小,不足以装载在内存里,需要使用外排序算法。

对一组数据进行排序小结
    有没有可能包含有大量重复的元素?是否大部分数据距离它正确的位置很近?是否近乎有序?是否数据的取值范围非常有限?比如对学生成绩排序。是否需要稳定排序?是否是使用链表存储的?数据的大小是否可以装载在内存里?
什么是“正确”的回答一个算法问题
    正确除了你能把代码编出来运行出正确的结果。正确还包含对问题的独到见解;优化;代码规范;容错性;
      不仅仅是给出解决算法问题的代码,还要把上面因素包括。如果是非常难的问题,对你的竞争对手来说,也是难的。
    关键在于你所表达出的解决问题的思路。甚至通过表达解题思路的方向,得出结论:这个问题的解决方案,应该在哪一个领域,我可以通过查阅或者进一步学习解决问题。
算法面试只是面试的一部分
    算法面试只是技术面试的一部分。根据你的简历和应聘职位的不同,势必要考察其他技术方面。项目经历和项目中遇到的实际问题
      解决能力,是否参与深入思考技术态度

  面试前梳理自己简历上所写到的项目:整理一下可能会问到的。

    你遇到的印象最深的bug是什么?面向对象设计模式网络相关;安全相关;内存相关;并发相关;…系统设计;scalability(大规模)
技术面试优秀不意味着能够拿到Offer
技术面试只是面试的一部分。面试不仅仅是考察你的技术水平,还是了解你的过去以及形成的思考行为方式。
    关于过去:参与项目至关重要
项目经历:
    工作人士研究生本科生
      毕业设计其他课程设计(大作业)

如何找到项目?
    实习创建自己的项目
      自己做小应用:计划表;备忘录;播放器…自己解决小问题:爬虫;数据分析;词频统计...“不是项目”的项目:一本优秀的技术书籍的代码整理等…(github)分享:自己的技术博客;github等等

行为类问题
  通过过去了解你的思考行为方式:

    遇到的最大的挑战?犯过的错误?遭遇的失败?最享受的工作内容?遇到冲突的处理方式?做的最与众不同的事儿?
具体阐述:我在某某项目中遇到一个怎样的算法问题:这个问题是怎样的。它是我遇到的最大的挑战,我是如何克服解决的。
准备好合适的问题问面试官
    整个小组的大概运行模式是怎样的?整个项目的后续规划是如何的?这个产品中的某个问题是如何解决的?为什么会选择某些技术?标准?我对某个技术很感兴趣,在你的小组中我会有怎样的机会深入这种技术?
算法面试仍然是非常重要的一部分
如何准备算法面试

准备面试和准备算法面试 是两个概念

    算法面试,只是面试中的一个环节。远远不需要啃完一本《算法导论》
      强调理论证明第一遍读不需要弄懂证明前几遍阅读应该记住结论就行了,不需要弄懂证明。把更多的精力放在算法思想上。
    针对算法面试,算法导论里面的理论推导和证明不是很重要的方面。

学习切记完美主义


    高级数据结构和算法面试提及的概率很低

    基础的概念要知道,但是不需要实现等更深入的层面。远远不需要到达信息学竞赛的水平

算法面试的准备范围


    不要轻视基础算法和数据结构,而只关注“有意思”的题目各种排序算法</i>基础数据结构和算法的实现:如堆、二叉树、图…基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集…基础算法:深度优先、广度优先、二分查找、递归…基本算法思想:递归、分治、回溯搜索、贪心、动态规划…
例子
Intel的面试题:
初始序列为1 8 6 2 5 4 7 3的一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:( )
A. 8 3 2 5 1 6 4 7
B. 3 2 8 5 1 4 6 7
C. 3 8 2 5 1 6 7 4
D. 8 2 3 5 1 4 7 6
乐视的面试题:
对一个含有20个元素的有序数组做二分查找,数组起始下标为1,则查找A[2]的比较序列的下标为()
A. 9、5、4、2
B. 10、5、3、2
C. 9、6、2
D. 20、10、5、3、2
考查二分查找法。
阿里巴巴面试题
一组记录排序码为(5、11、7、2、3、17),则利用堆排序方法建立的初始堆为()
A. (11、5、7、2、3、17)
B. (11、5、7、2、17、3)
C. (17、11、7、2、3、5)
D. (17、11、7、5、3、2)
E. (17、7、11、3、5、2)
F. (17、7、11、3、2、5)
百度面试题
在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为( )
    O(n)O(n+e)O(n^2)O(n^3)
  重点关注

    基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集…基础算法:深度优先、广度优先、二分查找、递归…基本算法思想:递归、分治、回溯搜索、贪心、动态规划…
选择合适的OJ(Online judge):在线判题系统


    不要选择过于偏向程序设计竞赛的OJ *面向竞赛难度过高

    选择合适的oj
      leetcode

      Online Portal for IT Interview真实的面试问题www.leetcode.com


    HankeRank


      特点是对于问题的分类很详细。偏难,不过可以对某一类细分问题解决。

简书 注意

    在学习和实践做题之间,要掌握平衡基础算法实现与算法思想
如何回答算法面试问题
解决算法面试问题的整体思路


    注意题目中的条件
      给定一个有序数组...(二分法)
    有一些题目中的条件本质是暗示
      设计一个O(nlogn)的算法(分治:在一颗搜索树中完成任务,对于数据排序)无需考虑额外的空间(用空间换时间上的优化)数据规模大概是10000(O(n^2)就可以)

  当没有思路的时候
    自己给自己几个简单的测试用例,试验一下不要忽视暴力解法。暴力解法通常是思考的起点。
例子
LeetCode 3 Longest Substring Without Repeating Characters
  在一个字符串中寻找没有重复字母的最长子串
如”abcabcbb”,则结果为”abc”
如”bbbbb”,则结果为”b”


    对于字符串s的子串s[i...j]
      使用O(n^2)的算法遍历i,j,可以得到所有的子串s[i...j]
      使用O(length(s[i...j]))的算法判断s[i...j]中是否含有重复字母
      三重循环:复杂度O(n^3),对于n=100的数据,可行

优化算法


    遍历常见的算法思路
      遍历常见的数据结构
      空间和时间的交换 (哈希表)
      预处理信息(排序)
      在瓶颈处寻找答案:O(nlogn) + O(n^2) ; O(n^3)

      O(n^2)能否优化。

    什么样的问题使用什么样的思路和数据结构。

实际编写问题


    极端条件的判断

      数组为空?字符串为空?数量为0?指针为NULL?

    代码规范:

      变量名模块化复用性

好啦,干货先更新到这儿~阿广自己也会写一些算法的文章,如果你以后想从事算法岗,我十分推荐来我的公众号 视学算法 ,跟着阿广学算法,必须有前途 。
好啦!如果对大家有帮助的话,双击一下屏幕支持一下呦,建议收藏喜欢哦,么么哒。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-11 00:57 , Processed in 0.093777 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表