Java是未来的第一编程语言吗?

2023-10-28

点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

Thinking too much of others makes you nothing in their eyes.

把别人看得太重,结果在别人眼里自己什么都不是。

每日掏心

时间,既公平又不公平因为每个人的心态不同心境不同。

来自:YC | 责编:乐乐

链接:cnblogs.com/misterchaos/archive/2020/04/06/12650643.html

程序员小乐(ID:study_tech) 第 862 次推文  图源:百度

往日回顾:看完这篇还不了解 Nginx,那我就哭了!

     

   正文   

一、前言

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开发(通过VS的 Visual Studio Live Share ,可以关联到VS code上面的Java项目,协同编程,间接地支持了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

  • 十分钟带你了解 Oracle 最新的 JVM 技術——GraalVM

  • 初识Node.js之Node与java作为后台服务器的对比

  • 使用HTML5开发App

  • Java 失宠,谷歌宣布 Kotlin 现在是 Android 开发的首选语言

  • Flutter开发之Dart语言基础

  • 曾经风光无限的jsp技术,为什么现在很少有人用了呢?

  • 10个使用Java最广泛的现实领域

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入订阅号程序员小乐技术群,在后台回复“加群”或者“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

HTTP 无状态中的 "状态" 到底指的是什么?

StackOverflow 上面最流行的 7 个 Java 问题!

一次关于 MySQL 索引优化的思考,看了都说好!

关注订阅号「程序员小乐」,收看更多精彩内容

嘿,你在看吗

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java是未来的第一编程语言吗? 的相关文章

  • 离散型制造企业如何选择MES系统?

    随着MES系统越来越被企业重视 并被运用到很多制造业中 MES对于制造企业来说 其所需要的要求是各不相同的 比如离散型制造企业 该如何选择MES系统呢 什么是离散型制造企业 离散型制造企业的产品往往由多个零件经过一系列并不连续的工序的加工最
  • EFM32 硬件I2C通讯案例

    前言 最近项目上用到了EFM32HG222F64G芯片中的硬件通讯 i2c通讯不稳定问题 导致花了很长时间去解决 走了不少弯路 最终还是解决了 在此写一下 做个记录 也方便给后面做产品的攻城狮 少走一些弯路吧 好了 进入正题 来个直接点 直
  • dayjs时间处理库的基本使用

    1 获取当前时间 let a dayjs 2 时间格式化 let endTime dayjs format YYYY MM DD 3 获取当前时间之前的时间 day js可以轻松获取N小时 天 月 年前等时间 如以下代码获取的是14天前的时
  • java连接数据库的查询方法(一个方法查任意表,任意字段)

    目录 前言 1 普通查询方法 1 1实现步骤 1 1 1预加载 1 1 2通过驱动管理器获取Connection对象 1 1 2通过Connection对象来创建命令对象 1 1 3通过命令对象获取结果集 2 不普通的查询方法 2 1获取类
  • 原型的价值与注意事项

    原型的价值 对于产品经理来讲在工作中原型的价值主要体现以下三个部分 在原型设计阶段花费的时间 可以避免额外的工作 节省总体时间 精力和成本 原型是展示 讲述 体验之源 常用于做早期评审 以确保你的想法符合目标市场 相对于文档 产品原型更加有
  • codemirror 部分配置信息 中文解释

    介绍 CodeMirror是一款在线的支持语法高亮的代码编辑器 官网 http codemirror net 下载后 解压开到的文件夹中 lib下是放的是核心库和核心css 模式下放的是各种支持语言的语法定义 主题目录下是支持的主题样式 一
  • r语言练习题3

    r语言练习题3 选择题练习 1 创建R 的数据框的函数 2 R中和 或非分别表示为 3 round 3 475 digits 2 返回值为 4 用R语言绘制直方图的命令 4 1用R语言绘制柱形图的命令 4 2用R语言绘制饼图的命令 5 R中
  • 如何写好技术方案

    一 前言 作为一个技术开发者 特别是高级 资深开发 架构师等 往往会遇到根据需求撰写技术方案 那么如何撰写一篇好的技术方案设计 我们今天就来聊一聊这个话题 二 技术方案是否有必要 答案是肯定的 我见过太多由于前期规划不到位 甚至是没有技术方
  • WebGL解决中文字体过大的问题

    最近公司项目要转成Webgl格式 打包测试后发现会把字体文件一同打包进去 导致打包文件很大 打包了一个空场景 使用的字体是Window自带的微软雅黑 字体占用空间很大 后来发现Unity有一个自带的TextMesh Pro 也可以进行文字输
  • 在已安装windows11环境中利用EasyBCD引导安装Ubuntu22.04(无需U盘)

    一 下载 1 下载Ubuntu 放到C盘 官网下载https ubuntu com download desktop 2 下载EasyBCD 链接 https pan baidu com s 1 KDr6kmVKH2u43W6XKYURg
  • 随笔篇----比特的传输

    琐碎的知识又增加了 这是我觉的比较有意思的科普 解开了一些生活中的小疑问 例如 电话 网页 电视 这些信号怎么传递的 人们怎么就成了千里眼 顺风耳 本文目的为 简单科普我们生活周围的信息是如何传递 如果学过通信的朋友可以略过啦哈 关键词 A
  • 软件测试阶段的风险

    1 需求风险 2 测试用例风险 3 缺陷风险 4 代码质量风险 5 测试环境风险 6 测试技术风险 7 回归测试风险 8 沟通协调风险 9 其他不可预计的风险 软件测试常见的风险 主要有以下几点 1 需求风险 对软件需求理解不够准确 导致测
  • pyinstaller打包执行文件报错NameError: name ‘defaultParams‘ is not defined问题解决方案

    老猿Python博文目录 https blog csdn net LaoYuanPython 一 问题 最近在执行以前打包的一个PyQT程序时报错 错误信息如下 F coffeDog videoToGif dist video2Gif gt
  • 本地资源加载不了 file:// net::ERR_UNKNOWN_URL_SCHEME

    本地资源加载不了 file net ERR UNKNOWN URL SCHEME 解决 开发环境使用tsFile 生产环境使用file
  • 用git创建空白分支

    用git创建空白分支 许多时候 需要添加的分支的代码与原来的代码没有一点关系 若是我们创建分支的话 则会继承master原来的东西 此时可以创建一个空白的分支 git checkout orphan test 这个时候会有许多无关文件存在
  • arp攻击实验(一)用一条指令让对方瞬间无法上网

    前言 本实验主要是利用局域网主机在进行2 3层通信时 协议上的漏洞 利用ARP欺骗 造成局域网内主机通信的失败 本文摘自 泰泰博客 www taitaiblog com 更多相关资源可访问该网站 实现原理 其主要原理是局域网内的 攻击机 通
  • centos 7 中的对文件的基本操作

    在文件夹中创造文件 touch 未创建前 在当前文件夹创建后并查看 创造文件夹 mkdir 未创建前 创建之后并查看 如果需要一次创造多个文件夹时 需要用到参数 p 递归创建文件夹 并用命令tree查看文件的结构 文件的复制 cp 复制te
  • [转]OpenSynergy的COQOS Hypervisor SDK-实现仪表和车载信息娱乐系统共享显示

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com OpenSyn
  • python3[爬虫实战] 使用selenium,xpath爬取京东手机(上)

    当然了 这个任务也是从QQ群里面接过来的 主要是想提升自己的技术 一接过来是很开心的 但是 接完之后 写了又写 昨晚写了3小时 前提晚上写了2小时 搞的有些晚了 搞来搞去就卡在一个地方了 希望懂的大神们多帮忙指点一下 使用selenium
  • chatgpt赋能python:Python重写父类方法:在OOP编程中的应用

    Python重写父类方法 在OOP编程中的应用 在Python的面向对象编程范式中 继承是一种非常重要的概念 当我们声明一个类时 我们可以通过继承来扩展类的功能并避免重复编写代码 在这个过程中 很可能你会碰到需要重写父类方法的情况 本篇文章

随机推荐

  • java输出1-100之间不能被5整除的数,每五个一行

    public class HomeWork06 public static void main String args int count 0 for int i 1 i lt 100 i if i 5 0 System out print
  • 剑指 Offer II 033. 变位词组&剑指 Offer II 035. 最小时间差 -做题总结和心得(剑指offer进阶-哈希表部分)

    剑指 Offer II 033 变位词组 该题解法是hash sort 答案是评论区大佬写的 大体思路 创建一个哈希表 再将每个字符串变成字符数组 排序后若哈希表里不存在排序后的字符串 则创建索引 然后将原字符串放进对应索引的数组里 cla
  • cartographer 代码思想解读(7)-位姿估计器PoseExtrapolator实现

    cartographer 代码思想解读 7 位姿估计器PoseExtrapolator实现 pose extrapolator类定义 插入IMU数据 AddImuData 插入里程计数据 AddOdometryData UpdateVelo
  • Plotly可视化:TypeError: box() got an unexpected keyword argument ‘box_color‘

    一 问题描述 我用Plotly库进行可视化 import plotly express as px category orders month stage month end month middle month start fig px
  • C++ 鼠标点击的获取

    C 鼠标点击 首先一个比较常用的宏定义如下 define KEY DOWN VK NONAME GetAsyncKeyState VK NONAME 0x8000 1 0 使用KEY DOWN 鼠标事件 可以方便获取很多鼠标的事件 鼠标各个
  • 设计模式-----工厂模式

    一 工厂模式简介 工厂模式分为简单工厂模式 工厂方法模式和抽象工厂模式 它们都属于设计模式中的创建型模式 其主要功能都是帮助我们把对象的实例化部分抽取了出来 目的是降低系统中代码耦合度 并且增强了系统的扩展性 二 简单工厂模式 简单工厂模式
  • 【最新】如何降低深度强化学习研究的计算成本(Reducing the Computational Cost of DeepRL)...

    深度强化学习实验室 官网 http www neurondance com 论坛 http deeprl neurondance com 人们普遍认为 将传统强化学习与深度神经网络相结合的深度强化学习研究的巨大增长始于开创性的DQN算法的发
  • C# 对西门子1200PLC 的优化过的DB块进行符号寻址

    最近一直在学习C 一直想利用C 对西门子的PLC的优化DB块进行数据读取 因为S7通讯只支持绝对地址 这样的话 对PLC端编程很不友好 后来发现atvise这个小软件 发现它能够符号寻址西门子PLC 然后通过OPC转发出去 这样的话 我就在
  • 《现代密码学教程》

    第一章 密码学概论 第二章 密码学基础 第三章 古典密码体制 第四章 分组密码 第五章 序列密码 第六章 Hash密码 第七章 公钥密码体制 第八章 数字密码签名 第九章 密码协议 第十章 密钥管理
  • 对象池的简单应用

    对象池呦 对象池里只有一个预制体 队列对象池 对象池里面有多个预制体 创建和销毁的伪代码 代码 测试功能 做个预制体吧 开始测试 对象池的概念 对象池是个什么东西呢 对象池是用来管理对象的一个池子 当一个物体需要大量的创建和删除时 由于函数
  • 2021年1月,DB-engines数据库排名

    2021年1月份 排行前10的数据库分别为 Oracle MySQL Microsoft SQL Server PostgreSQL MongoDB IBM Db2 Redis Elasticsearch SQLite Cassandra
  • 7.基于STM32C8T6的四旋翼无人机的飞控制作----实践操作2,AD电路板绘制-原理图库绘制

    原理图库和封装库准备 建立对应关系 Altium上绘制电路板有三种库 还有一种是集成库 不予以介绍 原理图库和封装库都可以直接用现成的库直接添加库 也可以完全自己绘制 也可以自己绘制其中一部分 另一部分直接拷贝别的库里面的元件 原理图库sc
  • Java里的包装类型

    Java里的包装类型 其实也就那么几个 基础数据类型 包装类型 和面向过程的编程不同 Java里 一切皆对象 但是就有那么一些例外 就是常见的int char boolean float double byte short long 八大基
  • 【专注力】如何打完游戏后只用15秒就进入学习状态

    教你如何打完游戏后只用15秒就进入学习状态
  • java基础语法

    Java基础语法 注释 单行注释 注释一行 多行注释 注释多行 文档注释 标识符 字母 数字 下划线 数字不能开头 数据类型扩展及面试题讲解 整数 二进制 0b开头 八进制 十进制 十六进制表示及计算问题 如 int a 10 十进制 10
  • Linux其实也是时间管理大师——掌握crontab

    引言 欸乃一声山水绿 回看天际下中流 岩上无心云相逐 勿埋我心 做网站的哥们都有一个共同的习惯 那就备份网站的数据 现在宝塔自带的备份也还可以 但是如果自己想要定时运行自定义脚本呢 那就需要用到Linux的时间管理大师了 crontab L
  • eigen常用操作

    基本操作 Eigen Matrix
  • TCP/IP协议栈模型分析

    一 TCP IP协议 标准TCP IP协议是用于计算机通信的一组协议 通常被称为TCP IP协议栈 以它为基础组建的互联网是目前国际上规模最大的计算机网络 正因为互联网的广泛应用 使得TCP IP成为了事实上的网络标准 TCP IP传输协议
  • 大数据——Java 知识点整理

    1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java开发工具包 提供了java的开发环境和运行环境 JRE Java Runtime Environment 的简称 java运行环境 为ja
  • Java是未来的第一编程语言吗?

    点击上方 程序员小乐 关注 星标或置顶一起成长 每天凌晨00点00分 第一时间与你相约 每日英文 Thinking too much of others makes you nothing in their eyes 把别人看得太重 结果在