阅读 12913

曾经老师看不起的前端开发,如今却斩获多份大厂 offer,最终走进阿里

相信大家看到这样疑惑的标题,一定会有很多的问号。什么是前端开发?为何会被老师看不起?又如何走进阿里的?

别急,我们一个一个来回答。

回答这些问题之前,我先做个自我介绍,我是来自中南林业科技大学计算机科学与技术专业的一个很普通的大三同学,我叫王家祺,可以称呼我 Jack Wang。我是一名很普通的前端玩家,凭借过人的运气,最终在 2020 年春季校园招聘,斩获了阿里腾讯等多家互联网大厂的实习 offer,并最终选择走进阿里。

什么是前端开发?

在软体架构和程序设计领域,前端是软体系统中直接和用户交互的部分,而后端控制着软件的输出。将软体分为前端和后端是一种将软体不同功能的部分相互分离的抽象。

—— 引用自维基百科

维基百科的解释已经相当到位:前端是软件系统中直接和用户交互的部分

那么试想一下平时我们用的软件,哪些是与你直接接触的?

没错,就是你看到的可操作的部分。你网上冲浪看到的每一个网页,你用过的每一个小程序,你手机上安装的每一个 APP,甚至电脑上安装的客户端程序,都可以被称为前端。

前端是一个大且宽泛的概念,涉及到的知识以及体系众多,光网页开发语言,就要学习至少 3 门(HTML,CSS,JavaScript),更别说小程序、APP 和客户端了。除此之外,数据结构和算法、计算机网络,前端的工程化、性能优化等知识也是必不可少的。

伴随网络带宽不断提高和浏览器、WebView 的不断发展,前端业务日益复杂化和多元化,前端开发已经由以 WebPage 模式为主转变为以 WebApp 模式为主了,朝着界面美观、交互丰富且性能更好的方向大步迈进。

为何会被老师看不起?

曾几何时,在某次操作系统的课堂上,老师说了一句:前台(前端)一个初中生花一个星期就能学会,你们还专门去搞这个是很丢脸的。

可想而知,我是多么不堪。一个初中生花一个星期就能学会的内容,我却花了一年多的时间去学习和沉淀。同时也说明了一个问题:科班的老师对于前端开发普遍存在偏见。

存在偏见是可以理解的:

  • 大多数科班的老师醉心于教学和学术研究,已经很少去关注技术的发展,对前端还存在只是切图的刻板印象。

  • 前端近几年的发展十分迅猛,发生了许多翻天覆地的变化。

众所周知,前端开发者通常都被人称为切图仔,这也是很多前端开发者对自己的称呼。事实确实如此,很多前端开发者都还停留在简单的切图的阶段。从设计师处拿到设计稿,然后用代码来还原设计稿。这确实是很多前端开发者在工作中做的事情。这也导致了前端开发,在科班的老师眼里是如此的不堪。

但是除了切图以外,前端开发者还需要掌握哪些技能呢?

前端知识图谱
前端知识图谱

数据结构和算法可以说是所有开发者必备的技能了,同时也是一门大而广的学科,篇幅限制就不展开了。

本人也才疏学浅,暂时只能整理出这么些知识点了。面试可能会考察到的知识点,就是前端开发者除了切图,还需要掌握的知识点或技能,有些属于应用层面,有些则需要深入原理。

现在还敢说一个初中生一个星期就能学会嘛

更何况,在阿里,切图的工作大部分都可以使用 AI 自动完成,AI 甚至还可以实现部分交互逻辑,那么作为一名前端开发者,有什么技能是 AI 无法替代的?

imgcook 由设计稿一键智能生成代码

双十一模块 79.34% 的代码是怎样智能生成的

如何走进阿里?

众所周知,阿里是国内最顶尖的互联网公司,拥有着国内甚至世界范围内顶尖的技术,由全球最大的电子商务需求驱动。而我加入的淘系技术团队,被称为东半球体量最大,实力最强的前端团队

那么我是如何披荆斩棘,最终走进阿里的呢?后面都是满满的干货,建议精读

走进阿里 = 50% 基础 + 20% 项目 + 10% 思考总结 + 10% 面试技巧 + 10% 运气

这就是走进阿里的公式。

50% 基础

基础是非常重要的。

万丈高楼平地起。

