一、前言

Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,那它是否还能在未来保持领先的优势呢?本文就主要从Java语言所不擅长的领域,以及它在自己的领土内受到的对手入手,聊一聊Java语言在未来所面临的挑战。

二、Java帝国的今天

2.1 依然霸占TIOBE热门编程语言的榜首

这是来自权威开发语言排行榜TIOBE的最新数据(截止到2020年4月),可以看到Java语言依然在语言排行榜霸占第一的位置!虽然下面Python小老弟近几年搭上大数据的热潮,发展实为迅猛,在其他一些排行榜上面甚至超越大哥,但是在TIOBE这样权威的排行榜上面,Python依旧是小老弟!

2.2 曾经想扼杀Java的微软宣布加入OpenJDK

这又是一个IT界的真香现场,Sun 公司曾以“歧视使用 Java 软件”为由起诉微软。而微软在2001年推出新版操作系统 Windows XP 时,故意不安装 Java 软件,并且推出高仿 Java 的语言 C# 和 .net 框架。在现在,微软却宣布加入OpenJDK,拥抱Java技术。微软的宇宙第一 IDE Visual Studio也开始支持Java开发。

2.3 Oracle发布开源全栈虚拟机GraalVM

这是大名鼎鼎的Oracle公司搞出来的开源产品,从官网这句“Run Programs Faster Anywhere”这句口号和产品的命名GraalVM就可以看出,GraalVM是升级版的JVM。在GraalVM上面执行Java程序的效率更高(得益于其中的JIT编译器技术)。最牛逼的地方在于,GraalVM支持多语言应用!在GraalVM里面,多种不同的语言可以互相传递数据,支持Java、Python、Ruby、R、Scala、Kotlin,JavaScript等多种语言。

三、Java帝国受到的挑战

3.1 后端服务器开发

J2EE作为Java平台的重要组成部分,现在广泛应用于Web后台服务器开发领域,在这个领域,Java拥有很多好朋友,比如Spring框架,Mybatis和Hibernate等,使得开发者可以快速构建Web应用程序。这是Java帝国一块重要的领土,但也有很多挑战。下面就是几个强大的竞争者

3.1.1 Python 的竞争

Python语言和Java相比,具有下面这些优点:

  • 语法简单直观,这意味着开发速度快
  • 第三方库强大,可以写复杂的逻辑

当然Python和Java相比执行效率上肯定是更低了,因此主要应用于小型的网站后台,像阿里这样的大厂就是拥抱Java后台的了。

3.1.2 C++ 的竞争

C++语言和Java相比,具有以下优点:

  • 执行效率高
  • 对内存管理自由,而Java由GC来管理

C++适合大型高性能的服务器开发。腾讯更多的就是使用C++进行开发,这点和阿里不同。当然C++相比Java,学习和开发的难度更高。

3.1.3 node.js 的竞争

node.js的出现大概是前端程序员最高兴的事情了,因为node.js可以让他们写的JavaScript代码运行在服务端,这样就可以使得前端不用学Java也能自己写后台,摆脱后台爸爸的束缚(误)。得益于node.js的事件驱动机制,node.js具有很高的并发性能,可以应对大规模的http请求。但也有缺点,因为js只支持单核,因此没法充分利用服务器的性能,它不适合CPU密集型应用。

3.1.4 Go 的竞争

Go语言是最近很火的开发语言,适合用于开发高性能分布式系统。这是一个十分强大的竞争对手,被认为是未来的服务端语言。它具有下面这些优点:

  • 学习难度低,容易上手,易于维护
  • 得益于协程,并发性能优越
  • 编译型语言,执行效率高

3.1.5 小结

可以看到,在后端服务器开发领域,Java在不同方面受到多种语言的竞争,轻量小型的服务器,人们可以选择Python,node.js或者PHP。而大型高性能服务器,人们可以选择C++。Go语言就更强大,兼具了比Java更简单的语法和更高的并发性能,背后又是Google爸爸。因此,在这一领域,Java面临巨大的竞争压力。

3.2 安卓系统应用开发

Java用于安卓应用程序开发已经是很成熟的方案了,目前绝大多数的安卓应用都是用Java写的。很多安卓程序员也都是学Java过来的。但是随着新语言不断推出,和安卓应用开发方式的演变,Java慢慢不再是安卓开发的首选。比如下面这些语言,就是比较热门的选择。

3.2.1 Kotlin 成为 Android 开发的首选语言

在2019年的Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。Kotlin 可以编译成Java字节码,可以在JVM上面运行,也可以编译成JavaScript,在没有JVM的机器上运行。Kotlin语言比Java更安全,更简洁,随着谷歌爸爸推崇,将来的发展前景可期。

3.2.2 Flutter 框架和 Dart 语言

这两个都是谷歌最近推出的东西,Flutter是一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架,Dart是由Google开发的一门全新的计算机编程语言,而Flutter使用Dart语言开发。Fuchsia是谷歌开发的一款全新的操作系统,Flutter 是 Fuchsia 的开发框架。Flutter编写的代码可以同时生成IOS和Android两个平台下的应用程序,因此Flutter框架逐渐热门。

