导读:Java 语言经历了技术领域的大规模变革,这些都对Java的地位造成了许多威胁。是什么让Java技术持续伟大,而它的未来又将如何?
在软件开发行为中,最引人入胜的现象之一是 Java 历久而不衰。
作为一门语言与平台技术,Java 在技术领域的大规模变革中幸存下来,其自身的内部结构也随之发生了巨大变化。
二十多年来,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 所独有的,但已经是 Java 生态系统健康的关键组成部分。
与 JavaScript 一样,随着Web的发展,Java 与开发者社区同步发展,创新是其角色的重要组成部分。
开源框架和工具
Java 成功的另一个重要驱动力,是围绕其构建的大量开源框架与工具集合。
你所需要的任何东西,几乎都能在开源代码中找到一个或多个可用的库。如果你喜欢一个项目,它有可能就是开源的,你还可以为它做些贡献。
以上这些,对于我们学习和增强开源社区非常有用。
不久前我尝试解析 YAML,发现了SnakeYAML项目。很快我就开始尝试用这个项目做一些充满异国情调的事情。
不久之后,我就和这个项目的负责人聊上了天。
当我需要进行一些复杂的工作流程编排时,发生类似的事情。首先我发现了NuProcess项目,接着也贡献了一个小修复。
像上面这样的交流,它让程序员的生活更加丰富,它们是开源项目的发展方式。
Java 生态系统中有丰富的项目,从我分享的那些普通示例,到数据库驱动程序等技术栈,一直延伸到伟大的作品,比如Tomcat和Jetty这样的应用服务器,像Hibernate这样的框架,甚至还有Eclipse IDE,所有都是优秀贡献者的开源项目。
Spring依赖注入
如果不向Spring致敬,对 Java 生态系统的评价就不算完整。Spring 框架可能是其他Java框架可能追求的标准。
因为 Spring 允许开发者使用相同的工具来编写自定义代码,将第三方代码合并到自己的程序中去。通过实现依赖注入和控制反转,Spring 不仅使开发者能够使自己的内部组件更加标准,而且还将类似的标准化扩展到第三方项目,帮助提供商如何准备他们的组件,这使得在程序中使用这些组件的方式更加一致。
当然也有对 Spring 的批评,它并不总是正确的工具。Google Guice是另一个与 Spring 工作方式类似的框架。但是 Spring 作为一个框架,引入了一种干净且一致的方式来配置和组合应用组件。
这在当时改变了游戏规则,在今天Spring仍然至关重要。
一切都是对象
如果 Java 背后与使用它的人是让船航行的风,那么 Java 技术就是帆。
最初的 Java 规范从一个单一的领导人(James Gosling )中冒出类似雅典娜的形式,但仍然保持足够的灵活性,以至于今天仍然具有相关性。
Java 设计的一个重要特点:在 Java 中,一切都是对象。
在当前偏爱函数式编程的开发环境中,有时将 Java 和面向对象编程的这一方面丢弃是一种时尚。
Java 的管理者通过将一些函数式编程习惯用法合并到该语言中来做出回应。
但是这些管理们一直坚信 Java 仍然是一种强面向对象的语言,其中所有东西实际上都是一个对象,在任何范例中都可以编写很棒或糟糕的代码。
进入 Java 生态,你会预先知道它是强类型的,并且所有内容都包含在类中。这种设计决策的绝对性消除了复杂性,并为使用它的语言和程序带来了简洁性。
编写良好的 Java 程序具有面向对象编码的优雅。这一特性是交互组件的结果,就像机器中的齿轮。
这种方法的代价是造成早期学习阶段的混乱。
几乎每个 Java 初学者都会遇到关键问题:那个public关键字是干什么的,什么是类,还有为什么我需要写“ public static void main(String[] args)”来打印“hello world”?
考虑到这些学习曲线是大规模处理的有力保证:初学者会遇到和吸收对 Java 做事方式至关重要的复杂概念。Java 程序严格基于类的结构,有助于进行良好的大规模编程。随着系统规模的扩大,在较小的规模上可能看起来笨拙的结构变得更加有益。
在许多情况下,它也的确证明了早期学习负担的价值。
可以肯定的是,Java 语法存在一些合理的抱怨——JavaScript 和其它语言也是如此。
正如 Bjarne Stroustrup曾经说过的那样:“只有两种语言:人们抱怨的语言和没人用的语言。”
JVM
Java 虚拟机是 Java 构造的另一个方面,偶尔也会受到批评。在刚开始开发Java时,JVM 是一种针对运行时环境多样性的大胆技术解决方案。
从那时起,它似乎是过度架构的负担和性能困境的根源。但经过多年的不断完善,这项技术逐渐证明了自己的正确性。JVM也被证明是相当有先见之明的。
世界最近迷上了虚拟机,它们无处不在,甚至形成了云计算的最基础层。
JVM应用于DevOps 容器和无服务器架构,它提供了明确的部署环境目标,具有清晰定义的特性和控制方式。
现代 Java 虚拟机也值得开发者一看。它们提供复杂的自动内存管理,开箱即用的性能已经接近 C语言 。
企业与创意
软件开发由两个强大的潮流组成:企业与创意。
编程是一种创造性的快乐精神,这对于软件开发者是唯一可能的解释。比如,在地牢模拟器上工作 25 年。这种创造力与扎实的商业用途相结合,是让 Java 保持活力的炼金神术。
为了长期保持成功,软件项目必须为以上两者腾出空间,而Java 已经做到了。
WebAssembly 和 Java 的未来
在文末,让我们共同确定一个即将发生的潜在分水岭:WebAssembly或 WASM。
WASM 中的 Java 目前是有限的,未来将如何展开还不确定。但是有朝一日,Java 可能会像 JavaScript 一样在浏览器中使用。
也就是说,Java 可以完全访问 DOM 和浏览器 API。Java曾经有一个Applet,而WASM让我们再次想象浏览器中的 Java,但这次是真实的。
奇特的事情很快发生了。
作者:洛逸
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。