对于转专业的同学来说,SDE中有很多选择,包括前端、后端、大数据等。如何选择对大家来说非常重要,因为当你确定好自己的方向后,就可以缩短自己的学习路径,知道自己该往哪个方向去努力,知道自己缺什么,该加强什么。

本文将从以下几个重点方向为你一一解惑,并帮你合理规划转专业搞定Offer之路。

谁也不想花5年10年去找到第一份工作,那么怎么在短时间内找到工作就是我们需要思考的问题。其实我们接下来就会谈论到比如刷题,知识点的问题或者背景问题。

刷题和项目谁先谁后

首先,我们先来讨论下刷题和项目谁先谁后的问题?

最近做了很多Career Consultation的问题,大家都很Concern这个问题。到底刷题和项目谁先谁后?大家都知道刷题很重要,前几年,刷题刷到FLAG公司的 Offer是能够见到的,但现在,唯一刷题论还正确吗?刷题确实是必备的,但是唯一刷题论是否还正确?

有的同学还说好像我简历差不多,能找到内部人帮我Refer,这样也能拿到面试的Offer。但是这个我们也需要考虑一下,真的是这样吗?

有些同学还会有这样的侥幸心理,我先写上一个项目,我把它写得比较酷一点,各种架构各种工具都有,但是其实作为一个转专业的学生,这些东西我都不怎么接触?我可能刚入门编程语言,这种Fake的项目,能够在你找工作的过程中给你帮助吗?

还有的同学始终处于很犹豫的状态,不知道自己是刷题刷得不够,还是做项目做得不够,一直在犹豫,不敢开始。这样一直犹豫到找工作之前,然后才临时抱佛脚,赶紧去冲一波,其实这种情况你也要去审视一下自己这是不是最好的选择。

有一句很有名的话是这么说的:种一棵苹果树最好的时间是什么?10年前。CS专业的同学,他选择专业时间要比大家早,那转专业的同学就要想你既然当时没有做这个决定,但是你现在已经确定你想从事这个领域的工作,那你为什么不现在开始呢?

那么具体来说项目和刷题应该哪个先开始呢,项目可以帮你拿到面试,刷题可以帮你通过面试,那你应该先开始哪个?因为你在这两个方面能力都弱,所以你在判断时要通过以下标准来判断:

1. 简历回复率与专业评分

2. 算法解题与交流能力,也就是看你能不能做出题后再讲出来。

其实,刷题和项目,并不是一个先有鸡还是先有蛋的问题,它们完全有可能同时开始。下面,我们来看一下具体问题怎么评定。

首先,大家可以看一下自己的简历,如果有同学已经在转专业的路上开始投递简历了,你可以看一看你简历的回复率。假设今年春招你投了100份,要看看你是否能达到7%的回复率,如果没有达到,那你的简历很有可能有很大的问题。就是面试官觉得你不契合,他只是觉得你是一个转专业的学生,并没有看出来你未来在SDE这个方向上能够给公司提供哪些帮助。这时,你就需要开始赶紧做项目。还有大家可以按照BitTiger的评分标准,看一下自己简历是否能达到6分。如果没有达到6分,可能是因为你简历中技术栈不够多,转得不够彻底,项目有问题,书写的方式不对等,这些问题都有可能让你拿不到面试。这很有可能是因为你技术上不Match,项目上不够有深度。所以你就需要在项目上花费更大的精力。

在算法解题这个方面,你要自己审视一下。你可以尝试给自己45分钟去解题,可以是以前做过的两道题,看自己是否能顺利解出来,如果可以,就尝试给自己一道新的,一道旧的,看自己能否解决掉,如果还可以,再给自己两道新题,看自己能否解决。45分钟解两道新题不是一个过于高标准的要求,你可以通过这样的方式去看自己算法的能力。你要看这45分钟两道新的题目你是完全没有思路,只有思路,还是能够完全写出来。你要通过这些不同的标准来考察自己,然后分析出自己应该先做什么,再做什么,或者同时做些什么?哪些部分应该花更多的时间。

如果你时间充裕,可以先做算法补基础,然后做项目。如果你现在OP已经开始了,找工作已经迫在眉睫了,那你就必须同时进行这两点。学校确实有很多作业要做,但如果你是在读一些化工,材料,那这些东西和CS没有什么关系,在你求职时不会给你什么帮助,就算GPA拿到4.0也没有什么用。所以,你需要每天分配3-4小时做项目,用更多的时间去刷题,这样才能更快的走向CS这条路。

系统掌握知识点

现在,我们来看一下如何系统的掌握CS方向的各个知识点。这些都是面试时会考察的。

很多同学都有不同的误区,比如觉得自己还在学校,可以转专业转到CS,学校里面有很多CS上的基础课,他可以一点点学,比如操作系统,数据库等。但是你要知道作为一个转专业学生,你一点点去学这些知识,很有可能导致的结果是:

1. 你的时间不够;

2. 因为你完全没有基础,你很有可能学不下去而丧失动力。

有同学说,那他就看点面经题吧,面试考什么就看什么,但是其实面经题的知识范围特别小,不是说每个技术知识都在面试中考到,你一定要有更加扎实的基础才能让你在面试的时候像一个CS学生一样从容应答。

当然也有同学说,没有老司机带着,他的知识点顺序非常混乱,没有体系,今天学这个,明天学那个。要学习什么语言不确定,先学哪个也不确定,今天可能看了一下操作系统,明天就去学Machine Learning。这些都是问题,你要有一个正常的学习体系,确定自己该怎么一步步学习。你也可能技能上有局限,没有业界应用。