如果基本的语言使用还存在问题,那么第一轮就会被筛,就更不可能有后面的故事了。

基础的学习,知识点都在上面的思维导图里面,里面列出的每一个二级分支,都属于必知必会的,就不详细讲了,这里主要介绍一下一些我看过的还不错的基础知识书籍:

  • HTML & CSS:《HTML5 与 CSS3 基础教程》(我叫它兔子书,因为封面上有一只兔子)
  • JavaScript:《JavaScript 高级程序设计》(又称 JS 红宝书)、《ES6 标准入门》、《你不知道的 JavaScript》(不建议初学者看,且建议看英文原版)
  • 数据结构 & 算法:《啊哈!算法》(生动有趣)、《学习 JavaScript 数据结构与算法》(非常基础的算法教程)
  • 计算机网络:《计算机网络》(谢希仁著)、《图解 TCP/IP》(反复看,最好二刷甚至三刷)、《图解 HTTP》(反复看,最好二刷甚至三刷)
  • React:React 官方文档、《深入浅出 React 和 Redux》
  • Vue:Vue 官方文档、《深入浅出 Vue.js》
  • Node.js:《深入浅出 Node.js》(不建议硬啃)

我猜到有些同学可能会说这么多书上哪找,我就帮你们省去找书和买书的时间吧:

密码:70zc

20% 项目

项目是证明你动手能力的重要凭据。基础知识学完了,学扎实了之后,就要开始动手做项目了。把书本上学到的基础知识,一行一行写到代码里面,加深自己印象的同时,你会发现一句话:

纸上学来终觉浅。

很多同学不知道上哪找项目,也不知道做什么项目,这里我给几点建议:

  1. 不建议再做什么仿饿了么仿美团仿携程了,也别再做什么后台管理系统了,这种类型的项目,面试官看一眼就知道没有技术含量,也不会有自己的思考。因为这种类型的项目,大多数情况下省略了需求分析和文档制作的过程,仅仅只是编码实现。这种类型的项目只适合学习使用,并不适合应聘,除非你在此基础上加入了很多技术性的内容。比如使用一些新特性对项目进行重构,并产出了不少技术上的总结和思考。
  2. 跟招聘要求契合度不高的项目可以做,但不建议写在简历上。比如你找前端的工作,搬了一个 Java 的课程设计到简历上,就不合适了。
  3. 建议紧跟时事,做一些与时事相关的项目。比如新型冠状病毒肺炎疫情可视化地图、疫情期间无法出门云祭祖的小程序(笑)之类的。
  4. 建议尝试接一些公司企业或是老师的项目。通常情况下,这些项目都会具有一定的挑战性,且有时间要求,但收益也会相当可观(对于学生来说)。在做项目的过程中你会了解到整个开发的具体流程:需求对接-原型设计-编码实现-文档制作-测试发布,这对个人的成长是非常有帮助的。
  5. 建议先加入一些中小型公司,做一些难度不大的项目,学习公司对代码风格和质量、工程化、性能优化方面的要求,同时尝试将其引入到自己的项目中。

举一个很简单的例子:目前市面上对于我们学校课表支持自动导入的 APP 不多,但是课表又是刚需,怎么办?

这个时候就可以自己做一个,做项目的过程中肯定也会遇到一些问题,服务了同学们的同时,丰富了自己的简历,提升了自己的实践能力。参考学校 @倪小白同学 的例子,他的林大课表就做的很不错。

10% 思考总结

项目做完了,必须要思考总结。我们做的每一个项目,不论是否能够搬上简历,都要定期做思考总结。最好每周总结一次,如果做不到每周一次就两周一次,时间跨度不要太长,实在没空一个月做一次总结,但不能不做。

项目总结通常分这么几个部分:

  1. 上周的开发过程中遇到了哪些问题?
  2. 问题如何解决的?
  3. 涉及到哪些知识?
  4. 有没有更好的方法?

上面这些是每周做的思考总结,当项目完全做完结项的时候,也要对整个项目做思考总结:

  • 技术栈:项目用到了哪些技术,简单罗列一下。
  • 体验&交互:项目整体的体验如何,动画效果是否流畅,交互方式是否人性化,出现问题是告警是否丰富,有没有还做的不够的地方。
  • 性能:页面首次加载时间为多少,发起网络请求到可交互的时间是多少,是否存在过度的回流重绘,有没有可以优化的地方。
  • 开发效率:项目是如何推进的,如果是团队项目,质量是如何把控的,如果是单人项目,效率是如何把控的。
  • 工程化:自动化部署,打包构建优化,代码规范,commit 规范等。

