Java 并无死!那么,Java这朵“永生花”是怎么永葆青春的呢?

我是一个从事Java / Scala / Groovy工做的家伙,这不是一个秘密。有些人,特别是年轻人,在听到这话时就会冲我翻白眼。算法

与现代语言相比,Java老套、低效、并且已经完蛋了,基本上他们都会这样对我说。然而,实际状况确实如此吗?数据库

老套编程

没错,Java的基本结构和限制都比较老套,并且还依赖于20年前写代码的方式。小程序

编程语言并非凭空产生的,开发人员的习惯和需求是语言设计的核心,虽然语言的发明者试图将创新融入其中,可是忽略人们实际的使用方法是很愚蠢的作法。安全

Java史上的第一个里程碑能够追溯到1995年,虽然它的一些基础模块的设计看起来至少有10年的远见,然而很明显,24年后的今天……看起来不是那么一码事了。服务器

但这不只仅是时间的问题。在过去的十年中,Java发生了不少变化。其中一些变化彷佛与Java自己无关,却无比重要。架构

例如,廉价的内存对于生产软件中大规模从新采用函数编程起着举足轻重的做用。而这又与反应式宣言(The Reactive Manifesto)息息相关。并发

便于访问和管理的云计算促进了微服务模型概念的发展,这种模型随着容器的出现走向了生产环境。框架

因而,在微服务模型的发展中,一些很是适合于某些任务,但在其余任务上表现平平的编程语言脱颖而出。机器学习

编程语言世界的变化远不止于此,大数据带来的新挑战催生了专门为处理大数据而优化过的新的数据库系统,这些数据库可以摄取大量的数据,而后对其进行分析。

实际上,这并无催生新的语言,而是为适合于这项任务的语言找到了另外一种使用方式。

更不用说人工智能又一次掀起了争先恐后的热潮。

可是,等一下…

现在,Python成为了机器学习的黄金标准,可是若是快速浏览一下它的维基百科页面,你就会发现Python的诞生早于Java,甚至能够追溯到1990年!

那么R呢?这但是数据分析常见的选择。R语言始于1993年。

那么JavaScript呢?奇怪的是,JavaScript出现于1995年,与Java同年!

Erlang呢?1986年…

为何没人说这些语言老套,却单单说Java呢?

由于咱们改变了,还有咱们面临的挑战也发生了变化。

例如,Python一直是编写实用工具和数据处理程序的一种出色的脚本语言,但一般咱们不认为它适合于臃肿的企业应用程序。

然而,通常来讲微服务是一些小程序和数据管道,它们由明肯定义的功能型小组件组成。

一直以来,JavaScript是动态网页的惟一解决方案,但随着复杂Web应用程序的激增,将JavaScript带到服务器端也算合情合理。

总而言之,咱们说Java老套,只是由于它很是适合构建臃肿的单体应用,这些应用每每拥有数百万行的代码量,须要大量的规划和严格的顺序,而Java的设计目的原本就在于此。

若是试试看用JavaScript构建这样的应用,你很快就会意识到“死亡不是终点 ,而是一种转变”(摘自:梦剧院乐队的歌曲《Fatal Tragedy》)。

低效

听上去确实如此。

我常常用下面的比喻来解释Java:

若是你须要作一个火柴盒,那么首先你须要10吨木材,建造一个小木屋,而后再一点点削成火柴盒。

因为Java强调用一种正式严谨的方法来鼓励开发人员建立适当的类层次结构,因此开发人员即便以为这种作法很白痴,也不得不采用正确的方式设置全部内容,即便对于一个很是小的任务也是如此。

然而,这就是问题所在,就像咱们上面所说,Java的任务都不容易。

请注意,我所说的“不容易”指的是不容易实现,但在架构方面却很容易。

编写错综复杂的算法是一项艰巨的任务,并且我发现用Python来写更容易。

对于这一点,很明显咱们一直在反复讨论同一个概念:选择正确的工具。

一直以来,Java都是一种很是通用的编程语言,并且被用于解决各类状况下各类类型的问题,但随着时间的推移和挑战的变化,彷佛愈来愈明显Java也并不是无所不能——这并非由于它已经演变成了一种专门的语言,而是由于其余语言更加擅长处理特定的任务。

若是你想构建一个大型企业平台,其中包含大量的内部构造,巨大的代码库,疯狂的并行性等等。

那么Java仍然很给力。等一下,真的是这样吗……?

Java已经完蛋了

也许有点阴暗,可是有一句话说的好:“不要惧怕将来,你也活不了那么长。” 你是否是感受想笑……

Java就像一名开发人员同样,随着时间流逝一每天老去,你再也不像10年前那样拥有清醒的头脑,可是你会变得更聪明、稳定和可靠。

固然,你仍然能够学习Rust,但你永远没法像比你年轻10岁的人那样,你总以为哪里不对劲。

一样,Java也在现代化的竞争中不断落后,当新功能出现时,你总感受在经历了诸多波折后,它们终于成为了现实。

例如,当他们第一次引入lambdas时,你的反应不是:“哇!欢呼吧!”,而更像是:“天啊,为何到如今才出来啊?”

另外一方面,人们没有意识到Java的最大成就不在于语言自己。

良好的生态系统

