编程语言之争,谁将会杀死Java?
英文原文:What Will Kill Java?
Java 是这个星球上最为流行的编程语言之一,但这方面的竞争正愈演愈烈。下面我们将讲述 Java 可能遭遇滑铁卢的地方,以及可以做些什么来预防它的衰退。
2017 年 9 月的 TIOBE 指数将 Java 列为当月较为流行的语言。其实,它已经名列前三甲很多年了。
Stack Overflow Developer Survey 2017将 Java 列为继 Javascript 和 SQL 之后第三常用的编程语言(实际上,过去四年它都保持着这名次)。
不说这些结果是如何产生的,亦或者这结果是否反映了现实世界中的情况,我们不能否认的是,Java 在多个环境中仍然是一种流行语言。
但是,Java 总有一天会死。世无定事,没有什么可以天长地久。
编程语言死亡的真正定义是没有人再使用它——但这样的情况很难发生。即使是老朽且不被广泛使用的语言(例如,你是否听说过 Modula-3?),仍然在被使用、维护,或者至少会演变成其他的东西。
当然,这是一个渐变的过程,怎么发生的方法不定。从实际出发,假设编程语言在它不再被用于新项目时,就意味着它的死亡,但是它可能依然存活在许多遗留项目上(COBOL 就是一个完美的例子)。
最终这结局也将降临到 Java 头上,那么谁会杀死它?
让我们来分析选项。
在以《What Killed Smalltalk Could Kill Ruby Too》为主题的演讲中,Robert “Uncle Bob” Martin 说,Smalltalk 被杀的原因是,它太容易造成混乱,并且它的傲慢自大会导致不专业的实践方法,如缺乏测试驱动开发(TDD)。
在任何语言中你都可以搞得一团乱。当然,在某些语言中,比其他语言更容易导致混乱——例如,在动态类型语言中,我们可以随时更改变量的类型——但是我们在 Java 中没有这个问题。
此外,在 Java 社区中很多人采用的良好实践,比如设计模式和 TDD,有助于我们制作更好的软件。
所以让我们来探讨另一个选项。
Java 是面向对象的语言。如果其他(新的)范式接管了怎么办?如果面向对象的编程变得过时了怎么办?
好吧,这可能性并不大——基本原理已经有很长一段时间没有真正改变过了。诸如结构化,功能性和面向对象编程的重大创新发生在 20 世纪 50 年代,60 年代以及甚至 70 年代,但从那以后,没有什么举足轻重的事发生。
但是,在过去十年中,却有很多新的语言问世,这些语言有着现代的语法以及新功能的框架。
那么,没有现代语法和新的功能是否会导致 Java 的死亡呢?
不,我不这么认为。
你还记得(或听说过)EJB 2.0 及其 Entity Beans 吗?它们很可怕,但是像 Rod Johnson 和 Gavin King 这些 Java 社区的成员却以 Spring 和 Hibernate 等框架回应。
以类似的方式,虽然 Java 不是一个功能齐全的语言,但是由于有 Vavr 这样的库,我们可以使 Java 更加功能化。
我的意思是,Java 缺少的某些东西,有人会通过创建(框架,工具,规范,无论什么)来填补这个空白。
那么 Java 会不会因为另一种编程语言而死亡呢?
我们以 JavaScript 为例。毕竟 JavaScript 正在占领这个世界,对吧?
我们可以在后台使用 Node.js,类似于移动设备上的 React Native 或 Ionic,我们甚至不必提及在前端的所有竞争选项。
但是,至少在企业软件中,我没有看到 JavaScript 将要替代 Java 的趋势。JavaScript 在企业领域中没有取得成功的框架或工具。它也没有与 Java 虚拟机(JVM)相当的东西,Java 虚拟机(JVM)依然是大型和关键任务软件的首选平台。
那么 Kotlin 呢?
Kotlin 语言首次出现在 2011 年,并且最近 Google 宣布在 Android 上对 Kotlin 提供一流的支持。Kotlin 正在逐渐被知名公司采用,并且不局限于在这些公司的 Android app 上(例子)。
除了现代化的功能,Kotlin 也是一种开放源代码的语言,它由一家生产最佳 java ide 的公司提供支持。
所以,如果你问我的话,我的回答是,是的,Kotlin 看起来像是(在遥远的未来)替代 Java 的一个很好的候选者。
当然,Java 也可能被一种或多种语言所替代。
哪些呢?
我不确定,而且我敢说现在也没有人知道这个问题的答案。
我所能确定的是,没有任何语言能够自主地杀死 Java。不借助任何外力,就此而言。
能够杀死 Java 的刀子在于它无法满足市场的需求。
编程语言是构建解决计算机问题的应用程序的工具。如果某编程语言提供抽象、模型、工具和框架,使你可以更有效率或创建比 Java 更高效的代码,你会选择哪种语言呢?
即使是在 Java 版本之间,如果让你在 Java 1.4 和 Java 9 之间进行选择,那么你会选择 Java 1.4 吗?你会放弃用 lambdas 或泛型工作的机会吗?我不这么认为。你会需要较新版本的功能。
在这些年来,由于已检查异常、内部类、getter 和 setter 等等方面,Java 被认为是一种冗长又笨拙的语言。直到 Java 7(有些人认为是 Java 8)才开始好转。
然而,Java 7 于 2011 年发布,比 Java 1.4(2002 年发布)晚了九年。在这个时代,这是不能接受的,并且可能会导致恶性循环。
仔细查看 TIOBE 页面上的 Java 图表。尽管 Java 大多数时候位居前三,但有明显的下降趋势,表明它正在失去市场份额。这种趋势在所有语言中都很普遍。最可能的原因是编程语言的数量在不断增加,应用程序越来越多地被以多种语言编写。因此,竞争比以往任何时候都要激烈。
如果我们认为其他语言比这种语言更好,那么它就不再受欢迎,我们也不会将这种语言教给新一代的开发人员。
新的教程、课程和书籍将不会再被创造。
社区中的宝贵成员将被其他技术吸引走。
该语言将不会用于新的环境。
将导致减少语言的流行度。
Mark Reinhold,Oracle Java 平台组首席架构师,提出的新的六个月发布计划,是向前推进 Java 并迈向未来的重大一步。用他的话说(就特征驱动的版本):
这种方法可以在早期采用者进行彻底的检查和测试后,以高水平的质量提供大的新功能。然而,不足之处在于,较小的 API、语言和 JVM 功能只有在大功能准备就绪时才能实现。
这是在本世纪之交前后几十年时间里达成的一个可接受的折中方案,当时 Java 仅与几个以类似的步伐演进的平台竞争。然而,如今,Java 在与许多以更快速度发展的平台一起竞争。
最后一段话很多都是事实。
但是,这不仅仅是 Oracle 的工作。社区也必须保护 Java。
怎么做?
我的一些想法:
- 不要傲慢(不要认为 Java 太大而不会失败)
- 促进良好的开发实践方法
- 继续发布超棒的框架、工具等
- 支持 JSR
- 帮助教学和推广 Java 语言
- 在新环境中尝试 Java
否则,Java 如果无法跟上时代的步伐,那么最终将会被后浪拍死在沙滩上。
-