Java 25 周年:波澜壮阔的 25 年

用户头像
北风
关注
发布于: 2020 年 06 月 07 日
Java 25周年:波澜壮阔的25年

Java 的25年,也是开源体系波澜壮阔的25年。Java 成功的建立了一个成熟、稳定、开放的开源生态。这个生态可以和任何商业生态抗衡。甚至现在已经演变成了“打不过就加入”。标榜一个framework 是否健壮,要看它是否用勇气开源。每次觉得Java 药丸的时候,Java 都突破了自己,彰显了非常强的内在生命力。

Java 的由来



Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,太阳计算机系统(Sun公司)放弃了该项计划。随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

与传统类型不同,Sun公司在推出Java时就将其作为开放的技术。全球的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的.NET平台以及模仿Java的C#语言。后来Sun公司被甲骨文公司并购,Java也随之成为甲骨文公司的产品。(以上来源于wiki百科:https://zh.wikipedia.org/wiki/Java。)

我想大家一定注意到了几个关键字:跨平台、面向对象、泛编程性 以及最最重要的开放。其实Java 从来不是完美的语言。Java 从诞生那一天起就有无数的缺陷。但这些并没有阻止Java的成功。开放就是Java 成功的核心。在这个核心之上,跨平台、面向对象和泛编程性保证了Java 语言可运行性、可扩展性和可连接性。无数个小而美的开源项目,通过Java 语言的这些特性,连接在了一起,支撑了一个又一个成功的项目。大家不必再重头造轮子。从此,编程似乎变成了一个简单的事情。那么,就通过我自身的视角,回顾一下我所经历过的Java语言的变迁史


第一阶段:标准化



与其说Java是一种计算机编程语言,不如说Java 是一种语言规范。Java只是这一规范的一个实现。例如在消息队列方面,Java有JMS规范;在可管理和可观测性方面,有JMX规范;在远程调用上,有RMI规范;在网页上,有servlet规范以及衍生的JSP;它从很多维度规范了一个Java语言应该有什么样的特性,有什么样的输入输出。甚至JVM应该如何工作。这样,大家在整个功能理解上,保持统一的理解!例如程序需要一个消息队列,无论选择哪一家产品,那么它们的工作模式都是类似的。在整体架构设计上,这很重要。在这个基础上,各家可以有各家的实现。大家百花齐放、百家争鸣。最关键的时候,各个组件之间,通过这些规范,连接了起来。虽然这时候,连接的不是那么方便。

我最早入行的时候,是做ITIM运维系统的。公司内部有一个分布式的、基于JMX规范实现的框架。这个框架通过JMX 来管理business bean(可以理解成非常原式的注入模式),通过RMI 来进行远程调用。性能采集指标通过JMS进行缓存。这是Java语言非常早期的阶段。很多流行的理念和框架都只是刚刚有个雏形。大家还是在造轮子的阶段。也多亏了这个项目。我接触了早期的Java 规范的一个实现。让我对Java 底层的设计有了一些认识。当我第一次通过Java console 连接JMX 进程,真的像是打开了整个世界的大门。我看了一个Java 内部到底有多少个进程,到底是如何消耗内存的。我第一次认识到,原来Java 语言是这样子的啊。其实除了业务的代码,底层也有无数的线程在默默的服务。



Java Platform Standard Edition 8 Documentation



第二阶段:IOC、MVC



自己实现一个Java 语言规范的框架,看上去好像非常牛的样子。但是这里有一些非常关键的风险:

  1. 代码实现依然需要关注非常多的细节;

  2. 整个框架的维护,对于小型公司非常不友好;

  3. 无法给前端实现带来益处。后端是管理起来了了,但是前段实现依然非常痛苦;



