Java是未来的第一编程语言吗?
黄钰朝 人气:2
[TOC]
## 一、前言
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
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406201418.png)
这是大名鼎鼎的Oracle公司搞出来的开源产品,从官网这句“Run Programs Faster Anywhere”这句口号和产品的命名GraalVM就可以看出,**GraalVM是升级版的JVM。**在GraalVM上面执行Java程序的效率更高(得益于其中的JIT编译器技术)。最牛逼的地方在于,**GraalVM支持多语言应用!**在GraalVM里面,多种不同的语言可以互相传递数据,支持Java、Python、Ruby、R、Scala、Kotlin,JavaScript等多种语言。
## 三、Java帝国受到的挑战
### 3.1 后端服务器开发
![](https://raw.githubusercontent.com/misterchaos/img/master/image/20200406204314.png)
J2EE作为Java平台的重要组成部分,现在广泛应用于Web后台服务器开发领域,在这个领域,Java拥有很多好朋友,比如Spring框架,Mybatis和Hibernate等,使得开发者可以快速构建Web应用程序。这是Java帝国一块重要的领土,但也有很多挑战。**下面就是几个强大的竞争者**。
#### 3.1.1 Python 的竞争
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406213753.png)
Python语言和Java相比,具有下面这些优点:
- 语法简单直观,这意味着开发速度快
- 第三方库强大,可以写复杂的逻辑
当然Python和Java相比执行效率上肯定是更低了,因此**主要应用于小型的网站后台**,像阿里这样的大厂就是拥抱Java后台的了。
#### 3.1.2 C++ 的竞争
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406214253.png)
C++语言和Java相比,具有以下优点:
- 执行效率高
- 对内存管理自由,而Java由GC来管理
C++**适合大型高性能的服务器开发**。腾讯更多的就是使用C++进行开发,这点和阿里不同。当然C++相比Java,学习和开发的难度更高。
#### 3.1.3 node.js 的竞争
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406214653.jpg)
node.js的出现大概是前端程序员最高兴的事情了,因为node.js可以让他们写的JavaScript代码运行在服务端,这样就可以使得前端不用学Java也能自己写后台,摆脱后台爸爸的束缚(误)。得益于node.js的事件驱动机制,node.js**具有很高的并发性能,可以应对大规模的http请求**。但也有缺点,因为js只支持单核,因此没法充分利用服务器的性能,它不适合CPU密集型应用。
#### 3.1.4 Go 的竞争
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406214928.png)
Go语言是最近很火的开发语言,适合用于开发高性能分布式系统。这是一个十分强大的竞争对手,**被认为是未来的服务端语言**。它具有下面这些优点:
- 学习难度低,容易上手,易于维护
- 得益于协程,并发性能优越
- 编译型语言,执行效率高
#### 3.1.5 小结
可以看到,在后端服务器开发领域,Java在不同方面受到多种语言的竞争,轻量小型的服务器,人们可以选择Python,node.js或者PHP。而大型高性能服务器,人们可以选择C++。Go语言就更强大,兼具了比Java更简单的语法和更高的并发性能,背后又是Google爸爸。因此,在这一领域,Java面临巨大的竞争压力。
### 3.2 安卓系统应用开发
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406215209.png)
Java用于安卓应用程序开发已经是很成熟的方案了,目前绝大多数的安卓应用都是用Java写的。很多安卓程序员也都是学Java过来的。但是随着新语言不断推出,和安卓应用开发方式的演变,Java慢慢不再是安卓开发的首选。比如下面这些语言,就是比较热门的选择。
#### 3.2.1 Kotlin 成为 Android 开发的首选语言
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406220958.png)
在2019年的Google I/O 大会上,Google 官方正式宣布,**Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言**。Java 占据 Android 开发绝对统治的时代一去不复返了。Kotlin 可以编译成Java字节码,可以在JVM上面运行,也可以编译成JavaScript,在没有JVM的机器上运行。Kotlin语言比Java更安全,更简洁,随着谷歌爸爸推崇,将来的发展前景可期。
#### 3.2.2 Flutter 框架和 Dart 语言
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406223907.png)
这两个都是谷歌最近推出的东西,**Flutter是一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架,Dart是由Google开发的一门全新的计算机编程语言,而Flutter使用Dart语言开发**。Fuchsia是谷歌开发的一款全新的操作系统,Flutter 是 Fuchsia 的开发框架。Flutter编写的代码可以同时生成IOS和Android两个平台下的应用程序,因此Flutter框架逐渐热门。
#### 3.2.3 大前端时代下的H5应用
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406223806.png)
随着时代发展,现在的前端不再只是写web网页,而是逐渐发展为大前端,web,Android,IOS通吃,H5应用的流行就是一个例子,大家应该都发现,手机上开始出现快应用,小程序这些使用前端语言进行开发的app,这些应用使用HTML,JS和CSS进行开发,无需使用Java。相比之下,**H5应用轻量级,启动快,跨平台,用户体验方面也逐渐开始接近原生应用的流畅度**。因此大有流行的趋势。
#### 3.2.4 小结
这一小节介绍了安卓开发的现状,Java作为曾经的安卓开发第一首选语言,正在面临诸如Kotlin语言,Flutter和Dart语言等新的开发语言的挑战,同时,随着安卓应用开发逐渐出现H5应用的趋势,前端语言也逐渐开始来到Java的地盘。
## 四、Java不擅长的领域
### 4.1 前后端分离和JSP的没落
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406225406.png)
JSP是一度火爆的技术,Java曾对其寄予厚望,希望通过JSP技术占领web应用程序领域。然而,**随着网页开发越来越复杂,用JSP开发网页变得很麻烦,前端和后端混杂在一起,开发效率很低。**因此前后端开始分离,而JSP这种运行于服务器端的网页程序也就慢慢退出了舞台。
### 4.2 C#和.NET抢占桌面程序地盘
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406230706.png)
Java曾经也被广泛用于开发桌面客户端,其中Swing框架就是一个有名的GUI框架。然而,曾经想要扼杀Java的微软,开发了C#语言。C#成为Java的竞争对手,C#编写运行于Windows系统的桌面应用程序上具有优势,Java写的桌面应用,虽然可以跨平台到处运行,这对于程序员当然是好事,但是对于用户来说,在Windows上运行个Java程序还得安装JRE,显得十分麻烦。而且,Java桌面程序运行起来比C#程序慢。因此,**C#和.NET逐渐占领了桌面应用程序的市场。**
### 4.3 C/C++活跃的嵌入式系统领域
![](https://cdn.jsdelivr.net/gh/misterchaos/img/image/20200406232936.png)
Java曾经是为了嵌入式系统开发而设计的。然而,**Java程序员并不能直接操作硬件,并且,Java是相对教重的语言,对内存等硬件资源不友好,执行效率也相对较低。**而在嵌入式系统中,往往只有很少的内存空间,却对运行效率有很高的要求。因此,在嵌入式领域,更多的是C语言和C++甚至是汇编语言的天下。
### 4.4 小结
这一小节主要针对Java所不擅长的领域来讨论。可以看到,Java最为有名的特性“**Write once, run anywhere**”,也成了它最大的缺陷:在执行效率上做不到卓越。因此,在桌面应用程序和嵌入式系统两个领域Java不是王者。而随着时代发展,前后端分离,JSP也被时代所抛弃。
## 五、总结
综上所述,相信大家对于Java语言有了更全面的了解,看到了Java背后的芸芸众生,各种层出不穷的高级语言和新技术,和Java相爱相杀。**Java作为现在世界上最热门的编程语言,依然在各个不同的领域具有重要的地位 ,Java的强大之处在于,它十分全能,几乎没有什么是Java不能做的,但它并不都是做得最好的,我们也可以看到许许多多的竞争者在不同方面比Java语言更加优越。**
但是,我写这篇文章的目的,不在于比较各个语言的优劣,各种语言都有自己的优点和缺点,我们也不必因为某种语言更好就着急转语言。**总而言之,语言只是工具,各种语言之间,语法的差别都不是特别大,背后的原理的也是大同小异,往往只是多了几个新特性,而语言背后的编程思维才是最重要的。**
## 六、参考资料
- [TIOBE Index for April 2020](https://www.tiobe.com/tiobe-index/)
- [十分钟带你了解 Oracle 最新的 JVM 技術——GraalVM](https://zhuanlan.zhihu.com/p/106555993)
- [初识Node.js之Node与java作为后台服务器的对比](https://juejin.im/post/5d85ad0451882514eb45776e)
- [使用HTML5开发App](https://www.jianshu.com/p/82e4c7147f61)
- [Java 失宠,谷歌宣布 Kotlin 现在是 Android 开发的首选语言](https://www.infoq.cn/article/qt51vqATE7jf_bpw5ggJ)
- [Flutter开发之Dart语言基础](https://juejin.im/post/5d390d55f265da1b7638e5cb#heading-0)
- [曾经风光无限的jsp技术,为什么现在很少有人用了呢?](https://zhuanlan.zhihu.com/p/83505426)
- [10个使用Java最广泛的现实领域](http://www.codeceo.com/article/10-java-used.html)
加载全部内容