从本周开始,我将就前端技术之变做的一些思考记录下来。

这是第一篇: 技术的变与不变

变与不变

首先,做为一个技术人员,你要明白一个道理:

> 对技术而言:唯一不变的事情就是变化

所以,想要成为一个优秀的程序员,你不能期望只精通一门语言或几种框架类库,就能成为你永恒的资本,让你在技术的世界无往而不胜。

这是不可能存在的事情。

这也是为什么很多技术人员搞了一些年就准备退出的原因所在,可能随着年龄的增长,他们认为自己已经无法再跟得上这种变化了,受困于自己的思维或能力,他们期望能从这种变化中逃出来,去寻找一种他们期望的稳定的能安心立命的东西。当然,在他们的思维中,这个肯定不是『技术』

但显然这是缪论。

因为这些人没有意识到技术在变的过程中,存在着『不变』的东西。一旦你掌握及理解了不变的东西,所谓的变化对你而言,可能就如同换肤一样轻易与简单。

这也是为什么国外很多优秀的程序员一把年纪了还是在技术第一线。这样的例子不胜枚举,Robert C.Martin,Martin Flow还有Linux的作者。

而我们这,可能30还没到,很多编码的就想着怎么逃出去,觉得自己可能学不动了或干不动了。

为什么别人能做到的事,在我们这片土地上,我们做不到?这是非常我们反思与思考的一个现象。

我在2020年与前端的一些交集,让我意识到了技术的这种变与不变。对我而言,仿佛这是一个全新的世界。

这也是我想分享出来的原因所在。

我与前端

大多数前端人员是流水线式的,可能从编码开始就做的前端,然后一直投入在前端这个方向中,后面变化的只是时间及经验,2年,5年或更多。

显然,我并不能算是一个前端技术人员,事实上我与主流的前端技术人员的经历相差过大,我很难说自己是他们中的一员或与他们的经历类似。

我与前端的交集并不是个流水线。它是断点式的。

主要可能有三个阶段:

阶段一:工作之前

在这个阶段,因为自己的专业与计算机有点关联,记得大学还专门有个课程就是学习HTML知识的,当时应该是HTML4,这门课程结束时老师还要求用HTML做个网站。

这可能是我与前端的第一次相遇。

阶段二:后端开发

我工作的很长一段时间是在后端开发,可能现在的后端人员没有这种经历,但在我做后端的那些年,前端并不是一个独立的技术方向,事实上,当时的前端更多的是后端兼顾的。

所以,现在可能大多数前端人员不太知道的一些技术其实在早期也是可以算是前端的技术,比如JSP,Freemarker模板,还有Struts页面等。

这些是什么东西?可能现在的前端与后端人员都不太熟知这些技术了。因为现在的主流开发模式应该是前后端分离。也就是后端逻辑后台人员来实现,然后提供REST API接口。而前端逻辑由前端人员来处理。但在我工作的早几年,可不是这么回事,那个时候的页面可是由后端人员自己来做,方式就是上面说的类似JSP,Freemarker模板这些技术。

为什么?

因为当时前端技术本身不足以提供动态渲染复杂页面的技术能力

随着WEB页面越来越复杂,早期的HTML这种静态页面已经完全不能适应复杂WEB页面的需要,但当时前端本身又根本提供不了动态渲染复杂页面的能力,JQuery这种动态DOM操作虽然有一定的页面操作能力,但不能应付非常复杂的页面,于是由后端动态渲染页面,成为了当时的主流。

阶段三:前后端分离

在2020年之前的几年时间,我都主要是在负责移动端相关的编码工作,这个阶段与后端打交道不多,虽然还是有一些。与前端就基本没打过交道了。

所以,等我2020年再次与前端相遇时,前端已经是完全不同的世界了。我所熟悉的JQuery也好,HTML也好,在这个前端的世界基本可以说是处在边缘甚至可以说是被抛弃的技术了。

2020年上半年,我开始PCX的开发工作,这个是基于Electron的跨平台桌面开发。