在规划大型软件时,让我想起Java的另外一个因素就是Java的生态系统。不管是何种互联网上你求之不得的东西,Java均可觉得你提供卓越高品质的库。

想一想Spring、Akka、Tomcat等等(我能够说出来几百个),这些都不是业余项目,而是非凡的成就。

我并非说其余语言作不到,可是在大企业的推进下,Java创造了这种软件生存的先决条件。

此外,一个良好的生态系统须要花费数年才能培养起来,时间因素也很是重要,对于Java生态系统成熟来讲,20年能够说是很长的时间了。

固然,你也能够找到适用于多种语言的特殊库,可是很快你就会意识到这些库的存亡,在很大程度上取决于大公司是否定可这些项目。

例如,为Python找到好的机器学习库很是容易,但你不可否认Google在其中发挥的做用。在Facebook的支持下,你才有了React.js(Javascript)开发出色的Web应用程序。

Java最大的成就是JVM

除了咱们以前提到的庞大生态系统以外,Java最大的成就是JVM。虽然语言可能因年龄的增加而面临重重困难,但至少在我看来JVM很健康。

现在,有人可能会说容器化已经削弱了对JVM的需求,从某种意义上说,此言非虚。

JVM最初的需求是容许程序在全部操做系统上执行,但容器改变了一切,由于在容器的帮助下,咱们能够假定操做系统能够在任何地方运行,甚至是纸上。

然而,JVM的做用远不止于此。内存管理和垃圾收集、安全性、基本编程库以及调试和检查功能,JVM承担起了全部的这些工做,为咱们提供了一个安全温馨的环境。

人们经常反驳我说:“可是JVM很是臃肿,很是慢!”虽然从内存的占用和引导时间来看,这话没错,然而从性能的角度来看,过去的20年中发生了不少变化。

咱们常常会经过经常使用的算法,进行下述的比较:

Python 3 Vs. Java

Node js Vs. Java

Go Vs. Java

Erlang HiPE Vs. Java

虽然这种比较对一些语言不太公平,由于算法只是性能因素的一部分,但从中能够看出JVM绝非病入膏肓。

然而……

从某种程度上,我赞成虽然JVM情况良好,但Java却在努力保住本身的地位。

Oracle明白这种形式,并且他们正在努力再次将Java推向巅峰,虽然这种作法会产生一些意想不到的后果,但没人可以阻止老化的过程。

然而,这也未必是一件坏事。

JVM充当了建立效率更高的现代化语言的平台。虽然不是不少,但凭良心说,有一些仍是很是成功的。

这就是关键所在。Java这个霸主并无死,虽然有些咳嗽。然而,它的后代将继续传承它的遗产。

Scala。个人第二个心中所爱。这是一种很是强大的语言,它是静态类型、面向对象的函数式编程语言。虽然仍未被普遍采用,但目前它是最值得投资掌握的技术之一。Scala是Play Framework的实现语言,它还常常和Akka的actor模型搭配使用。

Clojure。一种被普遍接受的相似于Lisp的语言,以其在并发计算方面的强大功能而闻名,它常常用于处理庞大的数据集。

Groovy。动态编程的脚本语言,我经常以为它与Java很是相似。Groovy普遍用于脚本编写,也是支持Grails框架的语言。

Kotlin。虽然最后一个出场,但并非说这种语言不重要,它是JetBrains的静态类型面向对象的函数式编程语言,现在是Google Android开发的首选工具。

上述咱们讨论的不是Java的扩展。这些是全新的编程语言,但它们都借鉴了Java,最重要的是它们充分利用了JVM和Java生态系统。

但实际上…

Java编程语言不会在近期内走向消亡。

不只由于大量的软件都是用Java编写的,并且不管你赞成与否,它虽然有缺陷,但仍然是一种久经考验很是适合于新项目的编程语言。

固然,Java承担的角色会发生变化。从前“你惟一须要的只有Java”,而现在只能在部分领域发挥做用,但它仍然是坚实可靠的一部分。

虽然我对Scala很是感兴趣,可是我也必须说Oracle和社区在改进Java方面作出了很大贡献,咱们都享受着这些改进带来的优点。

虽然新功能的到来比咱们预想得晚,但在质量上却没得说。

毕竟,编程语言发展缓慢可能意味着被弃用,也多是成功的标志。

既然人们如此大规模地使用你的编程语言,那么你就不得不认真地对待全部的重大改变。

你所作的每一步都须要考虑影响的程度,以及向后兼容性的方式。任何问题都不能掉以轻心。

总结

我在这个领域已经很长时间了,因此我有理由相信我对Java这门编程语言的某些特质有了必定的了解。

在过去10年中,这个领域的发展加快了速度,可是这些发展主要集中在某些领域。

出现这样的状况时,你可能会感受一切都将发生变化。这些发展让部分人过于激动和兴奋,因此他们四处喧嚷。

可是,当喧嚣事后,你就能够清楚地看到这些发展的真实本质,并尽力利用好这些发展。

正如我上述所说,Java依然是Java,可是坦白地说,多年来Java努力达成的全部辉煌还无人能及。

我想对大家全部人说——不管是年轻人仍是老年人,不管你喜欢仍是讨厌Java:享受这个美妙的科技时代带来的多样性!

相关文章
相关标签/搜索