在这个时候,IOC 和 MVC模式横空出世了~!IOC模式和MVC改变了整个Java 语言。我觉得这是一次真正的飞跃。在这之前,程序猿需要自己来管理对象以及它们的生命周期。这带来了非常高的复杂性,而且这种复杂性是无用的复杂性,并不能帮助程序猿更快的创造程序。在使用了Spring 之后,程序猿不再需要自己来创建对象,Spring 会接管对象的创建。更有趣的是,这个对象实际上是一个代理对象。它的行为逻辑是可以动态改变的,也可以使用切面编程特性,给程序做很多的增强。自此,后台的编写变得越来越简单。需要一个事务?OK,增加一些配置/注解就可以实现了。程序猿不在需要关注那么多的细节,只需要关注业务逻辑即可。极大的解放了程序猿的生产力。集成其他框架?OK,增加一些配置/注解就可以实现了。总之,一顿配置,啥都有了。这个时候,我觉得才是整个Java 开源体系真正发挥威力的时候。大家真的非常容易的就可以集成在一起。

与后台代码变化相辅相成的是,前台的代码也发生了极大的变化。MVC模式带来了更清晰的前后端分工。动态标签库开始崭露头角。Structs 的出现,让后端开发人员专注以开发业务逻辑。前段开发人员专注于页面的渲染。他们之间通过一个特定的data model 来交互。整体的逻辑非常的清晰。再也不需要维护又臭又长的JSP 代码了。这时候,B/S 模式真正起飞了~!



曾经的B/S模式开发标准:



第三阶段:Spring 一统天下

B/S 模式在飞速发展之后,出现了新的问题。XML 配置又臭又长。Struts 并非标准的JSP 和 HTML 标签。Java 注解的出现和Spring 自身的进化改变了这一切。配合spring mvc,开发一个业务真是方便了太多。至此,Spring 已经成为Java 语言事实上的标准。在这之后,Spring 家族突飞猛进曾经的structs 早已经快消失在历史的长河中。。虽然大家经常诟病Spring 太重,但是它依然是最好的框架。所有的框架、不管是开源还是商业的,如果不支持spring,那么就几乎无法集成。Spring 也像它自己说的那样,真的成为了一个连接一切的粘合剂。

modern Java base on Spring



第四阶段:更多异步以及未来



时至今日,Java 在语言层面依然在不断的变化。不知道大家有没有这样一个体会:Java 越来越像 javascript;javascript 越来越像Java。Java 最近几年添加了不少语言的动态特性,比如Lambda 表达式,比如函数式接口。而Typescript 更像是Java语言。有的时候,我在写Java 代码的时候,会有一种在写javasript 的错觉。现在异步代码编写变得更容易了。程序的高性能、高可用性,也有一些成熟的框架来作为解决方案。目前的程序猿们,大多时候真的不再需要像当初的时候像我们一样,面对这wait/notify 这样的同步原语一脸懵逼。这是好事,解放生产力的好事。

在应用方面,微服务的出现。又让应用程序开发上升了一个新的高度。服务开发变得更简单的。但是业务拆分和整体设计又上升到了新的高度和难度。很多时候,大家不再关心单一进程的工作负载,而是关心应用是否支持横向扩展。在这个过程中,Java 何去何从依然充满了未知数。

结语

现在来看,确实Java 的语言体系陈旧了。它毕竟是一门25年前的开发语言。目前开发技术栈依然不断的向着更开放、更简单的方向演化。尤其是现在微服务的架构,整个公司的技术栈不在必须统一。终有一天,Java 也会退出历史的舞台。不过我觉得也不必挂怀一定要给Java 续命之类的。帝国终会崩塌,王权没有永恒。新的技术和语言也会站在Java的肩膀上,继承Java的遗产。

与此同时,我也希望广大的技术开发者们,可以跳出技术的藩篱。看到技术之外的世界。这个世界是丰富的、跳跃的。技术服务于现实。



发布于: 2020 年 06 月 07 日 阅读数: 378
用户头像

北风

关注

不想当咖啡师的架构师,不是好摄影师 2019.03.26 加入

斜杠中年

评论

发布
暂无评论
Java 25周年:波澜壮阔的25年