我是用了前端的一整套技术搭配,包括TypeScript,React,WebPack,Mobx等,做了个跨平台的桌面软件。

前端之变(一):技术的变与不变-LMLPHP

也就是我并不是做前端开发,但由于这玩意其实就是基于一整套前端技术而开发的,所以我搞完这个,自然也就再次明白现在的前端开发怎么回事了。

哪些改变了,哪些没有改变?

由于不是流水线式的经验,而是这种断点式的,再结合我有后端,移动端的开发经验。所以,我就会觉得前端技术的发展有点不可思议,相比后端与移动端,简单可以说是天翻地覆式的变革。

所以,我也时常思考,什么原因?

它改变了

是的,很显然,它改变的太多了。

后端与移动端这几年的技术变化远不能与前端相提并论。

虽然我在前几年没怎么接触后端,但等我再回到后端时,没有任何生疏感。主流的无非是从SSH变为Spring Boot,再就是微服务的流行。事实上,就算微服务兴起,它仍然没有办法取代过往的单体或集群服务这种模式。或者新兴的Kotlin或响应式编程这种模式,但这种本来也是少众,不可能成为主流,而且就算以这些来论,其变化的幅度仍然与前端不可相提并论。

而在移动端,无非是原生开发,Hibrid混合开发,再就是类似React Native与Flutter跨平台开发这些,这些远称不上改变,它们也只是不同的解决方案而已,适应不同的场景,并不算得上演进或改变。因为它们之中没有任何一种模式能压倒性的取代其它模式。

而前端则全然不同,它并不只是出现了新的技术或框架这么简单,更多它是一种新的编码理念完全取代了旧有的编码理念,新的编码模式压倒性的取代了旧有的编码模式。

包括但不限于:

  • 前端由后端渲染转变为前端动态渲染

  • 从HTML+JS这种脚本式编码变化为TypeScript+React这种面向对象的编码

  • 出现了React,Vue这种组件式的UI编码,取代了旧有的HTML+JQuery的DOM操作这种模式的UI编码

  • 从命令式UI到声明式UI的转变

  • 从编码就是产物,到编码与产物完全是两种截然不同的东西

这些改变,用天翻地覆来形容并不为过。

它没有变化

当然,由于我在后端与移动端也有编码经验,所以当我把前端的这些变化放大到整个技术背景来看,我就能发现它又有很多东西其实并没有改变。

给人一种以前游离在外的小孩回到了主流的队伍的感觉而已。

包括但不限于:

  • TypeScript是面向对象的语言,它与Java极为类似。
  • 我把DDD领域驱动应用取了PCX的开发
  • 我在PCX抽取的数据库的框架,是我在iOS抽取的数据库框架的复刻版而已。
  • 前端可以应用基本的面像对象的原则及设计模式了

所以,看到没,如果把范围放大,你说它改变了么?

道与术

这就是我在2020年的感悟到的一个最大的事情 ,技术这个东西原来存在变与不变两方面的东西的。

这就是道与术

理解并掌握了这个,你就能成为一名优秀的程序员,不会害怕任何改变或新技术。

关于道与术,我后续另外会专门讲这些话题。

事实上,我在准备做PCX时,上面讲的几个前端技术我一个都没有接触过,而TypeScript还是我从其他前端人员中听来的,直至要搞前我都不知道前端还有这个技术,这些玩意我当时也只是花了2周看了下是什么就开始搞了。最终我花了不到5个月的时间,完成了PCX的第一个版本。

而在今年搞myddd-vertx之前,我对kotlin与vert.x也基本一无所知,但myddd-vertx从我起意到实现再到应用到一个具体的项目,可能2个月时间都没有。

所以,你想成为优秀的程序员,一定要去追寻编码之道。

前端之变与原因

我在前端讲述过了前端的这些变化 ,意味着前端的编码发生了一个质变。

那究竟前端发生了什么样的改变,具体表现是什么?

又是什么导致前端发生了这种质变?

下个文章我再来讲述:前端之变(二):前端的变化与原因追寻

05-17 22:45