作为一个非CS上的学生,怎样才能用有限的时间迅速高效的学习呢?程序老手都知道,学编程还是要实践,如果你学一个东西却发现自己没有条件去实践,那就是命还没到时候,要先学点别的。所以,重点是实践。你一定要把你学的基础的东西在实践中用项目去串起来,要知道怎么去应用。因为你在工作中是要把知识点全部应用到工作中去。当然,如果你想更高效,可以让学长学姐带带路,成立一个小的学习小组,不懂就问,这肯定对我们的学习有莫大的帮助。

上图左边是一个大致的学习顺序,第一是数据结构与算法,第二是核心常用的编程语言(现在流行什么就需要去学什么,比如说Go语言最近很火,如果你感兴趣,是不是应该去学一学?),第三是操作系统(硬技能,虽然最开始我们不知所以,为什么要学它?但其实你可以去看一看,很多工作了很多年的人都会觉得学这些真的很有用。)后面几个也都是需要去了解一下的,比如软件测试,作为一个全栈的软件工程师,你本身就需要有这样一个能力。因为现在很多公司都没有软件测试的团队,很多时候你作为一个工程师,你需要去测试软件的性能,你要知道用哪些工具去测试哪些点。

右边的是难点是你必须要会的点,因为你要拿这些去找工作。比如云计算,Web开发,移动开发,机器学习,CV等,你要确定一个大致的方向,当你学这些东西的时候,你要去做这个方向的项目。

下面,我们来看一个例子为什么做项目会帮助我们把东西都学会?

首先大家要学会一门语言,比如JavaScript,Python。然后,从简单的项目着手,比如一个基本的网站,下载一个地址,从这个过程中你就要知道Http协议中的各种内容,这就可以和你网络那块的基础知识对应起来,你会得到训练。你可能需要解析一下网页,HTML中的解析库,那么你就要用到Beautifulsoup等工具。同样,做一些Web展示的开发,你可能要用到Flask,Django的架构。 所以,在做项目的过程中,你可以把不同的知识点结合起来,知道怎么回事。这些知识点,这些工具都应该在做项目的过程中去了解。但你如果在简历上写这样一个非常简单的项目是不够用的,你要知道你Compete的都是一些学了3-4年CS的人,所以你需要更进一步的学习。

如上图所示,我们在前面已经讲过网页的基础搭建。提到JavaScript,Angular做一些前端, Restful API的使用, Web-Socket实时同步,实时更新,Angular要Keep Up,一直学最新的知识,这些知识你都要懂。更近一步,你要知道前端可以用React,那应该什么时候用呢?你也要拓展一下,通过做项目去了解,比如做一个用户推荐系统,做不同的爬虫等。我们就拿爬虫来举例吧,如果只是需要地址,那我们爬下来地址就可以了,如果有很多其他的信息,那我们先要看一下需要爬哪些信息。爬下来后再进一步分析,比如可以用TF-IDF去查一下重,然后处理一下甚至筛选一下看什么信息有用。像这样把项目细化,然后和实际应用结合起来,公司才会觉得你OK。

网站会了,可能有些公司还希望你能做些其他的,比如把电脑换成移动端。作为一个移动端,就会有很多其他的特性,像手机有GPS,摄像头等,这些东西都需要捆绑进去,做一做相关的运用。当你可以不仅可以做Web,还能做手机端的时候,就可以思考一下怎么让Server运转得更好,这些就涉及到用Java后端,Cloud,Native,云原生这些开发,但这些并不算云计算,这些都太简单了,部署上去并不代表你要学云计算,你可能学一些云原生的东西。你要不仅仅能Hosting它,更需要让它更稳定,高效。

另外,前面我们反复提到。健康检擦,软件测试的原理,静态,动态不同测试,黑盒白盒等不同的测试分类,以及测试的不同点:单元测试,集成测试等知识你都要了解,要让自己像一个懂行的人一样把这一套的系统都了解到。

如何隐藏专业背景的弱点

刚才我们讲了学习的路径,如何一点点系统的把知识点串起来。接下来,我们来讲一下你如何去隐藏专业背景的弱点。有些人会觉得,自己不是本专业的,别人会不会看不起你,或者自己不是本专业的,那面试是不是就会简单一点。其实,这些都不是你该考虑的点。你要提高自己的实力。

从技能准备上来说,大家要有夯实扎实的基础知识,同时强化自己的实战经验。刷题和项目一定要同时进行因为时间有限。行业的一些流行技术,你要能够说出三个应用来,这才可以反映出你对现在行业内发生的一些热点都非常了解。你要关注每个公司发展了什么业务,大家都在大力发展什么。比如,国内现在智能家居很火,这就是一个发展方向,你要懂一些相关的技术。你要具体化几个应用,因为你做Engineer的话需要出产品。同样,你要了解每个公司的面试趋势和难度,要看一下面经,知道常考哪些题和核心的知识点。这些都需要你去准备。

在简历方面你就要突出技术重点,隐藏专业弱点。首先,你有一个靠谱的实习经历很重要,从行业来说,北美的实习经历优于国内,认可度更高,当然国内也有很多好的公司,比如BAT,美团,滴滴,头条等。另外,项目内容重要,你理论知识都懂了以后,就要进行实战训练。