最近和很多已经工作了的同学聊天,发现大家都遇到了很多的问题或者说是烦恼。整理了一下,大体可以分为两个大的种类:
从这些问题中,我抽出来几个比较具有代表性的,我们先来看一下
同学A:
前端的技术太杂了,各种技术更新太快,感觉一个新的技术还没有学完,就已经过时了。完全学不过来
同学B:
学不动啦,vue 2.x 还没有搞清楚呢,vue 3.0 就又要来了,react 还没有学过,node 也不会,还有各种新的概念比如:大前端、微前端、serverLess、前端工程化…这些都没有接触过
同学C:
非常羡慕大厂的同学,接触的技术深,管理和流程规范,技术面也广,不像自己整天在小公司里面写 if-else
同学A:
工作了3年了,感觉什么都会了,又觉得自己什么都不会,不知道如何进行提升
同学B:
天天写业务代码,公司的技术栈很老旧,感觉跟不上时代,也没有什么技术含量,也没有什么沉淀,成长的太慢了
同学C:
对框架原理层的东西接触的太少,工作上也接触不到,感觉只是在做代码的搬运工,根本无法突破现在的技术阶层
这些问题我也进行了思考,我觉得他们应该并不是小众,而是一个大众化普遍会遇到的问题。包括我,我当年也遇到过类似的问题。
如果你也有这样的疑惑的话,那么这篇文章或许会帮助到你
我们会从三个方面来去说明上面的问题:
大家可以根据自己的情况,直接跳到对应的模块中。
整个博客的内容,我整理出来了一个脑图。大家如果觉得看下面的内容过于繁琐的话,那么可以直接看这个脑图。
脑图相当于是一个简化版的文章内容,包含了文章中所有的知识点。如果看到某个内容节点时有所疑惑的话,那么再去看具体的文章内容,这样也不失为一种好的方法。
对于前端技术体系这块,我把它主要分成了 6 个方面:
而整个前端的体系也是针对这 6 个方面来去解释的。
部分技术点可能同时属于多个方面,这一类的技术点我就根据自己的理解放入到了我认为合理的位置了
首先我们先来看 PC 端技术,对于现在的 PC 端来说,我们可以主要把内容分成两块:
这一类框架对于维护老系统的同学(以政府项目或国企项目为主 )来说应该非常的熟悉,虽然说现在越来越多的项目已经不再考虑兼容 IE9 这种老的浏览器了,但是对于一些老系统来说,因为历史遗留问题,或业务兼容问题,根本无法忽略掉 IE 浏览器的兼容。
所以说这一类的技术依然是无法被忽略的一块,毕竟 技术永远是为业务来进行服务的,虽然可能大家都非常讨厌这一块的内容。
这一块是目前使用率最多,也是最被大家所接受的。它们大大的提高了前端的开发效率,并且增加了前端的开发壁垒。可以说没有它们,就没有现在的前端开发环境。
在现在如果你想要找一份前端的工作的话,那么这三大框架你至少要熟悉一个。
如果你是双非院校(非985、211)的话,那么我个人建议你学习 Vue,因为对于国内大部分的中小企业来说,Vue 的占有率是非常高的。
而如果你是 985、211 学校的话,那么 Vue 或者 React 均可。
对于 Angular ,因为在国内的占有率并不高,所以如果你是以找一份工作为主的话,那么我个人不建议你去专攻 Angular 。
它们中任何一个框架,整体的内容如果展开的话,那么都会非常的多。还是以 Vue 为例,周边知识大体可以分为三个大块:
当然除了这些之外,其他的周边库还有很多,比如 网络请求库:axios 等等,这些都是需要大家去进行掌握的。
对于移动端技术来说,目前主要有两个方向:
那么对于移动端技术来说,我们也是以这两个方向来去说。
微信小程序在 2017 年发布,在 2018 年大火,整个的发展速度是非常快的。这也从一方面验证了 每间隔16个月,学习前端的难度会增加一倍 的这句话。整个前端无时无刻不再有新的技术、新的概念被提出,所以我觉得,前端开发工程师应该是站在潮流最前端的一批人。
小程序最初以 原生 的方式进行开发,后来逐渐出现了一批基于小程序的框架,如果你是一个小程序开发为主的前端工程师,那么以下知识点,你是必须要掌握的:
跨平台技术的提出主要是为了解决 移动端设备碎片化 的问题,什么是 移动端设备碎片化 呢?给大家举个简单的例子:
目前移动端的设备,主要分成两块
1、Android
2、IOS
而对于任何一端来说,又分为 原生应用(APP) 和 网页应用 ,同时还多了一个 小程序(虽然小程序的设计之初也有为了解决 移动端设备碎片化 问题的原因) 。
如果我们为每一种应用方式都开发一个版本的话,那么我们就需要大约 4 个应用的维护。这样的一个成本是任何一家中小型企业都难以接受的。
所以大家一直期望,有一种方式可以开发一个应用,但同时运行在多个设备之中。
基于这种原因,才出现了所谓的跨平台技术。
跨平台技术的出现,旨在解决 一个项目无法同时作用于多种不同设备之上 的问题。所以在刚出现的时候市场上被接受和尝试的声音非常的多(毕竟这对于公司来说,代表省钱)。
不过,虽然这些技术号称可以达到原生应用同样的体验,但是因为不同设备之间的差异化,导致最终开发出来的成果总是无法满足线上项目的需求。
所以在目前跨平台的技术只是在小范围的进行使用。
整个跨平台技术方案中,目前主要流行的有以下 4 种:
对于服务端技术的话,有很多的前端工程师都不是特别的清楚。因为在很多前端工程师眼中 服务端的内容应该是属于后台的东西 ,如果你也有这种想法的话,那么 趁早丢弃 。
试想一个场景,身为一个软件开发工程师,假如有一天,你有了一个点子,想要通过技术来实现的时候。突然发现,你只会写前端的内容,对后台服务一无所知。你不得不求助于服务端工程师。这是不是一种悲剧。
所以说 服务端技术 可能在你的初期对你帮助不大,但是当你在技术领域越来越深入的时候,它是必不可少的内容。
目前针对于前端工程师的服务端技术有非常的多,如果你想要学习服务端技术的话,那么可以从以下四个方面来着手:
如果你想要在工作中获取到更好的评级,那么优化技术是必不可少的。
这里所说的优化技术主要 针对网页访问速度的优化 和 用户误操作规避的优化,这两点的内容应该比好理解。
优化技术这一块如果展开说就非常的大了, 因为它所涉及到的知识点会非常的多,并且根据不同的场景也会有很多定向优化的内容,所以这里我就简单的列举出来几个方向,仅供大家参考:
具体的内容,大家可以自行百度,这里就不详细说了。
这一块的内容,可能很多两三年左右开发经验的同学很少了解过。先简单的做一个定义。
什么叫做监控技术呢?
当我们的项目上线之后:
到底有多少人来访问?
项目出现过多少次catch?
用户在哪个页面停留的时间比较长?
等等…
获取这些数据的方式我们就称为:数据监控技术,这里简称 监控技术。
看到这里,可能有很多同学会说:“我要这些东西有什么用啊?”。
你如果只作为一个码农角色的话,那么确实没有用。但是如果你站在开发者的角度、或者 项目所有人 的角度来看的话,那么这些数据是非常重要的依据。基于这些数据来完成的 数据可视化平台 ,也是现在非常重要的一个方向。
说了这么多,那么如何实现数据监控呢? 实现数据监控的方式主要可以分成两种:
如果你对监控技术刚刚接触,或者处于项目前期的话,那么我个人推荐你使用 现成的第三方监控平台,这一类的平台有很多,简单列出三个:
为什么会这么推荐呢?很简单,两个字 简单 。因为简单,你可以快速上手。因为简单,你可以不用花大量的时间去进行测试、逻辑编写。因为对于监控技术,是一套非常复杂的技术体系。仅对于 埋点 这一块来说,就可以分为:
三个大的方面。
所以对于前期,我更推荐大家直接使用现有的第三方平台。当这些平台无法满足你的需求的时候,可以考虑自己实现。
如果你不是 leader 的话,那么工程化技术你接触的可能也会比较少。
什么是工程化呢?
比如说:
你的代码提交到 Git ,那么这个 Git 平台是怎么搭建的?
你的代码提交,如果不合规(死链或者代码格式不合规),如何避免被提交?
代码部署这种重复的工作如何自动化?
新版本上线如何最大程度的减轻 BUG 出现导致大面积崩溃的风险?
如果真的出现了大面的崩溃,如何快速的返回上一个稳定版本?
等等…
这些场景,我们都可以称之为是属于 前端工程化 的一部分
工程化代表的应该是一整套前端从开发到上线的全流程。目前的工程化以自动工程化为主。也就是说你的开发、测试、部署等等,全部都自动化。
这一整套的自动化工程,就可以称为是一套 工程化技术。
在很多的中小公司中,工程化的流程并不规范,存在非常多的问题。这点对大家来说,应该是一个好事情,如果你熟练地掌握了 工程化技术,那么你就会拥有更多的 技术资本 。
工程化技术方面,简单的给大家进行一下列举:
以上这些就是整个前端技术体系的内容,整体来看是非常大的一块内容点。那么这么多的技术点,我们应该从哪一块入手?从哪一块开始学习呢?
这就是我们接下来要说的内容,也就是 前端发展计划 的部分
对于前端发展计划这里,我不打算给大家进行分类。什么叫分类呢?
比如很多人会告诉你:
这种方式就叫做分类,根据你的工作年限,来告诉你你应该学习什么技术了。
我觉得如果按照这种方式来制定发展计划的话,那么是 不准确 的。因为,每个人根据所处环境的不同,那么成长的速度是不一样的,我们不能够简单的通过 工作时长 这样一个 定向 的标准来进行划分。
那么我们应该怎么做呢?
首先:发展计划应该和当 前的技术体系 是息息相关的。比如说: 2016 年的时候,我们只会 jQuery 可能就能找到一份工作,但是现在你至少要会 三大框架中的一种才可以。前端的技术无时无刻不在变化,那么我们的发展计划也会跟随技术体系来对应改变。
其次:发展计划的制定应该以你个人的 当前技术水平 和 下阶段目标 为标准。比如:你当前只会 jQuery , 然后你想要找到一份工作。那么你当前最应该学习的应该是三大框架中的一种,比如 Vue 。
以上的这两点和你的工作年限没有一点关系。
那么发展计划这里,我们怎么去讲呢?
我把整个前端的发展计划分成了 6 个阶段,我们先来看一下:
每个阶段后面,又会包含一些具体的知识点(参考顶部脑图)。
每个阶段代表你当前所处的区域,
这个就是我根据大家的 当前技术水平 和 下阶段目标 为标准,来制作的 发展计划,我觉得按照这种方式,应该是最具有逻辑性的。
那么下面我们就分别的来看一下这六个阶段详细的内容。
如果你当前还没有接触过前端,接下来打算学习前端知识点的话,那么你就应该从基础知识入手
基础知识阶段作为我们的第一站,面向的是没有前端开发经验的同学,如果你之前没有接触过前端开发,并且想要通过学习前端来找过一份工作的话,那么你就应该从基础知识来入手。
对于基础知识,你需要掌握的主要有两大部分:
从这两块开始学习,一直到可以熟练掌握,然后在进入下一个阶段。
那么达到什么样的标准,才能够称为基础知识过关了呢?
检验是否过关最好的标准应该是 项目 , 每一个阶段都应该有对应的项目,但是我们这里没有办法给大家去指定项目,大家可以根据自己的情况来去自己指定。
我这里简单的列出一些标准的知识点,如果说你想要验证 基础知识 是否过关,那么可以看一下,以下知识点,你是否可以掌握:
当然,我这里列出的只是很小的一部分。如果大家不知道如何验证的话,那么可以用作参考。
如果你当前已经完成了基础知识的学习,接下来打算找到一份前端开发的工作的话,那么你就应该开始工作知识的学习了
在文章的前面说过,如果想要找到一份前端开发者的工作的话,那么你至少需要掌握三大框架(Angular、React、Vue)中的一个。
咱们还是以 Vue 为例,Vue 本身包含了很多的知识点,并不仅仅只是一个 Vue.js 这么简单。在 技术体系 中我们也说到了,Vue 是一个生态,它有自己的 全家桶、周边库、UI 库、组件库 等等非常多的周边生态,具体要学习哪些内容,可以参考 技术体系 中说到的部分。
除了这三大框架之外,UI 库 也是必须要掌握的一门知识,UI 库的种类有很多,我们只需要掌握一到两个就可以,具体的选择可以参考我之前的博客 浅谈前端八大UI库 。
最后就是 小程序技术 和 跨平台技术 了,这两块的知识点是作为一个加分项存在的。
以上的内容你掌握的越全面,那么你在找工作的时候,可选择的范围也就越广。
所以说以上的内容 并不是都要全部掌握 之后,才可以开始找工作。有可能你只掌握了 小程序 开发、或者 Vue 你就找到了一份工作,这也是可能的。
掌握的越全面,可选择的范围就越广
如果你当前已经有了一份工作,接下来打算拥有更高的薪资的话,那么你就应该开始学习 进阶知识 和 底层知识了
进阶知识、底层知识 我放到了一起来说。因为我觉得他们两个对应的 下阶段目标 一致,并且是可以穿插着来进行学习的。
进阶知识 主要针对于 工作中的实战 多一些,也就是内容更加实在,在实际工作中会经常的用到。
底层知识 主要针对 面试 的内容多一些,里面涉及到的很多内容有类似于面试宝典的感觉。比如说 二叉树、链表 这些内容,在实际的工作中,其实帮助不大。
那么下面我们就分别针对这两块来说一下:
首先我们来看进阶知识。进阶知识主要针对工作中的实际应用场景。
以 ES6 为例,不会 ES6 会导致你无法完成工作吗? 不会! 但是你想要更好的完成工作,你不会 ES6 的语法,那么可以吗? 不可以!
这就是进阶知识在实际工作中的作用,一般情况下它不会导致你的工作无法完成,但是它可以帮助你更高质量的完成工作。
所以如果你想要在职场上,更近一步的话,那么就需要学习 进阶知识 了。
下面我列出来一部分进阶知识的内容:
底层知识 的内容更倾向于 面试 时的场景。因为他里面有很多的知识点在你平常的工作中是没有直接使用场景的。
比如 二叉树、红黑树 、链表 的概念,这些底层内容看起来好复杂,但是在实际工作中其实没啥用。
不过这些概念性的东西在 面试 中反而会经常的出现,特别是在一些 大厂 的面试中,也就是所谓的 面试造火箭,工作拧螺丝 的概念。
底层知识 的内容,不打算介绍太多,具体涉及到的常见内容 大家可以看上面的脑图,我这里就不进行列举了。
如果大家最近有考虑换工作,进行面试的场景的话,那么可以突击一下 底层知识。
然后我们来看 新兴知识。前端的技术发展是非常快的,这个在咱们前面的文章中,也体现过。那么快速的发展必然会带来很多新的概念、新的知识点。这一类的知识我统一称为新兴知识。
举个简单的列子,以小程序为例,在 2017 年的时候微信提出了小程序的概念,那么假设我们现在处于 2017 年,小程序就属于 新兴知识。而我们现在处于 2020 年,小程序就已经变成了 工作知识 了。
所以 新兴知识 它会随着时间来不断地发生变化。 同时大家也要知道对于新兴知识,并不是都会像小程序一样变成 工作知识。有些新兴的概念,并不会那么适应大众,逐渐的变为小众化的技术,比如 React Native 。
同样的道理对于其他的知识也一样,jQuery 当年是必备的工作知识,现在也不过是为了维护老系统而被迫使用的知识点而已。
所以对于前端的学习,大家必须要能够保证时刻的进步状态,千万不能 想着 一劳永逸。
目前比较流行的新概念主要有三个:
这三个知识点,大家可以进行一下了解,然后根据自己的实际情况进行 选择性 的重点学习。
未来展望 主要建立在 新兴知识 的基础之上。因为只有 新兴知识才能改变未来 。以后的开发模式,谁也说不准,我这里结合我自己的理解,说一下我个人认为未来的前端路会怎么走。
对于前端未来的开发模式,每个人都会有自己不同的看法,以上两点仅是我个人看法,不代表任何组织和机构,也欢迎大家在留言区留言探讨。
以上就是整个 前端工程师发展计划 的内容,大家可以根据自己所处的阶段,来参照对应的计划。
最后在强调一句,技术的能力与工作的时间并不是正比的关系。在很多情况下 工作会让你更加熟练,但不会让你真正成长!
说了那么多了,到现在已经有了 8000 多字了。如果大家能够一点一点的看到现在,那么我真的要为大家竖起大拇指了!
那么最后让我们回到最初的问题上:
这两类的问题我们应该如何进行解决呢?
因为每个人的所处场景不同,所以我不能直接用一个统一的答案来告诉大家怎么办。我在这里总结了我个人这么多年以来的一些感悟,总结之后整理了 4 条,或许可能对大家有所帮助: