本期校招君就和大家一起从攻克专业知识、积累项目经验、做好招聘准备这三方面聊一聊非计算机专业的同学如何通过自身努力也能进入高薪的互联网大厂。

一、攻克专业知识

科班出身,一个优势在于学习了很多计算机专业的核心课程,这些课程能够帮助大家建立计算机修养的东西,潜移默化地影响和提升技术底蕴。那么非科班出身的同学不仅要完成自身专业课,还需要功克科班同学所掌握的计算机专业知识,难度可想而知。

不过计算机专业其核心课程大致分为四部分:编程语言、数据结构与算法、操作系统、计算机网络。

编程语言,你至少需要学两门,比如C++、PHP、java,如果前端的话js。主要学习的语言,由你自己抉择,比较推荐java,因为BAT每年招聘的java远远多于其他语言,而且基本语法和C比较类似,环境相对简单,初期学习成本相对较低。
记住一点:不管学什么语言,最好用这门语言,自己把数据结构里面那些算法都写一遍,很管用的。
数据结构和算法的学习不一定就是记住二叉树、堆、栈、队列等的解题方法也不是死记硬背一些题目,如果你仅仅停留在这样的表面思想,那么你学习起来会非常痛苦。计算机只是一个很冰冷的机器,你给他下发什么样的指令,它就能作出什么样的反应。
而开发工程师要做的是如何把实际的问题转化成计算机的指令,如何转化,所以,很重要的一点,数据结构和算法对建立解决问题的思想非常重要。
近年来,算法好已经成为了进入大厂最基本的门槛,还可能是双非学生唯一能够补掉自己学历上欠缺的方法。
算法写得好,你就是Offer收割机。
一是因为其他技术学起来门槛实在是太低了。但是算法不一样,它需要候选人绞尽脑汁思考,在一定程度上反映了候选人的智商、逻辑、分析和解决问题的能力。
二是在刷算法题的过程中,会遇到各种各样的Bug,要想把题目通过,就要把所有Bug找到并修改。这与工作中的情景是差不多的,算法题目中遇到了Bug你可以断点调试或者打印调试,时间长了你就知道哪些地方可能会出问题、应该打印那些变量的值观察。这是培养你快速定位问题的能力,在工作中同样需要这种能力。
三是算法题的测试样例多种多样,需要候选人考虑到所有情况,甚至要考虑某些特殊情况。比如LeetCode上就有很多题会卡数组元素个数为0这个样例。考虑全面才能写出bugfree的代码,这样的候选人有谁会不喜欢呢?
关于操作系统,很多人特别容易陷入一个误区,就是Linux多么多么的好,而Windows多么多么的槽糕。
学习使用Linux系统并不是因为系统的优越性,而是因为Linux是操作系统大家族中非常重要的一员,Linux作为开源软件中的杰出代表,是一个优秀的操作系统。
因为他开放的特性,以及在系统结构和机制上,有很大程度参考了UNIX,使得Linux系列的系统在安全性和稳定性上有着很明显的优势。又加上开源软件免费的特点,Linux系统常常作为服务器的操作系统被部署,一些软件生态系统、环境、架构会依赖特定的操作系统,当需要使用这些软件的时候,就难以避免的选择他所依赖的系统。
怎么入门的话,如果对于这个东西完全一无所知,可以先装一个ubuntu尝试一下,试着去理解这个系统,当然,如果怕搞坏电脑,可以装载虚拟机里面。当过了一段时间以后,对于Linux的目录结构、工作机制、配置方法和一些常用命令稍微了解了以后,就可以开始用一些正经的系统了,比如说debian或者红帽家族的centos,尝试一下最小安装(连图形界面也没有)以后,怎么样把需要用的环境和服务搭建起来。然后在试着在上面写一些程序。     
计算机网络。作为一个编程学习者,当你在学习一门语言时,比如Java,你可能会学到一些基本语法,面向对象的基础、集合类的使用,甚至是多线程、IO流以及异常处理,这种时候你往往意识不到计算机网络的重要性。
但当你开始接触Tomcat,接触Nginx,以及Java中的网络编程技术,比如BIO和NIO,甚至是网络编程框架netty,在没有计算机网络基础的情况下来看这些东西,绝对会让你怀疑人生。
百度、头条、腾讯这类公司,特别是腾讯,对于计算机网络的考察是特别严格的。比如三次握手,四次挥手这种常见问题,一般还会延伸考察,比如为什么要三次握手、四次挥手,没有第三次握手或者没有第四次挥手会怎么样。再比如TCP协议的作用是什么,它是如何保证传输可靠的,这时候你就要了解TCP保证可靠传输的机制,比如滑动窗口,超时重传,分组确认等原理,也是你需要能讲清楚的。
在学习计算机网络的路上,大家可以参考刘欣老师的《码农翻身》一书,有助于加深对于计算机网络一些概念的理解。    
编程的四大件:编程语言、数据结构与算法、操作系统和计算机网络,掌握好这四大件,就不愁没有Offer。而这四大件,恰恰是科班出身应届生的专业必修课,所以非科班出身的同学也一定要学好、理解好、应用好这些知识,就是在给自己省力气、省时间。

