17611538698
webmaster@21cto.com

Java已经死亡?

资讯 0 2655 2019-05-05 11:57:26
 
21CTO导读:Java注定是要死掉吗?来看本文。

5.5_.2_.1_.jpg

 
 
我是个顽固派,一个喜欢Java、Scala和Groovy的老家伙,这没有啥可了不起的。
 
一些人,特别是年轻人,听到这些东西可能会对我翻白眼,这些特性和现代语言相比,“陈旧、不灵活、笨重”,这是我经常听到的话。
 
事实上确实如些吗?
 
陈旧
 
的确,Java提供的基本构造和约束是旧式的,并且依赖于20年前编写代码的方式。但是编程语言不是在消毒泡沫中创造的,开发人员的习惯和需求才是语言设计的核心。虽然语言的发明者试图将创新融入到语言中,但是它如果忽视人们的实际用途就是犯傻的做法了。
 
Java的第一个里程碑可以追溯到1995年。虽然它的一些基础模块在设计时和有十年以上的远见。但很明显, 24年后的今天......情况并非如此。
 
这不仅仅是时间的问题。在过去十年中,IT信息技术发生了太多变化,其中一些内容似乎与当前主题没啥关系,但它们实际就是讨论的核心。
 
比如,廉价的内存提供更大的可用性在大规模部署,生产环境的软件中的函数编程中起着核心作用。这与采用反应式编程宣言有关。
 
可访问和可管理的云计算减缓了微服务模型的概念普及,这个模型在容器化为现实时体现了它的生产角色。微服务模型为不同编程语言提供了更高地位,这些语言适合干某些任务,对自己不擅长的任务则不那么好用。
 
大数据带来的挑战引发优化数据库系统的再度兴起。人们能够抓取大量数据,然后对其进行分析。这种行为并没有引起新语言的诞生,而是对已证明完全适合这项任务的现有编程语言的第二种思考。
 
人工智能时代,年轻人开始争先恐后。但稍等一下......
 
Python现在已成为机器学习的黄金标准,但是如果你浏览一下维基百科页面,你很快发现它出现的比Java还早,可以追溯到1990年!
 
那么R语言,这个数据分析的常见语言呢?它其实发明于1993年。
JavaScript?它诞生于1995年,和Java一样。
是Golang吗?它诞生于1986年...
 
为什么这些语言不被认为是陈旧的,而Java却背了这个锅?
 
因为我们变了,面临的挑战也变了。
 
比如,Python一直是Web应用和数据处理程序的一种脚本语言,它通常认为不适合大型企业应用。但是微服务通常是小程序和数据管道组成,定义明确的,大部分功能的数据流组成。
 
JavaScript一直是使动态网页的唯一解决方案。随着复杂Web应用程序的增长,它跑到服务器端也是合情合理。
 
总之,Java被认为是陈旧的原因在于它非常适合构建大型软件——大多数是单片型应用程序,有着数百万行代码,需要大量的规划和严格的顺序,因此来说Java需要重新设计。
 
当你尝试用JavaScript做同样的事情时,会很快会意识到“死亡不是结束,只是改变”。
 
不灵活
 
这个词听上去特别贴切,我经常用这个段子来形容Java:
如果你要做一个火柴盒,首先需要准备10吨木材,创建一个日志,然后再把它们削到火柴盒里。
 
由于Java强行添加了严谨正规的方法,鼓励创建层次型结构,因此像个白痴一样以正确的方式设置所有内容,即使对于一个非常小的任务也是如此。
 
这就是Java面临的问题。综合前面描述,Java中的所有工作都不那么简单。请注意,简单的方式,这并不代表容易实现。编写复杂的机器算法是一项艰巨的任务,而在Python中这变得很容易。
 
在这一点上,很明显在迭代同一个概念:使用正确的工具。Java是(并且一直是)一种非常通用的编程语言,并且被用于在各种场景中解决问题。随着时间的推移,加上各种变化和挑战,Java变得越来越臃肿。Java无法变成专业化的语言,而是其他语言在特定任务中更合适。
 
如果要构建一个大型企业级平台或至少它是中心节点,具有大量商业逻辑,超大的代码库,大量的高并发等。
 
Java就像一只怪兽,是吗......?
 
Java注定要失败?
“不要害怕未来,你不会经历那么多的事。”
Java的年龄一年年地增长,就像程序员一样。你不会像十年前一样头脑清醒,但作为一种交换,你会变得更加智慧,更加稳重,更加可靠。
 
你当然可以学习Rust这些新型语言,但对于比你年轻10岁的人来说,不会感觉有什么困难。
 
Java现代化生态的竞争在不断退化。当新功能出现时,在适当的时候Java才会变成现实。比如,当人们第一次介绍lambda特性时,反应不再是“耶!我们聚会聊聊!”更多的却是“感谢上天,是什么原因让我们等了这么久?“
 
在另一方面,我们没有意识Java的最大成就不是语言本身。
 
一个非常优秀的生态系统
 
在规划大型应用软件时,Java提供了一个庞大的生态系统,它为我们在互联网上实现的应用提供了卓越与高质量的库。
 
