若干年前,一位程序员做过一个预测:
Any application that can be written in JavaScript, will eventually be written in JavaScript. (任何可以用 JavaScript 来写的应用,最终都将用 JavaScript 来写)
某种程度上来说,它可能是一个事实,JavaScript已经参与到应用级技术方向的各个方面,在后端,移动端,桌面端都存在它的身影。甚至连mongo shell都是支持JS语言的。
但坦率的说,这些也并非一帆风顺的事情。
本周,将进入前端之变的最终章,谈论我对前端技术发展的一些个人的思考与分析。本周为前端之变的最终篇,前七篇分别是:
- 前端之变(一):技术的变与不变
- 前端之变(二): "不变"的前端
- 前端之变(三):变革与突破
- 前端之变(四):进击的前端
- 前端之变(五):王者归来
- 前端之变(六):引领式变革,从命令式UI到声明式UI
- 前端之变(七):前端的困境
在本篇中,我将试图就以下问题做出回答:
- 前端技术是否能成为后端的主流?
- 前端技术是否能成为移动端的主流?
- 前端技术是否能成为桌面端的主流?
- 前端技术未来独特的优势是什么?
声明
所有观点仅为个人观点,我希望观点能引发你的思考,而不是引发对立的情绪或无意义的争吵。
如果你看了我的观点,认为它不对,然后自己能思考自己认为正确的观点是如何,这就表示我这篇文章是非常有价值的。
前端技术在后端
NodeJS的火爆与好评,我在若干年前就有所感受,那时候我还只是个用Java做后端的架构师。
一个最简单的问题是:NodeJS是否能取代Java成为后端的主流或另一种可选项?
我的意见是:
前端技术几乎没有可能在后端成为主流
那个不讨人喜爱的Java,从未被撼动
Java这门语言很多人不喜欢,特别是很多优秀的程序员觉得它很一般,这是事实。
所以,其实不只是NodeJS,这些年来,在后端,试图挑战Java的多了去,类似动态JVM的语言Scala,Groovy试图取代Java,它们都提供了Java不具备的很多语言特性,比如Scala,函数式的风格极受好评,优秀的程序员特别喜欢这样的语言。还有类似Google的GO语言,对Java也造成了一定的挑战。
但很可惜,包括NodeJS在内的上述这些,皆没有成功取代Java成为主流。
其实这些语言各有特性与优点,可能Java与它们相比,确实很不出彩,但包括NodeJS在内的众多语言,始终有两个特性无法与Java语言相抗衡的。
- Java简单易学,这使得基于Java语言构建一个团队的成本较低,这是一个很重要的优势。现在几乎所有项目,都是团队活动,国内的互联网基本还处于依靠堆人的阶段,选择Java是最符合现状的。
- Java的生态过于强大。虽然包括NodeJS,Scala类似的语言有很多独特的做点,但在生态上完全无法与Java抗衡,现在不是二三十年前,随便一个项目或产品都涉及到一大堆特性,存储,分布式,缓存,定时任务,集群等,Java在这些方面几乎有着其它语言难以匹敌的生态。
再回过头来,说下NodeJS本身的缺陷:
- JavaScript不是一个面向对象的语言,做为NodeJS的语言,它在复杂业务前面几乎没有优势可言,也就是在应付复杂的业务及项目上,远不及Java。而后端就是复杂的所在地,后端就是用来处理复杂业务的。
- 它的异步事件循环机制确实是个极大的优势,但这也不是非常出彩的点,其实以Java为主的后端生态也有类似的解决方案,比如Spring WebFlux,还有我用的vert.x等,同样是异步机制,其性能还优于NodeJS。但这些本身也没成为主流,因为连它们都无法与Java的同步线程阻塞的生态抗衡。在考虑生态等各方面因素下,大多数团队还是会选择Java传统模式。
因此,我认为一个显而易见的结论就是:
JavaScript语言下的NodeJS在后端无法成为主流,但它会成为另一个小众的选择方案
前端技术在移动端
移动端的技术呈现五花八门的发展趋势,我曾经专门写过一篇解读文章,有兴趣的可以阅读下:
企业移动化信息建设的一些思考(二)移动开发技术发展
但总体说来,前端技术在移动端的趋势是:
以前端技术为核心的开发方式在移动端越来越成为主流方式
前端技术参与到移动端的方式主要有以下几种:
- 网页的方式
- App开发,以React Native为主
- HyBrid的模式,以Cordova为代表
- 小程序,依赖于微信,支付宝等的生态
事实上,上述几个方向的开发,越来越被前端技术占据。在它们的冲击下,原生移动开发将越来越少。
虽然,React Native有式微之势,它在对抗原生开发前并未取得优势,而且还面临类似Flutter的挑战。但如果我们把目光放到整个前端就会发现,App开发本身就存在式微的趋势,而以H5,小程序在慢慢成为业务在前端的主要实现方式。
这是因为:开发与推广一个原生App的成本越来越高,越来越难。
原生App总体呈现数量下降的趋势,并且可能未来会更明显。
从中国互联网络发展状况统计报告2020报告上可以知道,国内App数量在2018年达到顶峰,随后越发呈现下降的趋势,明显受到小程序等的生态的影响。
所以,移动端的开发人员,面临非常严峻的形势。虽然它不可能会消亡,但后面原生越来越会往平台或H5的承载体方向发展,这是一个已经存在的趋势。
前端技术在桌面端
以NW.js和Electron为代表的前端技术的出现,意味着前端技术现在也出现在的桌面端中了。
它会成为桌面开发的主流吗?
它不会成为桌面开发的主流,但它意味着一个极具性价比的可选方案出现,会越来越多的出现使用这种方案的桌面应用
PCX
我在2020年开发的PCX,几乎支持所有操作系统,甚至是国产ARM Linux系统等。
以NW.js和Electron前端技术为代表的桌面解决方案,是个非常具有性价比的方案,它具有一些独特的优势:
- 它开发出来的东西是跨平台的,意味着开发一次,支持Window,Linux以及Mac系统
- 它减少了开发桌面端对开发人员的要求,与寻找原生Win或Mac程序员相比,前端人员显然更好找。
当然,它在软件体积,对内存占用,还有以Web为主的UI毕竟不适合一些专业的场景,比如游戏等,再加上在操作系统上,Windows才是主流,Mac与Linux始终是少数,跨平台的考虑并不是刚需。意味着它不太可能成为主流。
类似的东西其实越来越多,只是大多数人没有感知而已,国内我就随便说几个:
- 阿里云盘是基于Electron的解决方案
- 飞书使用了Electron技术
阿里云盘几乎是完全使用的Electron
阿里云盘
飞书中也有Electron的存在
飞书
前端独特的优势
好吧,接下来说我对前端未来最有可能发展的一个趋势,就是前端技术具备其它技术所不具备的几个特性,这决定它在某些方面将具有独特的优势,是其它技术不可比拟的。
前端是直面用户的第一媒介
与后端不同,前端的东西基本是直面用户的,比如网页,小程序或桌面应用等,用户使用这些东西时,基本就是使用前端技术编码出来的东西。
而后端则更多的是支撑,不管后端的技术或框架多么优秀或性能多么好,用户并不直接使用它们,也基本感知不到,它是背后起到支撑的作用。
前端程序员最接近全栈程序员
想像下吧,我们抛开团队来说,哪一端的程序员最有可能独立做出一个完整的产品?
当然是前端程序员了,他们可以使用NodeJS编写后端服务,再编写H5网页,或使用小程序,React Native编写一个移动端的产物。
想下这种场景,是不是只有前端程序员最具这种可能性?
这会产生一个什么样的后果 ?
拥有这两个优势的前端,就会形成其它技术形容不了的两个重要趋势:
前端技术的产物更具有直接使用价值,而非支撑的东西
事实上,这不是趋势,已经成为一个事实了。
很多程序员,包括后端程序员,使用的一些有名的产品,都是前端技术的杰作。但可能大家都没意识到:
比如:
- 最有名的博客系统hexo,是前端技术
- GitBook,允许你快速的编写一本电子书
- docusaurus,Facebook出的一个让程序员快速生成自己产品网站的开源产品。我的 https://myddd.org 就是基于它而构建的。使用它,基本你不用关心网站如何设计与构建。
- Gatsby是一个基于React ,用于搭建静态站点的开源框架。我的 https://taoofcode.cc 就是基于它而构建的。
可以预料的是,在前端技术的支撑下,类似的杰出的东西只会越来越多,也就是前端会产生越来越多具有直接使用的价值品,而不是和后端一样,更多的是一些支撑框架。
前端技术将是个人英雄辈出的最可能方向
如我上面所述,如果不依赖团队,当一个程序员有了一个idea,想独立去实现这个想法,构建一个产品。那谁最有可能独立做到这个事情?
当然是前端程序员了,他们有能力使用自己的技术几乎去构建每一个方向的产品,无论是后端服务,还是网页,或移动端App,他们几乎都能依靠自己的技术实现,而不是去组建一个团队。
想像下,当后端程序员为如何构建网页与移动App而发愁时,移动端程序员为如何构建一个后端服务与网页而无从下手时,只有前端程序员是不用为这些事发愁的,对吧。
因此,他们将大有可为。
我与前端
2015年,我从一个后端架构师,因为一些机缘巧合的原因去从事Android与iOS开发后。2020年,我在技术上再次发生转变,在几乎对前端还停留在JQuery那个理解的前提下,独立主导与开发了PCX这样一个基于Electron跨平台桌面应用,它再一次冲击了我的技术之路,使得我彻底转变为一个全栈程序员。
同样,前端技术的转变也令我惊奇,于是我开始构思与准备写下我对前端技术变化的一些思考与分析。这便是前端之变这个系列的来源。
我明白了一个道理:
新的技术是永恒不断更新变化的。但本质上,它并没有太多改变,只是形式变化了。
这些年,从Java,再历经Object-C,TypeScript,再到Kotlin,Swift这些语言,它使我仿佛进入了一个新的世界。
我希望对所有程序员做出这样一个建议:
永远不要只使用一种编码语言,永远不要把自己局限在某个语言或方向上,不要定位自己是只能从事某一个方向开发的人。你可以专注与精通某一个方向,但你永远要去尝试做那些你觉得你不会的方向
这会让你对技术的理解有彻底的转变,开始理解与明白技术真正是什么。
这也是我在2021年开始做微言码道的原因所在,如同它的口号一样:用我们微小的力量传播编码之道。
那究竟什么才是编码之道,我又是如何理解它的呢?
下一个系列:编码之道将开始连载,我仍然会以每周一篇的频率,阐述微言码道的核心宗旨的要义。
敬请期待。