Java 仍然伟大的 7 个原因

软件领域最引人入胜的现象之一是 Java 经久不衰的卓越地位。 作为一种语言和平台,Java 在技术领域经历了翻天覆地的变化,它自己的内部结构也随之发生了变化。 二十多年来,Java 是如何保持企业和开源的中心地位的? 让我们来看看几个突出的因素。

Java 社区进程

Java 诞生之初是作为传统做事方式的替代品——某种新贵。 如今,尽管一再面临挑战,它仍被公认为企业软件的支柱。 面对如此剧烈的变化,如何解释 Java 的持续相关性? 一个重要因素是社区的热情,这是通过让开发人员参与进来的治理结构来培养的,以使 Java 保持生机勃勃的活力。

Java 的治理远非一台平稳运行的机器,它是相互竞争的利益和组织的混乱混合体,这些利益和组织在 Java 社区进程 (JCP) 和 Java 规范请求 (JSR) 中找到自己的发言权。 归根结底,JCP 是深切关注 Java 技术的人们做出贡献和解决冲突的场所。 这是官僚主义、政策和创造力的一种相当神秘的结合。 事实上,就像一个正常运作的民主国家。

作为一名长期的 Java 程序员,看到该语言成功地结合了 lambda 和闭包,感到很惊讶——实际上是惊人的。 将函数式结构添加到面向对象的编程语言中是一项极具争议且令人印象深刻的壮举。 将 Hibernate 和 Spring(分别为 JSR 317 和 JSR 330)等技术引入的概念吸收到官方平台中也是如此。 如此广泛使用的技术仍能融合新思想,令人振奋。

Java 的响应能力有助于确保该语言包含有用的改进。 这也意味着开发人员知道他们是在一个有生命的系统中工作,这个系统正在不断培育和培育,以便在不断变化的世界中取得成功。 Project Loom——一项重新构建 Java 并发模型的雄心勃勃的努力——是一个强调 Java 致力于发展的项目示例。 目前通过 JCP 工作的其他几个提案表现出类似的意愿,以追求改进 Java 技术的重大目标。

从事 Java 工作的人只是故事的一半。 使用它的人是另一半,他们反映了 Java 众多用途的多样性。 社交编码和开源并不是 Java 独有的,但它们是 Java 生态系统健康发展的关键组成部分。 与 JavaScript 一样,随着 Web 的发展,Java 与编码社区一起发展。 这个起源故事是其性格的重要组成部分。

开源框架和工具

Java 成功的另一个重要推动力是围绕它构建的大量开源框架和工具。 几乎任何您可能需要的东西都有一个或多个可用的库。 如果您喜欢一个项目,那么它很可能是开源的并且您可以为它做出贡献。 这对学习和建立社区都非常有用。

不久前,我深入解析 YAML,并发现了 SnakeYAML 项目。 很快,我就忙于尝试用这个新项目做些异国情调的事情。 不久之后,我正在和项目的所有者聊天。

当我需要在金属附近进行一些复杂的流程编排时,也会发生类似的事情。 首先,我发现了 NuProcess 项目,然后我贡献了一个小修复程序。 那样的交流让程序员的生活更加丰富。 它们也是开源项目的发展方式。

Java 生态系统中的项目丰富,从像我分享的示例这样的普通示例,到数据库驱动程序和类似技术,再到不朽的项目。 有像 Tomcat 和 Jetty 这样的应用程序服务器,像 Hibernate 这样的框架,甚至还有 Eclipse IDE。 都是邀请贡献者的开源项目。

弹簧依赖注入

如果不向 Spring 致敬,对 Java 生态系统的欣赏将是不完整的。 这个元框架可能是其他元框架可能追求的标准。 为什么? 因为 Spring 允许您使用相同的工具来编写自定义代码并将第三方代码合并到您的程序中。 通过其依赖注入和控制反转的实现,Spring 不仅使您能够使自己的内部组件更加标准,而且还将类似的标准化扩展到第三方项目和供应商准备其组件的方式。 这使得您在程序中使用这些组件的方式更加一致。