10% 面试技巧

面试技巧虽说只占 10%,但是事实上,面试技巧直接影响到了你基础和项目部分的发挥。

首先我们要明确什么是面试?又为什么会有面试?

面试是面试官通过相互交流来了解求职者的方式。面试产生的原因是用人单位需要在较短时间内快速确定求职者的各方面能力以及潜力。

那么,既然明确了什么是面试以及面试产生的原因,我们就应该能明白一点:

面试是一个双向选择的过程。

纵使大部分同学都是拼了命的想要拼进大公司,认为面试只是公司单向选择的过程。但事实上,你在不知不觉中也在对公司做了选择。

大部分的互联网公司的实习生面试流程都至少有 3 轮2 轮技术面 + 1 轮 HR 面

这是比较基本的面试流程,但是事实上大厂通常都会有 4-5 轮3-4 轮技术面 + 1 轮 HR 面

那我们把面试流程进行拆解,通常是这样的一个流程:

  • 1-2 面通常是基础考察,从各个方面考察你的基础知识是否扎实,基本不会涉及到你的项目,基本上会围绕你简历上的技能树提问。
  • 3-4 面通常是动手能力考察,结合你的项目,考察你对项目的理解,在项目中遇到的问题,如何解决的,以及一些对项目的思考沉淀。其中也会穿插一些跟项目相关的基础知识。
  • HR 面通常是问一些个人性格,学习生活情况或者家庭情况等比较私人化的问题,当然,不排除从奇怪的角度提问的情况。

流程大致是这样,那么我们来讲一些技术面的技巧:

  • 自我介绍一定要提前准备好,一定要有亮点,体现你与其他同学不同的地方,你的优势是什么,给面试官留下一定印象的同时,也能让面试官顺着你的优势准备后续的问题。举个例子,如果你觉得你在面试阿里之前,有其他公司的实习经历,而且公司规模不小,这段经历是你的优势。那么你就可以在自我介绍的时候明确告诉面试官。面试官就很有可能在后续的提问环节中对你这段实习经历发问,这样就能在面试一开始就把面试的节奏把握在自己的手中。

  • 面试官所有的问题,基本上都是围绕你的简历来提的,或是从简历上延伸出来的。所以不熟悉的知识别往简历上写!比较熟悉的知识点写了解,非常熟悉的知识点写熟悉,熟练使用但不了解原理的写熟练使用。这样面试官看了你的简历描述,就不会在你不擅长的方向为难你。

  • 遇到面试官提问你不会的情况怎么办?答案是,实话实说直接说不会。这样能够让面试官快速确定你的知识和能力范围。如果你似懂非懂,非要说一些不一定正确的答案,那么你就犯了班门弄斧的大错了。作为一名实习生/应届生,缺乏工作经验,不可能面面俱到,有不懂的再正常不过了,面试官绝对不会因为偶尔一两个知识点不会而挂了你。当然,这也有例外,那就是必知必会的知识点你不会

  • 当面试官连续两个问题你都没能答上来,或者都答得没让面试官满意,这个时候你就要小心了。这种情况说明你的面试节奏已经被面试官所掌控,通常情况下这场面试就提前宣告凉了。但是!我们有技巧,重新将面试节奏掌握在自己手里。我们大可以直接跟面试官说:xxx 我确实了解的不够深入,今后一定努力补上,您可以问我其他知识点,比如 xxx 我就了解的比较深入。通常情况下,面试官听到你这么一说,他很有可能会对你的这个“深入”的程度感兴趣,于是会接着你的话说一句:嗯好,那你跟我讲讲 xxx 吧。就这样,话锋一转,面试节奏又回到了你的手上,这个时候你就可以拿出你提前准备好的杀手锏,说到就连面试官都不了解的地步!当然,不排除有些面试官可能比较缺乏经验,或者就是要硬刚,那就莫得办法了(哭泣)。

  • 面试结束之后一般会有一个时间面试官允许你向他提问,这个时候应该提一些什么问题?答案是,可以提问你在这次面试没有回答好的知识点,与面试官一同交流,又或是提问一些你最近的遇到的问题或者你自己的思考,与面试官一起讨论。总之,这个环节你要表现出一个学习者的态度,这一点很重要!纵使你在面试中的表现不是那么惊艳,但如果你在这个时候表现出的态度非常诚恳,是一个不错的加分项。因为实习生/应届生招聘,尤其是实习生招聘,面试官更加看重的是一个学习的能力

  • 最后的一点,是我个人觉得最重要的,就是不管面试的时候多紧张,一定要笑!一定要笑!一定要笑!笑能很大程度缓解自己的紧张,也能给面试官带来一个积极乐观的好印象。

