目录
一, 前言
二, Java 帝国的今天
2.1 依然霸占 TIOBE 热门编程语言的榜首
2.2 曾经想扼杀 Java 的微软宣布加入 OpenJDK
2.3 Oracle 发布开源全栈虚拟机 GraalVM
三, Java 帝国受到的挑战
3.1 后端服务器开发
3.1.1 Python 的竞争
3.1.2 C++ 的竞争
3.1.3 node.JS 的竞争
3.1.4 Go 的竞争
3.1.5 小结
3.2 安卓系统应用开发
3.2.1 Kotlin 成为 Android 开发的首选语言
3.2.2 Flutter 框架和 Dart 语言
3.2.3 大前端时代下的 H5 应用
3.2.4 小结
四, Java 不擅长的领域
4.1 前后端分离和 JSP 的没落
4.2 C# 和. NET 抢占桌面程序地盘
4.3 C/C++ 活跃的嵌入式系统领域
4.4 小结
五, 总结
六, 参考资料
一, 前言
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 语言更加优越.
但是, 我写这篇文章的目的, 不在于比较各个语言的优劣, 各种语言都有自己的优点和缺点, 我们也不必因为某种语言更好就着急转语言. 总而言之, 语言只是工具, 各种语言之间, 语法的差别都不是特别大, 背后的原理也是大同小异, 往往只是多了几个新特性, 而语言背后的编程思维才是最重要的.
六, 参考资料
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 语言基础
曾经风光无限的 jsp 技术, 为什么现在很少有人用了呢? https://zhuanlan.zhihu.com/p/83505426
10 个使用 Java 最广泛的现实领域 http://www.codeceo.com/article/10-java-used.html
来源: https://www.cnblogs.com/misterchaos/p/12650643.html