当然,对 Spring 的批评是有效的,它并不总是正确的工具。 Google Guice 是另一个工作方式类似于 Spring 的工具。 但是 Spring 作为一个框架,引入了一种干净且一致的方式来提供和组合应用程序组件。 这在当时改变了游戏规则,今天仍然至关重要。

一切都是对象

如果说 Java 背后和使用 Java 的人是让船继续航行的风,那么 Java 的技术方面就是风帆。 令人印象深刻的是,最初的 Java 规范像雅典娜一样从一个头脑(詹姆斯高斯林的头脑)中涌现出来,但仍然足够灵活,今天仍然具有相关性。

Java 设计的一个重要特征是,在 Java 中,一切都是对象。

在目前偏爱函数式编程的开发环境中,有时抛弃 Java 和面向对象编程的这一方面很流行。 Java 的管理人员通过将一些函数式编程习语合并到该语言中来做出回应。 但他们一直坚定地认为 Java 仍然是一种强烈的面向对象的语言,在这种语言中,一切都是对象。

在任何范例中都可能编写出很棒或糟糕的代码。 进入 Java 系统之前,您知道它是强类型的,并且所有内容都包含在类中。 这种设计决策的绝对性消除了复杂性,并使使用它的语言和程序更加简洁。 编写良好的 Java 程序具有编写良好的面向对象代码的机械优雅。 功能是交互组件的结果,例如机器中的齿轮。

这种方法的代价是在学习的早期阶段感到困惑。 几乎每个 Java 初学者都会遇到关键问题:什么是 public 那里的关键字,什么是类,为什么我需要写“public static void main(String[] args)”只是为了打印“hello world”?

但考虑到这些学习曲线是大规模订单的有力方面:初学者正在遇到并吸收复杂的概念,这些概念是 Java 做事方式的基础。 您可以说 Java 程序严格基于类的结构使其适合大型编程。 随着系统规模的增长,在较小规模下可能显得笨重的结构变得更加有益。 在许多情况下,它证明了早期学习的负担是正确的。

可以肯定的是,对 Java 语法的抱怨是合理的——JavaScript 和所有其他语言也是如此。 正如 Bjarne Stroustrup 曾经说过的,“只有两种语言:人们抱怨的语言和没人使用的语言。”

虚拟机

Java 虚拟机是 Java 构造的另一个方面,它偶尔会受到批评。 在其发展时期,JVM 是针对运行时环境多样性的大胆技术解决方案。 从那时起,它有时似乎是过多架构的负担和性能困难的根源。 但经过多年的不断完善,这项技术逐渐证明了自己的正确性。 它也被证明是相当有先见之明的。 世界最近迷上了虚拟机。 它们无处不在,甚至形成了云计算的最低层。

应用于 devops 容器和无服务器架构,JVM 提供了一个明确的部署环境目标,具有明确定义的特征和控制。 现代 Java 虚拟机也值得一看。 它们提供复杂的自动内存管理,开箱即用的性能接近 C。

企业创意

软件开发由两股强大的潮流组成:企业和创意。 编码有一种创造性的快乐精神,这是唯一可能的解释,比如说,在地牢模拟器上工作了 25 年。 这种创造力与扎实的商业用途相结合,是让 Java 保持活力的炼金术。 为了取得长期成功,软件项目必须为两者腾出空间。 Java 已经做到了。

WebAssembly 和 Java 的未来

在临别笔记中,让我们确定另一个即将出现的潜在分水岭事件:WebAssembly 或 WASM。 WASM 中的 Java 目前是有限的,未来将如何发展还不确定。 但是有朝一日 Java 可能会像 JavaScript 一样在浏览器中使用——也就是说,可以完全访问 DOM 和浏览器 API。 再次想象浏览器中的 Java,但这一次是真实的。 奇怪的事情发生了。

阅读更多

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注