双非院校,成绩不好的他,如何自学拿到大厂前端 offer?
❝我的春招结束已经有一段时间了,之前只做了一个面试的简单总结,但是没有对自己春招的做一个比较完整的回顾,这里忙完了入职的事情,来做个简单的回顾。
❞
在这之前,我做个简单的自我介绍,我目前大三,就读于成都某双非一本高校物联网工程专业。从大二开始真正自学前端,大二暑假开始找实习,到大三上参加春招,目前已收获阿里,腾讯,美的春招前端实习 offer,刚入职腾讯,写这篇文章的目的其一是对自己的前端之路做一个回顾,其二是为跟我一样挣扎在校招中,或者一起挣扎在前端初级划水阶段的同学提供一点小小的帮助。
好了,闲话不多说,一手前端菜鸡的爬坑之路送给大家。
为什么学前端?
我觉得,所有的事情都应该有一个为什么,知道原因,才能更好的去做,在面试过程中,这一点也非常的重要。所以为什么学习前端,应该是在我学习前端之前乃至整个前端生涯当中,都应该随时思考的一个问题。其实在那么多的面试中,我都被问到过类似的问题,你的专业是物联网工程,是什么契机让你走进了前端的学习道路呢?
我的回答是这样的:
我从高中开始接触编程,当时上微机课,老师教的 VB,给我们出过几个很简单的逻辑题,让我们用代码或者伪代码解决。我搞了一个下午,画了程序框图,写了 VB 代码,拿去给老师看,老师告诉我全部正确。嗯,那种满满的成就感,从自己的兴趣当中获得的感觉,真的是令人难忘。于是我算是拉开了我码农道路的序章,自己沉迷于 VB 当中,但是当时受限于网络条件,即使去网吧也是五连坐(巅峰郊区钻石),这一块一直没什么大的进展,仅仅停留在拖动框体形成一个 exe 程序的水平,对数据结构前端后端之类的一概不知。这算是最开始的契机。
后来,高中结束,填报高考志愿的时候,家里面的人一致反对我填报计算机相关专业,一致同意军校或者医学院校,但是,被计算机迷住(主要还是想着敲完代码上分方便)的我,怎么可能屈服,高中偶然的机会接触到了物联网相关的东西,自己也在填志愿的时候多了解了一下,于是我的曲线救国之路开始了,六个平行志愿的第一专业全部是物联网,然后告诉家里面人,这专业主要是软硬件结合,不是单纯的程序员,最终以一分之差错失第一志愿一个 211 的院校,来到了现在的学校,开始了物联网专业的学习。
在大一上的时候,学校开了一门课程叫网页设计,当时那种在 txt 里面简单敲几行代码,改个后缀就能变成一个网页的技术,给了我很大的新鲜感,让我重新找回了高中玩 VB 的感觉,于是自己也找了一些资料进行简单的学习,最后这门课程的成绩是我大学目前所有科目的最高分。大一下的时候,我现在所在的实验室招新,刚好有 web 前端的方向,于是我报了名,并且顺利的通过了面试加入到了实验室当中,后面还成了实验室的负责人和 web 项目组的组长,当然这都是后话,进入到实验室以后,我就一直在 web 前端的方向学习,其实在这个学习的过程中,也是不断获得成就感的过程,记得在我学了 Jq 之后,自己手动还原了我们学校的静态官网的时候,那种成就感是让人特别着迷的。
所以,我学习前端的原因,不外乎就是一个-----兴趣和成就感,前端,可以给我带来这些东西。
怎么学前端?
明白了为什么学习之后,就应该思考,要怎么去学习了。其实根据我的了解,目前国内高校计算机相关专业的课程大多是偏向于后端的课程,可能有些学校会有一些质量比较高的实训课程或者之类的东西,向学生教授前端比较前沿的开发知识,除此之外,很少有课程会涉及到前端开发。即便是有,也是非常浅显过时的技术,这些东西对于想要在前端领域有所成的同学来说,是远远不足的。那么对于前端同学来说,剩下的路,除了外面的 IT 培训班,就只剩下自学了。
其实培训班这个东西,套路大家都懂,不排除极个别质量特别高的培训课程,市场上大多数的培训课程,不外乎就是带着学生走一遍基础,然后做一两个模板项目,讲一点点面试经常遇到的原理,到此为止(少则几千,多则几万到手,以后转行当培训讲师好了)。在我个人看来,这种方式的速成全是外功,而没有内功,是属于急功近利的一种,基础不牢实,而且除掉培训所遇到过的内容,对于其他的内容基本属于一问三不知的状态(当然不排除有很强的大佬,毕竟三百六十行行行出状元嘛,在这里只说一般的情况)。这种模式对于前端同学后续的发展是极其不友好的。
然后就是自学这条路了,其实在自学的时候,也会面临着自我学习的资料非常零散,以至于学习的知识非常零散,成不了系统,这样的基础对于后续的进阶也是有很大的弊端的(作者亲身经历)。所以,作者在自己踩坑之后,总结了一条自我觉得还不错的前端学习方法,这里写一下,大伙儿就看个乐呵就行,有什么不妥的地方欢迎多多交流。
首先,作为一名前端开发者,得清楚自己的定位是什么。其实在市面上,包括学校很多老师的眼里,前端开发是一个不入流的技术,因为在他们的眼里,前端开发者不外乎就是对着 UI 图写点 html,css,再来点 js 搞点脚本,切切图就完事。这些工作非常的简单,完全没有必要搞成一个专门的系统去学习。但是现在的前端,早就不是这个样子了。大人,时代变了。
在我看来,前端开发,同样是属于软件开发里面非常重要的一块,同样是属于整个计算机科学体系里面的一块。所以,认为前端只是切切图,学学 html,css,js,最多在搞个框架什么的,我认为这种观念是错误的。前端开发者,同样需要建立完备的计算机科学知识体系,比如操作系统,计算机组成原理,计算机网络,数据结构等计算机基础知识都需要十分的牢固,与此同时,还需要建立前端的知识体系,只有这两个体系相互结合,共同学习,才能叫做一名前端开发者。
说了这么多,到底怎么学前端?前端需要学哪些东西?
前端同学在刚开始学习的时候,不管在哪里,都会从远古三剑客开始,然后逐渐的往后学习,JQuery,Vue 等等框架。这样的一个大体学习路线是没什么毛病的。毕竟远古三剑客是前端的基石,但是重要的地方在于,在完成一个模块的学习之后,不仅仅要学习,还要学会总结,对前一个模块的知识进行一个系统的总结,然后把这一块知识添加到自己的技能树上,这个技能树就是前端的整个技能树。除此之外,在完成一个模块之后,建议再通过这个模块完成一个小的 demo,这样的话,对这个模块的知识会理解的更加深入,因为实战才是最好的检验。
刚刚也提到过,很多前端同学都存在的一个问题是,学习的东西不够系统,知识无法建立起一个完备的知识网络,包括我自己也吃了这方面的亏,在前端知识体系上比较的薄弱,这样不管是在工作中遇到问题,或者在面试中遇到相关的问题,都没有办法很好的联系起相关知识解决,所以,前端同学在学习的过程中需要特别留意的一点是,把每一个模块有机的串联起来,形成一个自己的前端知识体系。这个也是前面提到的总结的效果。
关于学习路径的话,其实现在网络上对于前端的学习路径已经是蛮清晰的了,我这里就不发表太多个人的拙见,假如有同学学到比较迷茫了不知道下一步要学习什么的话,可以去各个招聘平台看看前端相关的职位的 JD,就知道该学啥了。
考研还是找工作?
在我学习前端到一定的程度的时候,我已经大二下期了,这个时候需要面对一个很现实的问题,是继续在前端走下去,还是暂时放下前端的学习,走上身边大多数人走上的考研的准备道路。
其实现在看来,这个选择的核心问题是对自己以后发展的思考,是更进一步去更高的地方深造一下,然后走上科研的道路,或是重新走上研发道路。还是说现在直接选择在研发道路上越走越深,参加本科阶段的校招。当然在当时的我看来,仅仅凭借我现在的双非本科学历,去参加校招的话,竞争力是肯定远远不及 985211 的本科同学的,何况与我们一起参加校招的还有很多研究生同学。我仔细分析了我自己的情况之后,首先觉得自己不是搞科研的料,那玩意儿怕是比研发还掉头发。于是我就只剩下了研发这条道路。
那么研发的话,就是考研还是不考研的问题了,不可否认的是,如果经过了更高阶段的深造,那么同样是走研发道路,研究生的天花板大概率会比本科生更高。但是我仔细分析我自己的情况之后,如果考研,那么对 985211 高校的研究生,我考上的把握并不大,至少跟我本科阶段参加校招进大厂的几率相比,要小很多,而如果我考一个普通学校的研究生,那么跟我考研的初衷就违背了,这样的校招竞争力,在我看来,还没有本科阶段直接参加高(我自己的一点拙见)。所以,我毅然而然的在前端开发的道路上走下去了。
其实纠结这个问题的同学,只需要想清楚下面几个问题,就完全不会纠结了:
1.为什么想考研? 2.为什么想找工作? 3.自己的人生规划是什么? 4.5 年内,考研或者不考研,谁的收益更高? 5.10 年内,考研或者不考研,谁的收益更高? 6.自己更在乎短期利益还是长远投资?
怎么准备找?
既然决定找工作了,那么下一步就是该准备找工作。如何找,在找工作的这个过程中,我们应该准备哪些东西?
这里我们讨论目标是大厂的情况,其实我个人觉得,我们这种双非学历的本科同学,想通过自己的努力进入到 BATTMD 这类大厂之中的话,实力和运气缺一不可,运气这个东西不可控(我日常非酋,估计运气到这来了),那我们就谈谈实力,要如何准备,才能达到大厂的门槛。
对于实力这一块,我们分为两个部分,一个部分是软实力,另一个部分是硬实力。软实力在我的理解里面就是一个人的沟通表达能力,学习能力,理解能力以及团队协同的能力等;硬实力就是我们的技术能力了。
对于软实力,个人觉得这是一个人的基本素养,这个是没有办法短期速成的,这一块也是比较靠天赋的一块,有的人天生比较擅长表达,学习新东西也比较快,能很好的与他人合作,除掉天赋,就是长期的积累,在日常的学习和生活中,下意识的去锻炼自己的这些能力,久而久之,这些能力慢慢就会提升上来。
对于硬实力,这个是我们实力中的基础。关于这一块,才是我们在准备过程中的重点,前面提到的运气和软实力,更多的是一些短期不可控的因素,而硬实力,在我们具备一定的技术基础的条件下,在相对更短的时间内,我们能提升的最多的地方。在技术这一块,我把能准备的东西分为两个部分,第一个部分是专业知识基础,也就是我们前端相关的基础知识,另一个部分是自己做过的项目。对这两个部分都去进行一个系统的复习和整理,以此达到提高自己硬实力的目的。
首先是基础知识部分,我是从去年的十一月份开始准备春招的,当时已经接到头条日常实习的面试通知,然后跟 PCG 看点的师兄做了一个比较深入的交流,本来是想取取经临时抱下佛脚,但是交流完之后,发现自己的知识系统是真的特别的零散,做过的项目也没有很深的思考,都是需求导向,能跑就行。所以在头条一面挂掉之后(我猜是挂在算法,其他问题都回答的还不错,也说不定本来就是被 KPI 了),给自己列了一个前端知识的大纲,对已经学习过和了解过的前端知识进行一个系统的整理,然后罗列出具体的知识点,给自己制定了一个百日复习计划。按照计划去复习提纲上的知识点,在这个过程中,一个是想给自己到时候春招的简历加点分,另外一个是想再去试试找个实习来学点东西,也正好趁寒假赚点过年钱。所以开始我的第二波投简历找实习的历程,最终找到了一家做 toB 翻译平台的公司去实习,公司不大百人左右。期间跟了一个子系统之后,就独立负责了一个子系统的开发,搞完就跑路回来春招了。这里跟大家分享一下我春招之后简单整理的前端知识网络图,其实并不完善,因为每个人心中都有一个自己的知识网络,我这里也只是列到了第二层,更深层次的重点每个人理解的都不一样,就不在这里献丑了,谢谢各位大佬轻喷。
然后是项目部分,前面谈到之前对自己的项目没有很深的思考,都是需求导向,所以在这个准备过程中,我重新整理了我自己做过的所有项目,包括实验室合作的外包,自己的比赛项目,自己团队里面正在做的那一套东西,都进行了系统的整理。对每个系统都思考了如下问题:
1.为什么要做这个项目?这个项目的用户对象是谁? 2.这个系统对用户来说,解决了什么问题? 3.这个项目怎么做的?技术选型是什么样的?为什么这么选? 4.这个项目的结果是什么?目前处于什么状态? 5.在这个项目当中,我的角色是什么?负责了什么工作? 6.这个项目遇到的难题是什么?如何解决的? 7.站在现在的角度来看,这个项目从设计到现在完成,有什么不足,可以怎么改进?
其实在思考这些问题的时候,越到后面,越能发现不管是什么项目,从设计思路和实现过程来说,有很多共通之处,当然,不足也有相似之处,只是说越到后面做的项目缺陷越少一点,吃一堑,长一智嘛。
做完这些,前期的准备工作就差不多了,当然刷算法刷题是必备坚持的,这里就不多说了,LC 走起。然后看看面经啥的就差不多可以准备去面试啦。
怎么找?
说完了准备找工作,剩下的就是如何找的问题了。首先说找工作的渠道,一般对于我们校招生来说就是牛客网,当然像我之前找实习的时候也有用过 BOSS 直聘,实习僧,拉钩网,智联招聘等等招聘平台。这些平台上的公司质量参差不齐,还有不少是培训公司,所以如果想要使用这些平台的话,得擦亮眼睛了。牛客网上面的话就会有很多大厂相关的内推信息等等,可以去这上面看看适合自己的公司,然后投简历就 OK 了。
在找工作的过程中,我们需要注意两个部分,第一个部分是简历,第二个部分就是自己的面试技巧。
首先在简历部分,网上的简历模板已经很多了,这里就说一点我的经验,第一个是简历页数不要过多,一般一页为佳,第二个是简历上 内容的重要性,在我的理解里面是,除掉个人基本信息以外:实习经历>项目经历>获奖荣誉>基本技能>校园经历>个人评价,如果篇幅不够的话,可以考虑删掉后面的内容。
然后是面试技巧,这部分的话,别人的经验再多也只能是别人的,这里呢还是建议大家多去试试面试,每次完了之后及时总结本次面试,有哪些不足,有哪些比较好,这样才能总结出属于自己的面试技巧,别人的面试技巧只能作为一个参考。如果要看面试技巧的话,这里推荐去看看冴羽大佬的这篇文章项目经验回答技巧[1]。
Reference
项目经验回答技巧:https://juejin.im/post/5e7aed9c6fb9a07cac1d872d