希望老师可以为我找计算机相关工作提一些建议,感谢!
老师您好,我正在读数据科学专业的研究生,打算参加今年秋招或者明年春招找工作。除了数据分析岗位,我也想试着找一些计算机岗位的工作。可是除了这门课、关于计算机课程我也只在学校上过数据库课,之前也没有计算机相关的项目和实习,但我会好好刷leetcode题库。您觉得我这个背景和基础适合投哪些计算机类型的岗位的工作呀?如果您觉得我的计算机背景太薄弱,您推荐我再补充哪些方面的知识呀?针对这些知识,您可以推荐给我一些课程或学习资料吗?我很乐意学习,希望可以为我将来的发展创造更多的机会!
正在回答
1 你的本科是计算机专业吗?(看这个描述似乎不是?)
2 你是在国内找工作?还是在海外找工作?(似乎是国内?)
3 你们实验室的师兄或者师姐一般工作去向是怎样的?是否有很多人去大厂?
==========
我问你是在国内还是海外,主要是因为现在就我所知,国内外的就业环境挺不一样的。整体你的背景,如果是在海外读完书,想转 SDE,相对更容易一些,即使不转 SDE,就我所知,在海外找一个 DS 类的工作也更容易一些。国内我不 100% 的了解,但是就我所知更难一些。
但如果你现在不是在海外读书,而是国内毕业,想直接在海外找工的话,成功的概率就低太多了。不能说完全不可能,但是成功率按百分制算肯定是个位数。如果你真的有意“一定”要在海外找工作,我的第一推荐是看是不是有意向在海外再读一个研究生。按照现在的形式,这笔投资肯定是值得的,当然前提是你申请一个正儿八经的大学的研究生,而不是一个野鸡大学。(时间和金钱的成本都算上,对大多数人来说也都是值得的。)
如果不想再读书了,有意将来在海外工作的话,我的推荐是在国内找一个外企,然后看有没有外派的机会。不过现在国内外企的选择已经越来越少了,剩下的或者以业务向(而非研发)为主;或者是完全的“高端研发”,极其难进(比如谷歌或者微软,进谷歌中国或者微软中国的难度是在美国的 1 万倍不止);所以可能你需要费心找一找有没有什么比较“小众的“的外企。很多企业国内没有什么知名度,都没有听说过,但如果查一下企业背景,是相当不错的。而且也孕育着不少机会。比如我就听说今年一个上海的毫不知名的外企(至少我不知道,现在都没有想起里是个啥企业)因为疫情原因撤出中国,中国部门的 100 多号员工,只要愿意,都办工作签直接 transfer 到海外了。(但整体,如果对自己的人生规划是想去海外工作生活的话,我的第一推荐是去海外再读个书,是当下最简单,成功率最高的方式。甚至在我知道的范围里,成功率高达 95%。)
如果你现在就在海外,我的建议就两个:
1)找实习。海外对实习经历比国内看重多了。
2)不需要补什么别的知识,疯狂刷题。(当然有空闲愿意学一些其他知识肯定是好的)
==========
下面的回答都假设你在国内。就我所知,国内的情况和海外不很一样。首先国内对实习经历的看重没有海外那么重。当然有好的实习经历肯定加分,但如果没有的话没有关系。
但是,就我所知,国内的面试虽然会考查算法,但对于各个开发岗,对非算法类问题的考察也挺多的,据我所知远比海外多得多得多。所以在国内仅仅是疯狂刷算法题可能是不够的。
整体我的建议如下:
1
我认为你的第一要务是找到一份大厂工作(而不是从你的背景转到“更计算机的”背景上)。尤其你找工作的时间重点是今年秋招的话,可能时间并不充裕。按照你的描述的,我怀疑你真正需要补的计算机知识需要大概两年的时间去学习比较合适。虽然更“应试”的学习理论上可以缩短这个时间,但是过于应试填鸭,其实自己没有真正的理解,并不是好的学习方式;而且其实到时候找工也主要是看运气,而不是看实力。
所以如果你想直接找工的话,我建议你认真总结一下,自己当下找什么岗位对你来说是最容易的,成功率最高的,能找到的企业最好的,自己的人脉资源,学校资源,实验室资源最容易用上,起到帮助作用的。先进一个大厂再说。
2
其实以上基本上就是我对你的所有建议了。但是因为我怀疑你对 SDE 岗位感兴趣,简单说一下我认为的 SDE 岗必备的知识:
1) 至少一门编程语言,最好两门编程语言,能够熟练使用。
2)算法和数据结构
3)OOP,设计模式。
4)操作系统
5)计算机网络
6)数据库
这里简单注解一下:CS 专业学习数据库不仅仅是 sql 语言,也包括很多数据库的底层原理。sql 语言是最基本的。另外,对数据库底层原理的学习其实可以扯出很多高级话题,比如并发,分布式系统,系统设计,当然,你把这些内容看做独立的内容也没问题。(尤其是近些年的发展,独立学习这些内容可能变得越来越重要了。)
这些是我认为最重要的东西,也是我看到国内面试主要可能涵盖的内容。
----------
下面的内容是我认为很重要,但其实面试基本上不会碰到的。所以如果你真的要学习这些内容,面向找工作的话,下面的内容可以先不学。
7)一些基本工具的使用。比如 git,linux,shell,正则表达式,等等等等。
基本上工作肯定会用,但是面试不太考。其实都是工具的使用,也没什么难的。
8)体系结构。
这里简单注解一下:大多数 CS 专业的同学都会讲计算机是怎样通过 0 和 1 构造出复杂的逻辑的。甚至会有课设内容让大家从底层搭建出一个简单的 CPU。通过这个过程会对计算机有更深刻的理解。但是我没有听说过大厂面试有这方面的内容(或许硬件或者嵌入式方向会涉及,我不太了解。)但是我的直观体会是,学习体系结构这种底层知识,一方面是对诸如位运算这样的底层运算有更深刻的理解,这样的理解是能带到上层的开发中的。比如很多位运算的问题,我能感觉到,明显科班的同学会比转码的同学理解的更快,更深入。
9)汇编
10)编译原理
其实 8) 9) 10) 这三个领域的意思是一样的,都是希望能够通过更底层的计算机原理的学习,让你更深刻地理解计算机。
11)离散数学 (很多时候对算法的考察就包含了离散的内容,比如一些图论算法。但是系统学习离散数学是非常好地培养计算机思维的方式。)
12)某一门纯粹地函数式编程语言。
10)和 12)在现在国内的计算机体系中,可能已经不是必修了。我个人其实也认为编译原理不学无所谓,了解更好。函数式编程语言的接触我觉得和学习离散数学的意思差不多,是培养计算机思维的(当然实际开发中也用得上,但是没有系统接触过也不妨碍。)。
国外计算机专业的课程设置很多都会专门接触一下纯粹地函数式编程语言,我个人也认为很有意义(比编译原理有意义),因此我列上了。但国内计算机专业大多没有这个设置。
计算机专业通常还会有一些具体领域的学习,比如图像学,图形学,密码学,网络安全,等等等等。但在我看来这些不属于基础。在没有很具体的方向之前,不学无妨。
----------
这些基本上就是我认为的计算机专业的基础。通常来说,如果你的上述基础扎实,就能找一个大厂的后端岗位了。但如果你能深入学习某一个框架,不管是前端还是后端还是移动端还是什么端,并且有自己的简单的作品,就更好了。(我理解在国内基本上用这件事儿充当实习经历。)
值得一提的是,在计算机最火的时候,很多非科班的同学,或者大专生同学,去培训班,主要就是简单补一下编程基础,然后就主要学习一个框架,能用这个框架做东西,就能找到工作了。但是现在这个思路可能不太适合现在这个时代了,尤其是如果你要去大厂的话,在大多数情况下,基础比你使用过一个框架要重要。
但还是要强调一下,我给出的这些内容,更多是在回答你的问题“如何加强自己的计算机背景”。但如果非常单纯的面试找工作的话,不排除有各种特殊情况。比如有某个组急需某个框架的熟手,所以不那么强调基础,更强调框架经验,一类的。或者你对某一个特别小的领域有非常好的成绩,比如我就知道一个同学,哲学系毕业,但是自己闲的没事儿研究 iOS 开发,做了一个 app,被邀请去 WWDC 了,回来以后直接进腾讯了,他的计算机基础肯定就没有这么全面。等等。整体,找工作这件事儿是有一定的运气和随机性的。
==========
写了这么多,最后再强调一遍:我的第一建议是:我建议你认真总结一下,自己当下找什么岗位对你来说是最容易的,成功率最高的,能找到的企业最好的,自己的人脉资源,学校资源,实验室资源最容易用上,起到帮助作用的。先进一个大厂再说。
整体你的背景,我认为 DS 方向就是最适合的。DS 也是一个很广的谱,从偏向数据分析到偏向基础,都有。你可以先通过 DS 入行,然后再一点一点根据自己的意愿调整方向。比如慢慢更偏基础一些。我就知道一个同学,从在银行做数据分析入行的,但是对偏计算机(而非偏数学)的内容感兴趣,一点一点研究大数据存储(而非主要做分析)。现在早就跳到阿里云了,做的事情已经和数据分析没啥关系了(而主要是基础架构方面的技术工作)。至少现在,确实往这种偏计算机基础的方向走更吃香一些。他想跳槽,高端猎头排队找:)
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星