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