目前我掌握的面试技巧大概就这么多了,如果各位看官们还有其他的奇技淫巧,欢迎点击在 GitHub 上编辑此页补充!

10% 运气

说实话,运气强求不得(笑哭)。

有些时候面试官正好问到你非常熟悉的部分,那么面试结果通常都是很不错的,相反就会特别沮丧。

心态

心态应该是整个面试流程中最最重要的了。

还记得前面说的那句话吗?

面试是一个双向选择的过程。

如果你在某一次面试中,面试官给的压力很大,并且最后还没能通过,你肯定会非常非常沮丧,甚至会怀疑人生,这个时候心态非常容易发生变化,自信心崩溃。

我们只需要知道一点:

公司没有选择你,并不一定是因为你能力不行,更大的原因是你没达到公司对某方面的技能要求,记住,仅仅只是某方面

比如公司想招一个对 React 技术栈更加了解的同学,而你的技术栈是 Vue,那么你通过的概率可能会比其他了解 React 技术栈的同学要低一点,但这并不代表你的能力比了解 React 技术栈的同学差。

保持自信的态度,不断面试不断总结,查漏补缺,一定会有好结果的,因为:

如果你自己都对自己的能力产生了怀疑,就没有人能相信你了!

跟我一起面试阿里的 @17 级地信 1 班罗霁鑫 小伙伴就是一个非常好的例子:

起初他不是很有信心,因为自己是非科班的,而且学校出身也不好,已经准备考研准备了好几个月了。

后来我把淘系内推的链接发给了他,问他要不要试一试,反正试一试最多耽误一个月考研,然后他鼓起勇气试了一下。

最后的结果大家应该都能猜到,我们都进了终面并最后走完了所有的流程,拿到了阿里的 offer。

最后的最后

我为什么会取一个如此有争议的标题呢?

我并不是想怼那些对前端开发存在偏见的人,而是想让大家知道:

前端其实是一个非常综合的方向,并没有想象中那么简单。前端在近些年也非常热门,伴随着 5G 技术的发展,前端一定会更加受欢迎。

任何一个职业都有它存在的理由,还请不要戴着有色眼镜看待!

最后就引用一句话:(掘金好像有敏感词限制)

我们都在努力奔跑,我们都是追梦人。

送给大家一张壁纸,它一直是我电脑和 iPad 的壁纸:

壁纸
壁纸

致学弟学妹

插播一条广告,目前我在学校的软件协会担任技术部部长,正在召集一批对前端感兴趣的学弟学妹,为前端的发展贡献一点点小小的力量。

我和 @17 级地信 1 班罗霁鑫 同学两个人是今年我们学校进入阿里的前端实习生,但我们希望这只是前端在我们学校的开始而不是结束。

我们会带一批喜欢前端的学弟学妹,并为大家提供学习指导,等大家到了需要找实习的时候,我们还可以为大家提供各种互联网大厂的内推资格

如果你也想加入东半球实力最强的前端团队,可以加我阿里师兄的微信:wuxiaorui86,我和 @17 级地信 1 班罗霁鑫 同学两个人就是在师兄的帮助下走到最后的!如果已经有幸加入了东半球实力最强的前端团队,师兄还会辅导你的转正答辩,转正率几乎 100%

如果文件链接失效了或者想加入软件协会又或是跟我一样的追梦人的话可以关注我们的公众号:Hello FE,我们会定期在公众号发一些自己的学习心得~

公众号
公众号

除了我的这篇文章,我的同门师兄弟也做了总结,面向非科班的同学:

还有面向在技术选择方面存在顾虑的同学: