前端近几年发展的如火如荼,框架和各种解决方案层出不穷,欣欣向荣。
框架的关注者,在前端中越来越多。框架所占的比重也越来越重。
这很像JAVA的现状,Spring的关注度远远多于Java本身。
在我看来,前端其实在默默的趟一遍后端的路。
函数式编程,MVC,DI,面向对象,APO,微服务等以前在后端生根发芽的概念和设计思想,逐渐迁移到前端来。
前端走向哪里
我觉得跟前端未来会跟JAVA一样,走向统一解决方案。
什么是统一解决方案?
服务器面临的问题,高并发,海量数据,RPC,SOA等,都已经有成熟的解决方案。比如Spring框架基本上是所有java服务器开发的选择。
在国内市场上,JAVA的生态也远远好于其他后端开发语言。虽然我们看语言排行榜上,后端语言JAVA并不是第一,但是在国内市场。从招聘的情况看,JAVA还是当之无愧的第一。
Go,Rust,.Net虽然也有一席之地,在细分领域上也有很不错的表现,但是整体上还是难以撼动Java。
为什么会这样?
我认为有几个原因。
第一是,先发优势。
Java不是最快的语言,也不是写起来最舒服的语言,甚至某种程度上有点臃肿。但是java普及的时间及早。这导致一个问题,公司的技术负责人,可能都是java出身。复杂问题的解决方案,可能也是Java的。这也是.net在国内远不如java的一个原因。.Net为各种开发提供了一揽子的解决方案,网页,客户端,移动端,服务器都有。但是.net core推出的时间很晚,服务器领域早被Java抢占了。
第二是,完善的生态。
欣欣向荣的开源社区,使得Java在各种场景下都有一个相对成熟的解决方案。并且这些方案逐渐的收敛,成为最佳实践。在这种情况下,使用JAVA生产效率是最高的,试错成本是最低的。
写代码写久了,其实很容易发现。决定一项技术生命力的,不是这项技术有多先进,而是这项技术有多节省时间和成本。我称之为工程成本。
以Java类比,我们梳理一下前端的发展历史。
前端发展普遍认为有两个关键节点,但是无论前端怎么发展,其本质没有改变,就是对DOM的处理。
先看这两个节点
第一是Ajax的出现。
Ajax的出现,大大的释放了JS的能力。
前端从此不再是切图仔。
SPA开始走入前端。
现在前端的三大框架都是在这个基础上生根发芽的。
第二是Node的出现。
node剥离了JS的宿主环境,使得JS能够不再局限于浏览器。在我看来,node对前端最大的影响,不是让JS染指后端,而是为前端带来了工程化基础支持和npm包。
其实我觉得还有第三点,就是前端标准逐渐的统一。 曾经的前端,浏览器百团大战,处理兼容性是前端最重要的工作。 如今,随着浏览器的市场份额逐渐收拢到chromium内核上。这种事情已经不再让前端开发头疼了。
前端的两次重大变革,给前端带来了今天的繁荣。前端开始承担更多的工作。
对于程序来讲,一切程序的本质都是算法与数据结构。
曾经的前端,几乎是不涉及这些的,因为确实用不上。
而如今,算法和数据结构已经在前端中开始扮演重要角色。这也是为何前端开发开始大呼‘太卷’了的原因。
但是这种卷,长期来看是有利于前端的大环境的。
从发展看,前端逐渐在告别百花齐放的年代。统一的框架和解决方案逐渐在形成了。
但是,与服务端相比。前端还是有很多不可控性,比如跨端,跨浏览器。
服务器的代码可以很稳定的运行在linux的服务器上,但是前端不会。如果跨端的问题,被行业大佬们解决,前端再来一次春天也未尝不能。
前端能做什么
当一切设施完善的时候,前端能做什么事情呢?这是很尴尬的问题。
前端最主要的战场还是浏览器或者Electron。我们可以看到,移动端的崛起基本上带走了前端ToC的一切业务。新晋的互联网新贵,在PC端甚至只有一个官网介绍,挂一个二维码。
前端的业务战场,也基本上只剩下做ToB业务,以及博客之类需要长文本输入输出的一些ToC业务。
梳理一下,我们发现前端能做的事情是很少的。
相对于服务器端的复杂性,前端面临的问题要少的多。基本上业务逻辑和数据都是放在后端的。
前端说到底还是负责锦上添花,不是雪中送炭。
以目前市场来看,前端主要分在几个方向上。
-
中后台管理
-
可视化方向
-
云文档方向
-
工程化
至于以node来做服务器,我个人认为是一个自欺欺人的说法。除了小项目试点,或者做中间层BBF,没有谁会选择用node来做服务器的,node更适合的还是做一些util之类的事情,类似python。
我认为两个方向上比较有意思,也比较有难度。难度带来的就是,壁垒高一点。
第一是可视化方向。通过canvas,webgl做2d,3d渲染,比如酷家乐这样的产品。随着工业软件上云,渲染、视频在未来应该还是很有市场。
第二是云文档方向。云文档是今年才兴起的一个方向,之前一直不温不火。但是随着疫情,飞书和钉钉文档开始发力,其他有关没关的厂商都开始跟上,据说连同程都在做了。
工程化取决于项目的复杂度,但是基本上现在被webpack包办的。能做的事情只剩下同构和微应用了。
说到底,前端的作用更依赖与一个好的产品。
中后台管理相对来说技术含量和难度都相对低一点,现在git上有很多admin之类的开源代码。基本上改一改就能用,拿去给中小企业做管理,是非常简单的。我之前看到有人一天改出来3套系统,令人咋舌。
在一个重量级的产品中,前端发挥的价值会大一点。否则,话语权就很低。如果你是一个前端人员,在面试时不妨了解了解自己要做一个什么样的产品。
前面说前端的战场主要收缩在ToB业务上,这其实也是好事情,因为ToB的业务相对复杂,前端的话语权就相对高一点。比如我们公司,前端的产品继承在一条线上,基础架构组就很有技术含量,也很有话语权。
前端当前的热点
TS
多数前端同学对TS的理解是类型检查,这确实是很重要的一方面。
但是TS的精髓实际上应该是接口和类。
TS现在遍地开花,是因为它降低了工程成本。工程成本是一个非常重要的东西,我们在选择技术方案的时候,工程成本是一定会被考虑进去的。
可见的未来,TS一定会更加普及,借着TS可能还会重新掀起一阵设计模式的浪潮。
低代码开发
这应该是近期的一个热点。
低代码这个东西,可谓由来以及,从有GUI之后,就有人在琢磨怎么做类似的工具。最成功的当然莫过于QT,WPF。顺嘴说一下,MVVM的设计模式最早就是WPF带来的。
我对前端低代码的理解是一个辅助工具,可以把它当作一个针对用户的产品,而非针对开发人员的工具。
因为不像QT,WPF他们是稳定的运行在Linux或者Windows系统中。前端是运行在浏览器中的,这有很高的不可控因素。要去固化它们,还是依赖于前端标准的统一化。
serverless
这也是今年很热的一个方向。
只是在我看来,serverless对前端的影响不是很大。我将其理解为一种新形式的BFF中间层。
如果你们当前已经有用node在做BFF了,那可能有点影响。否则,影响就不是很大。
而相反的,serverless的远程调试很成问题。大部分程序员的主要工作不是写代码,而是Debugger。调试能力将大大影响开发效率和上线质量。在这个问题没有解决之前,serverless只能做观望。
前端的奋进
作为程序狗,保持不断的学习是必然的,尤其是前端这种变化很快的领域。
了解前端的能力和局限性之后,我想前端的同学,补一补数据结构和算法,总是不会错的。
如果精力允许,可以学习一门静态语言。Go和Rust因为历史包袱比较少,可以尝试一下。深度理解一下面向对象编程。
我是做Linux 开发转做的前端,Linux内核和C语言的基础,让我在转前端时收益匪浅。比如React 的fiber,一看之下就有点像线程调度的时间片概念。比如VUE对无法直接监听数组和对象的变化,是因为指针并没有改变。如果有可能,我觉得前端同学学习一下JS引擎的知识也是极好的。
最后,做个总结吧。
-
短期看的前端趋势的话:
-
框架的关注度会更高
-
数据结构和算法发挥的会更多
-
在新的交互场景出现之前,前端可能会陷入瓶颈期