站在2019看前端

Posted by Rimin on 2019-03-03

虽然接触前端不到两年的时间,但是在这不到两年的时间,感受到前端发生了很大的变化,印象中,在 2017 年 大前端这个词才刚刚“衍生孵化”,而经过短短不到两年的发展,大前端真正迎来它的繁盛时刻,Node将触角伸向后端,npm带来各种可用的完备而成熟的库, 小程序,PWA, React Native又将触角伸向移动端,甚至像 Electron又把触角伸向pc桌面应用。前端逐渐变成“大前端”,也就是变成了全栈。实际上,由于前端相比于其他技术岗位,确实比较新,发展的速度十分快,触角也越伸越广。

可以先回顾一下前端前期的发展史:

1. 拓荒 1990 - 1994

  • 1990年 Tim Berers-Lee 在NeXT上发明了第一个浏览器

  • 1993年 CGI 出现,人们可以在后端动态生成页面

  • 1994年 网景公司推出第一款商业浏览器navigator。 微软推出IE。 同年,PHP诞生,PHP将动态内容嵌入HTML中, 其性能比一般的CGI高。深刻的影响了后来的ASP,JSP。 乃至后来的JavaScript前端模板引擎。同年,W3C小组成立。

  • 1995年 JavaScript诞生,传说JavaScript是在很短的时间内设计出来的,因此存在很多瑕疵。因此一直被嫌弃。
    JavaScript 主要的语言特征:

     1)借鉴C语言的基本语法
     2)借鉴Java 语言的数据类型和内存管理;
     3)借鉴Scheme 语言,将函数提升到“第一公民”的地位。
     4)借鉴Self语言, 使用基于原型的继承机制
    

但是当时的JS还非常“空洞”,没有包管理机制,没有辅助SDK,内置方法屈指可数。因此,后面的主要任务就是完善和提高性能。

2. 浏览器之争 1995年 - 2005年

主要有以下这三个浏览器地位争夺

  • IE vs 网景
  • IE vs 火狐浏览器
  • IE vs 谷歌浏览器

第一次我们知道是 微软胜了,并且微软由于没有按照当时已有的ECMA-262 的规范来实现,也就使得前端兼容问题的诞生。

3. Prototype时期 2005年 - 2009年

prototype 是一个Sam Stephenson 写的一个非常优雅的javascript 基础类库,他是Ruby的大牛,因此prototype 的许多方法名都是来自Ruby界。
同时Prototype还解决了动画特效和Ajax请求。

4. jQuery时期 2009年 - 2012年

jQuery打破了前端开发者的编程思维,之前是按后端的开发思路来的,做一个业务就封装一个类,有了这一个类,再想办法传入dom。而jQuery是以dom为中心,开发者可以选一个或多个dom, 变成jQuery对象。进行链式调用。其次,开发者已经开始注意前后端分离。

5. 后jQuery时期 2012年 - 2016年

这一时期以RequireJs诞生为起点,以RN的出现结束。
虽然jQuery的出现让前端开发更加轻松,但是出现了以下几个问题:

    1) 一个页面通常会引入十多个乃至几十个script标签。阻塞页面渲染。导致白屏。

    2) 全局污染,于是衍生了各种模式规范;AMD,CMD。

同时段,NodeJS, Angular, 各种构建工具都出现了。前端开发者也开始出现了分化,有些人转向了后端,有些人开始专门搞工程化。

6. 三大框架割据时代及移动时代 2016年 - 至今

这期间: React, Angular, Vue 从PC到移动端 RN, inoc, weex, 而像前后端同构,TypeScript 也出现了,前端被越玩越“溜”,越来越自动化,越来越“高大上”。同时,可以发现,像小程序, Flutter等的出现,也预示着移动时代的到来,而PC的作用被渐渐局限在 一些To B应用以及可视化系统中。同时,今年 serveless这种开发模式衍生,前端的开发模式也在发生着一些变革,而开发模式的变革又意味着代码的重写,重构。

所以,到现在,前端的方向到底在哪里? 首先是我意识到的几个问题:

  1. 触角越伸越广,很容易让前端开发者出现泛而不精的情况,这也是事物发展太快而使得人心浮躁的现象。再者,我认为可能会出现分久比合合就必分的趋势,前端开发会渐渐出现分化,最后还是回到原本的后端,移动端,前端分工的局面,而且其实大公司会更希望招专才。
  2. 前端原本的职责在于 呈现,交互。当然,现在各种各样的框架,“高科技”,实际上已经让前端的开发和性能比几年前都提高了很多,而且工程化生产也比之前,例如jquery时代成熟很多。并且有时候会发现,前端再怎么去优化,都没有服务端的优化来得有效。所以,现在的前端开发面临的问题在于,价值在哪里?普通的前端开发者害怕自己的技术变得局限,所以不断地将自己的价值拓展到其他端。是否脱离了原本的职责定位?
  3. 普通需求重复而没有提升点。这其实也是很多开发者面临的问题,上手一个框架其实很容易,而深入其底层可能也是时间问题,但是需求往往是多而重复的,很有可能会出现需求越写越多,BUG越写越多,于是一直在写BUG, 当然技术的迭代也很快,很容易陷入一个问题在于:一直在学习一直在担心被淘汰,一直在写需求,BUG也越写越多,也一直在重复造轮子,“搬砖”。(当然,好处在于可以从中获得一些框架设计思想,解决问题的能力,以及对一门语言的精通程度,毕竟我发现很多面试题很容易看了又忘,而且理解不够深入,但是假如有遇到过实践过的话,就能记得很牢固。而这也是目前我认为的区分一个初级还是高级的开发者的点。当然这和从事时间无关,而和是否会总结,归纳,刻意训练有关。)

而今年在一些文章看对前端的展望,我发现稍稍有些不一样。

例如这篇文章中的解读:
10 余年前端老兵亲述:前端的未来在哪里?| 技术头条

前端为应用而生,人机交互技术是我们的生存之本,以应用为桥连接用户和数字世界是我们的使命。但长期以来前端的生存空间被压缩在 Web 领域,Digital Twin 这种新形态无疑将为我们打开一片新天地。Gartner 这份报告中还有两项技术和前端紧密相关:
Immersive Technologies(沉浸式技术):Augmented Reality(AR)、Virtual Reality(VR)、Mixed Reality(MR) 等, Smart Spaces:智慧城市、智能汽车、智能商店等。看到未来有三项战略性技术居然和前端有关,着实让人兴奋不已。不过莫急,既然是战略,也就意味着三五年内未必能开花结果。

在当下可实践的新技术中,前端相关的有:AI、Serverless/FaaS、Blockchain、IoT、AR/VR/MR、智能硬件、可视化应用开发。 这些新技术的关键路径和核心技术多数都不在前端,但我们能以使用者的身份参与进去,结合业务特点进行实践,让现有研发工作做得更好,让应用的交互体验更好。

在知乎,也出现了诸如这样的文章:
了解前端 +机器学习精读《30行js代码创建神经网络》前端与人工智能

可以看到,实际上,前端仍在不断地开拓领域,例如AI,寻找自身的价值所在,这是好事,同时难度也在不断地增加,需要学习的内容也在不断增加。

所以,这时候个人在这样的大平台下, 选择也变得越来越多,但是如何选择适合自己的一条道路,能否让自己得到更好的成长,在这个行业发挥个人的价值,就要回归到个人本身了。