3.2.3 大前端时代下的H5应用

随着时代发展,现在的前端不再只是写web网页,而是逐渐发展为大前端,web,Android,IOS通吃,H5应用的流行就是一个例子,大家应该都发现,手机上开始出现快应用,小程序这些使用前端语言进行开发的app,这些应用使用HTML,JS和CSS进行开发,无需使用Java。相比之下,H5应用轻量级,启动快,跨平台,用户体验方面也逐渐开始接近原生应用的流畅度。因此大有流行的趋势。

3.2.4 小结

这一小节介绍了安卓开发的现状,Java作为曾经的安卓开发第一首选语言,正在面临诸如Kotlin语言,Flutter和Dart语言等新的开发语言的挑战,同时,随着安卓应用开发逐渐出现H5应用的趋势,前端语言也逐渐开始来到Java的地盘。

四、Java不擅长的领域

4.1 前后端分离和JSP的没落

JSP是一度火爆的技术,Java曾对其寄予厚望,希望通过JSP技术占领web应用程序领域。然而,随着网页开发越来越复杂,用JSP开发网页变得很麻烦,前端和后端混杂在一起,开发效率很低。因此前后端开始分离,而JSP这种运行于服务器端的网页程序也就慢慢退出了舞台。

4.2 C#和.NET抢占桌面程序地盘

Java曾经也被广泛用于开发桌面客户端,其中Swing框架就是一个有名的GUI框架。然而,曾经想要扼杀Java的微软,开发了C#语言。C#成为Java的竞争对手,C#编写运行于Windows系统的桌面应用程序上具有优势,Java写的桌面应用,虽然可以跨平台到处运行,这对于程序员当然是好事,但是对于用户来说,在Windows上运行个Java程序还得安装JRE,显得十分麻烦。而且,Java桌面程序运行起来比C#程序慢。因此,C#和.NET逐渐占领了桌面应用程序的市场。

4.3 C/C++活跃的嵌入式系统领域

Java曾经是为了嵌入式系统开发而设计的。然而,Java程序员并不能直接操作硬件,并且,Java是相对教重的语言,对内存等硬件资源不友好,执行效率也相对较低。而在嵌入式系统中,往往只有很少的内存空间,却对运行效率有很高的要求。因此,在嵌入式领域,更多的是C语言和C++甚至是汇编语言的天下。

4.4 小结

这一小节主要针对Java所不擅长的领域来讨论。可以看到,Java最为有名的特性“Write once, run anywhere”,也成了它最大的缺陷:在执行效率上做不到卓越。因此,在桌面应用程序和嵌入式系统两个领域Java不是王者。而随着时代发展,前后端分离,JSP也被时代所抛弃。

五、总结

综上所述,相信大家对于Java语言有了更全面的了解,看到了Java背后的芸芸众生,各种层出不穷的高级语言和新技术,和Java相爱相杀。Java作为现在世界上最热门的编程语言,依然在各个不同的领域具有重要的地位 ,Java的强大之处在于,它十分全能,几乎没有什么是Java不能做的,但它并不都是做得最好的,我们也可以看到许许多多的竞争者在不同方面比Java语言更加优越。

但是,我写这篇文章的目的,不在于比较各个语言的优劣,各种语言都有自己的优点和缺点,我们也不必因为某种语言更好就着急转语言。总而言之,语言只是工具,各种语言之间,语法的差别都不是特别大,背后的原理的也是大同小异,往往只是多了几个新特性,而语言背后的编程思维才是最重要的。

六、参考资料

最新文章

  1. Servlet学习笔记
  2. Sencha Architect 安装与使用
  3. mysql 动态sql语句
  4. 前端开发者应当了解的 Web 缓存知识
  5. You and your research
  6. 即时编译和打包您的 Groovy 脚本(转)
  7. 【分享】史上最全的Python电子书教程资源下载
  8. apache软件包下载地址
  9. 部署 Graylog 日志系统 - 每天5分钟玩转 Docker 容器技术(92)
  10. python田忌赛马
  11. 流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录
  12. LeetCode--No.014 Longest Common Prefix
  13. 《Inside C#》笔记(十三) 多线程 上
  14. SQL Server中的高可用性(3)----复制 (转载)
  15. LintCode: Combination Sum
  16. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
  17. MySQL<多表操作>
  18. mysql数据库----视图、触发器、存储过程、函数、事务、索引、其他语句
  19. 八大排序算法的python实现(八)简单选择排序
  20. 关于 Notepad++ 崩溃之后正在编辑文件内容被清空的致命问题的补救措施

热门文章

  1. 浏览器内核之 HTML 解释器和 DOM 模型
  2. Vue双向绑定的实现原理系列(三):监听器Observer和订阅者Watcher
  3. 网页程序迁移至微信小程序web-view详解
  4. Ubuntu几秒钟没有任何操作自动黑屏
  5. ant tree 展开key的集合
  6. Apache Tomcat 文件包含漏洞(CVE-2020-1938)
  7. JavaFX之多个FXML加载和通信
  8. requests.exceptions.SSLError报错
  9. 【BIM】BIMFACE中创建矢量文本[下篇]
  10. BJDCTF