“别更新了,学不动了”、“前端十八个月难度翻一番”、“Deno、TypeScript 等新轮子层出不穷,我到底该不该学”,这是前端工程师平时在工作场景中,最常提到的玩梗。
是的,前端圈子变化确实挺快,React 还没学明白,Vue 就来了。Vue 2.0 还没搞清楚,3.0 就发布了。作为一名本来工作就很忙的前端工程师,你自然需要思考,到底我还需要投入多少时间去追那些新的技术?如果追,到底该怎么追?
对于这些问题,近期加入字节跳动的前 360 高级技术总监、奇舞团团长吴亮,也就是我们熟知的月影,之前曾经聊过自己的想法,他说,如果一个行业的新东西层出不穷,说明这个行业一直在高速发展,这本身对于从业者来说是一个非常好的事情,因为这说明这个行业中有更多的机会和成长空间。
至于怎么学,以及技术焦虑的问题,他也有自己的见解。他认为,如果你不盲目地去追求所谓的“时髦”技术,不去刻意担心自己是否落伍,而是去多观察这个行业,找到技术发展内在的规律和脉络,那么你就知道该如何前进,不会有任何恐慌。
12 月 6 日,在极客时间组织的主题为“前端人,咱别盲目追求新技术”的开放日活动上,知名技术专家月影分享了自己的观点。以下内容根据其演讲速记整理而成。
技术更新带来发展红利
首先我们得承认一点,前端行业发展得很快,各种新的技术不断出现。有人说今天学了一个 Gulp,明天又学一个 Grunt,后天再学一个 webpack,感觉好像永远也学不完这些东西。
为什么新技术层出不穷呢?
是因为现在的需求、使用场景和我们 5~10 年前是不一样的。用户对我们有更高的要求,并且应用场景和系统更加复杂了,所以我们才会用这些更加强大的工具,去解决那些遗留下来的问题。
比如,过去我们基本不会去想项目复杂化、代码工程化这样的问题,但现在这样的诉求却越来越多了,所以我们的技术是需要不断更新迭代的。只有这样,我们才能跟得上行业的发展。
当你在一个技术飞速更新的行业里面,你不要觉得害怕,你不要觉得自己很有压力,反过来,你应该要庆幸自己选择了一个快速发展的行业。因为这个行业在快速发展的时候,它是有红利的,你我作为从业者,就能从中受益。
因此,你要想一下,如果这些技术不断更新的话,你手里面的工具会变得更好,你会有更好用的东西,而不是说这些技术更新了,我还得去学,学不动了怎么办,千万别有这样的想法。我们应该更聪明地去看待这个问题,我们要仔细想想应该去学什么,以及投入时间到哪些方面。
我们要去学习前端基础知识
在前端行业里面,我们应该从整体来看待我们要去学习的东西,我们要去思考一下在前端这个行业里面,它的知识是怎么分类的。
就前端工程师来说,本质上还是软件工程师,所以我们其实还是在做软件开发的事情。在软件开发领域,其实有很多的基础知识,比如说数据结构与算法、数学基础。我写的极客时间专栏《跟月影学可视化》,里边其实有很多的篇幅在讲解基础的数学知识,那为什么要讲解这些基础知识呢?是因为我们在做可视化图形渲染的时候,没有数学理论你就很难理解渲染模型。
除了数学知识,还有很多计算机科学领域的理论基础,也是我们需要花一些时间去学习的。
这些知识往往是比较成熟的,相对来说不会有太大的变化。因此,我们还是需要花费一些功夫,好好地学习基础知识,把这些基础给打牢。
我们要去学习前端领域知识
除了基础知识之外,还有一类知识叫领域知识,领域知识里面又分成两类,一类叫做通用领域知识,另外一类是专用领域知识。
通用领域知识:定时更新,定时学习
在前端里面什么叫通用领域知识?举个例子,在我们做图形学的时候,你学了数学知识以后,你要知道图形系统,Canvas API、WebGL,像这样一些知识它就属于通用领域知识。再比如说像前端领域里面,HTML、CSS、JavaScript 这些也属于通用领域知识。
这些知识实际上它会更新换代,不断升级。比如像 JavaScript,TC39(JavaScript 发展委员会)每年会发布一个新的 ECMAScript 标准,它也会升级,但是它的升级其实没有这么快。
你要真的去了解 JavaScript 特性的话,你每年可以等它发布的时候,花一点点时间去了解一下它的新特性就 OK 了,它不会突然有一个很大的改变,然后让你完全跟不上。所以像这样一些通用领域知识,我们还是需要去学习的,并且你学过的这些内容,是不会突然有一天要全部给废弃掉,然后再去学其他新的内容的。
专用领域知识:用到的时候再去学
还有一类知识是专用领域知识,比如说我们要去解决工程化,但不是所有的项目都需要工程化,而且不同的项目规模,不同类型的项目,工程化的方式是不一样的,我们可以在工程化当中引入各种步骤,去使用一些工具。
例如可以引入 Babel(开源的 JavaScript 编译器)的编译,我们可以去引入打包工具,然后我们可以去做一些自动的 CI/CD(持续集成和持续交付或持续部署的组合实践),可以去引入单元测试框架,这些都属于我们专用领域的知识。
在专用领域,我们解决的问题是明确的,我们可以在这个基础上开发各种各样更好的工具。但这些工具并不需要每个都掌握,有的时候我们要专注于领域本身。
比如说我们做响应式的一些设计,需要用 React、Angular,或者 Vue 这样的框架。那有些同学搞不清楚,他总觉得说要把这些框架都给学会,实际上他更应该去理解 MVVM(Model-View-ViewModel)的原理,理解这些框架为什么要这样设计,理解 React 为什么现在要用 Hooks 的方式?这些方式有什么优点,解决了什么问题?
你去研究这些问题,可能比你死记硬背接口里的 API,比你硬生生学 Vue、React 怎么使用更加重要。注意,我并不是说像这样的一些专用领域知识我们不应该花时间学它,而是说你如果真的用到了的时候,我们再去学也来得及。
我们要形成系统性的知识体系
前面讲到了这些知识该如何学习,我们再讲一些更通用的。现在互联网很发达,我们可以通过各种渠道获取信息,我发现很多同学去面试之前都喜欢去各个技术论坛和社区刷一些面试题。这些同学可能平时也会去关注各种各样的博客,或者各种各样的公众号,去看一些相对来说比较散的或者比较冷门的问题,然后发现这里有一些 CSS 的知识点,自己可能不了解,又发现那里 JavaScript 的知识点、题目,可能是我不会的,然后自己就会很恐慌。
其实我们不应该去收集这些碎片化的知识,当你发现有很多关于 JavaScript 的深入一点的题目你不会,这就说明你的 JavaScript 基础不是很好,这种情况下,你应该系统地复习一下 JavaScript。比如找本书看,提升一下你这块的能力。
这种情况下的话,如果你在工作或者准备求职的过程中,你发现自己有基础知识方面的不足,像 JavaScript、CSS 这种领域的基础知识,我们还是应该去系统性地学习一下。
总结
最后,我们总结一下,在高速发展的前端行业,我们不应为不断更新的技术感到焦虑不安,而抱怨学不动了。我们更应该持续地、有技巧地学习。我也提到了几点学习建议:
学习一些基础知识,例如数据结构与算法、基础数学等知识。
学习通用领域知识,它们更新升级较慢,我们只需定时学习即可,例如 JavaScript 语言的新特性。
学习专用领域知识,这类知识可以在实际应用到时我们再去学习,例如 Babel 编译工具等等。
学习要系统,不要东学一堆,西学一堆,要把自己的知识体系建立起来。
总的来说,前端是一个发展非常快的行业,我也很幸运地一直在这个行业里面,未来的话我们一定会走得更远,并且我们也要一起努力让这个行业变得更好。
我们不用去害怕,也不用去恐慌,觉得自己学不过来,而要更加信心满满地去看待这个行业,然后去参与到这个行业的建设中去。
月影邀你加入字节跳动
目前,字节跳动各部门正在火热招聘前端开发工程师。
字节跳动鼓励坦诚清晰表达的工程师文化,欢迎内驱、始终创业的优秀技术人才。
扫描二维码,即可投递简历,诚邀你加入👇
学习推荐
如月影所说,很多同学都觉得应该要把所有框架学会,但其实更重要的是理解这些框架为什么要这样设计。
现在有一门课程,帮你掌握 Vue 框架的原理和实现方式,带你亲自动手实现一个 ToyVue
框架,推荐你来学习一下。
主讲老师是前手机淘宝前端负责人 winter,学完后你可以获得:
了解一个 ToyVue 框架搭建的全过程
掌握 Vue 框架背后的原理及实现方式
掌握 Vue 中的组件化思想
亲自实现一个 ToyVue 框架
扫码下方二维码回复【vue】即可免费领取👇
评论