二、积累项目经验

项目经验是为了证明你有招聘要求中的某些技能,证明你做过这方面的事情。那么大学中如何去积累项目经验呢?

一是加入一些编程社团,这些社团往往会组织或者参加一些比赛、项目,刚开始的时候可以跟着高年级的学长做,帮他们打杂,锻炼你的编程能力,等到技术能力培养起来之后,就可以自己做了,不需要人带了;

二是找学校里代码能力比较强的同学一起合作参加比赛。和一些工程能力强的同学一起合作会极大的提升你的写代码能力,会培养一些之前你自己写代码的时候一般不会有的好习惯;

三是找学院的老师做项目或者去外面公司实习,主要是找个靠谱的大神带你,鞍前马后的跟着,充分、高效利用所有业余时间和节假日学习和实践;

四是可以参与计算机专业的每一次课程设计的机会,最好自己独立完成,通过自己的思考把所有的算法都搞明白,所有软件人员的编程能力,都是在不断的敲代码和调试过程中形成的,无法通过读书来完成,实践出真知的道理就在于此。

三、做好招聘准备

第一步就是简历。一个算法竞赛相关比赛的奖项会大大提高你的简历通过率。毕竟非科班出身的人员总得让HR看到一些能证明自身能力的“闪光点”吧。

项目经验和获奖经历都是很好的证明方法。算法相关的比赛/考试有:ACM省赛、ACM-ICPC区域赛、蓝桥杯、团体程序设计天梯赛、PAT甲级/顶级考试。你可以报名参加,多报一个就多一个拿奖的机会,就能提高一点简历通过的几率。

接下来就是笔试和面试。每一场笔试和面试都是一次练兵,就像高考一样,经历了无数次练兵,最后上战场心才能不慌。
9月、10月、11月各个大厂开始秋招,如微软、阿里、美团、腾讯、网易、京东、快手、360等。这期间大家需要做的是“广撒网,多捞鱼”,不放过任何一个笔试/面试机会,多看别人写的面经,总结常考的面试题,还要记得持续刷算法题保持手感,否则笔试都通不过。
校招君觉得学习其实是最简单的,难的其实是对知识的运用,也就是说,你学那么多知识其实不重要,重要的是当你需要的时候,你可以调用它,否则,学再多,用不起来有何用?
至于很多人调用不起来,一是知识混乱,调用繁琐,导致错误,致使脑袋一片空白,二是很多知识被你放在阴暗的小角落,你早就忘记它的存在了,所以我们要把一整块的知识整理起来,一大块的内容,包含体系化的知识,不容易遗忘,因为它足够“大”,内容足够丰富,所以一些可能被放在角落的知识现在有归属了,你也就不容易遗忘了,当你需要调用他们的时候,你就会很容易的找到他们了。
10月中旬大概就会有Offer陆陆续续拿到手了,我们拿到Offer后会越战越勇,把后面的Offer都拿到。希望你到这个时候进入的是选择公司的状态而不是被公司选择的状态。
写到这里其实大厂招的人,尤其是应届毕业生,他们并不一定是要招多么优秀的人,而是要看到他们的基础和潜力。举个例子,有同学想从事Android开发方向,他拿到了腾讯Offer,可以从零开始学习Android。

结束语

学习的过程一定是的耐得住寂寞,忍受的了孤独,编程尤为如此,夜深人静之时,还在敲代码,调bug,都是这样过来的,任何一次成长,都是要付出努力的。

所以校招君建议如果非科班生想要转行,都要尽早下定决心并开始准备,时间越多准备就可以越充分。“学习如逆水行舟,不进则退”,只有不断的学习、进阶,才是我们的出路!与君共勉。