比如 Spring,Akka,Tomcat,Weblogic,Dubbo ...我还能举出好几百个例子——这些都不是草台班子的车库项目,而是非凡的成就。我并不是说这些不能用其它语言来开发,但是大企业推动Java并创造了软件生态体系,这个体系需要花很多年才能达成,在一些事上,时间因素也非常重要,20年的成熟周期已经足够漫长。
 
我们也可以找到适用于多语言的特殊库,但它们很大程度上取决于大公司是不是认可这个项目。
 
比如,为Python找到好的机器学习库是件很容易的事,你不能否认Google在其中发挥的作用; 借助Facebook,你可以用React.js开发出优秀的Web应用程序和手机客户端应用程序。
 
JVM的地位
 
除了前面提到的庞大生态系统之外,Java的最大成就是JVM。虽然Java语言可能因时间而受损,但JVM看起来非常健康。
 
有人会说容器化已经消减了对JVM的需求,从某种意义上说,情况确实如此。JVM的最初目标是允许Java程序在任何操作系统上执行,但容器在这方面改变了现状,容器提供了可以在任何地方执行操作系统的模拟环境。
 
但是JVM不止于这些,它提供了内存管理和垃圾收集,安全性,基本编程库以及调试和语法检查等高级特性,这些使得JVM成为一个安全,舒适的底层运行环境。
 
“JVM非常重,而且运行很慢!”这是我收到的经典回击。JVM在内存占用和启动时间(它非常不适合面向任务的程序)上确实是这样。在性能角度来看来,20年左右的发展确实发生了一些改变。
 
有一些人使用不同语言在常用算法场景下做基准对比,如:
 
 Python 3与Java
 Node.js与Java
 Go与Java
 Erlang 与Java
 
虽然这些基准测试的数据对所涉及的语言都不是那么公平,因为算法只是故事的一部分,但结果可以清楚地告诉我们,JVM并不是一只病入膏肓的大象,它还是一杯给人活力的热腾腾的Java。
 
但是…
 
虽然JVM活得很好,但Java也在极力保持其在编程语言排名的位置。Oracle深知并努力推动Oak再次让Java变得更好。但此举能否真正阻止Java的老化过程,尚无没预料。
 
这并不是一件坏事。
 
JVM充当了创建更现代,更高效的语言平台。虽然不是很多,但它公平,有一些语言也取得了成功。
 
这是我想说的重点,皇帝并没有死,但咳嗽听起来也不太好,它的后代正在继承他的遗产。
 

 
Scala
 
我的第二个最爱语言。它是一种强大的语言,具有静态类型,支持面向对象和函数式编程。虽然目前仍未大规模采用,但它目前是掌握最具经济效益的语言之一。通常由 AkkaPlayer模型实现丰富的功能,它是 Play Framework的后端语言;
 

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

 
Groovy
 
这是一种动态编程和脚本语言,我通常称之为Java方言。Groovy广泛用于脚本编写,也是支持 Grails框架的语言。
 

 
Kotlin
 
最后一名,但不代表它不重要,这个语言是由JetBrains推出的静态类型,面向对象和功能的语言,目前是Google Android开发的首选工具。
 
我们不是在谈论Java的扩展,以上都是全新的编程语言,它们从Java中借鉴了很多东西,最重要的是,它们充分利用了JVM和Java生态系统。
 
实际上......
 
这个世界使用Java构建了大量的软件,不论你是不是同意,纵然有它的缺陷,Java仍然是一个非常适合,经过实践验证的软件开发的首选语言。
 
虽然它的作用也正转变,从The Only-Thing-You-Need,变成是画面的一部分,但它却是一个坚实的图画。
 
虽然Scala对我有超强的吸引力,但必须要说的是,Oracle和社区在改进Java方面做得是相当不错,我们都享受着这些进步与优势。
 
编程语言演变与进步的缓慢,可能表示是要被放弃,也可能是成功的标志。当一个语言被业界大规模使用时,确实应该认真对待它的重大变化,其所做的每一步都需要慎重考虑,后续影响以及向后兼容性等,一定不能掉以轻心。
 
小结
 
我有理由并相信已经在这个领域足够长的时间深刻理解Java的某些特质。
 
在过去十年中,这个空间的发展在加速,这些进步会让一些思想家变得兴奋,当他们踢出的尘土降落地面时,我们就能清晰地看到它的真实本质,合理地从中取得坚实成就。
 
如前面所说,我坚持并认真地认为,努力从这些成就中获得最大收益远比赢得胜利更加重要。
 
我对所有人,不论你是“年轻人”还是“老人”,“Java爱好者”甚至“敌人”。
 
我的建议是:
 
让我们一起享受这个美好的科技时代带来的多样性吧!
 

综合:洛逸
来源:21CTO社区


 
相关文章:
 
StackOverflow2019开发者报告:Python力压JAVA持续增长,中国开发者最乐观
 
Java和操作系统交互细节
 
学不动了!调查显示多数Java程序员不希望学习新语言
 
还有用Java开发应用程序的必要吗?
 
谷歌:甲骨文Java的胜利将扼杀软件开发,请求最高法院裁决
 

4.29_.3_.2_.jpg

 
 

评论