如今,面对曾经在程序员中被各种新技术掩盖直至堙灭的技术值得怀念。犹如COBOL这当年被老程序员们尊为神器的语言如今也基本没有价值。而Java作为现代程序员的中坚力量在这点上或许会成为下一个COBOL。

  有关JAVA的技术卖出多少本书已经是一个很久远的记忆了。现处中年时期的Java语言的用途已经不再出现在各种杂志的封面上了。JAVA从出生到现在已经19年了,应用开发圈已经开始绕着那些更有吸引力的新技术。Java或许是Web 1.0时代的一个传说。

  从招聘信息你就可以知道,跟iOS相关的开发有2500左右的招聘,Java则有17000多个。数据不一定能完美的衡量技术的价值,但是在不断推陈出新的技术推广压力下,Java职位是iOS的7倍之多可以说明问题。

  在忘记Java在计算机行业里所扮演的角色和做出的那些卓越贡献前,有12个绝对的理由来告诉你Java不但不会和COBOL一样被堙灭,并且在其后时代中更加壮大。换句话说:Java一直就在并且其地位无法撼动。

Java在市场斗争中不屈不挠

  技术界从来没认为Java会成功,尽管它的对手太多但依然繁荣发展起来。那些诧异Java仍然存在的人们并没有真正去理解为什么Java会成功。微软是 Java第一个面对的强大对手,因为那时MS-DOS提供了通用性,而微软看到Java是此通用性最具可能性的替代者。

  此外,苹果Steve Jobs从来没接收过Java,即使是在Mac被除了Adobe之外所有人忽视的年代。Java的兼容性可以带来很多有用的代码,但是Apple一直未把Java视作第一选择。

  Java内部的很多斗争也给它带来了巨大痛苦。IBM喜欢Java,但是一直在和Sun斗争。IBM将其开发的优秀的IDE工具称为“Eclipse”的决定,一直没被Sun的人员欣然接受。Sun也从来没像IBM那样深刻理解商业领域。

  尽管这些原因,尽管Java创造者也在Java发展中有许多失策之处,Java依然快速壮大,在服务器应用领域如鱼得水,在桌面应用领域满足基本业务需求。

 Java虚拟机优化线程的魔力

  Java虚拟机的强项之一是多线程控制。JVM针对大型多核机上数百线程的稳定性做了极佳的优化。其他语言会为了能跑在JVM上面搞出交叉编译器和模拟器。Java的这个能力同时也吸引了很多高流量的网站。他们可以在台式机上搞开发然后丢到服务器上让JVM发挥出多核的功效。

  Ruby因为语法的简洁和源码可读性好成为了Java目前的一个对手。但是当性能成为瓶颈时,Ruby开发人员转到了JRuby,一个用Java模拟出来的Ruby环境并增强了高负载下的线程处理能力。

 Java成为编程初学者的语言

  作为大学AP计算机课程,意味着在美国很多学生第一次接触到的计算机语言就是Java。由于这个先入为主的原因,当他们学习其他新的语言时,即便转行学其他语言课程,但是他们在思考的时仍会受到Java的影响。

  Java作为一个教学语言是有它的原因的。声明数据类型看上去可能比较抽象,但是为了能让初学者理解计算机的原理,声明数据类型通过编译器会告诉他们数据类型不匹配而无法编译时,可以让他们更好的理解计算机的底层原理。而一些新语言已经摒弃了花括号,维护麻烦使得新人有所厌倦,但是花括号对那些新手是非常有用的,因为能帮助他们理解嵌套的代码块。

 Java具有跨平台兼容性

  虽然Java并不是第一个提供跨平台兼容能力的语言,但是Java已经成为最受欢迎的跨平台编程工具,Sun以及Oracle已经为程序可以跨平台使用提供支持。当程序不能在多个平台上使用时,导致问题的原因通常是可以解决的。

  Java程序员可以使用他们的桌面开发工具进行编码,并部署到目标设备,可能是一台手机或者一台服务器。如果编译器包含了正确的库并且使用了正确的版本,代码就可以运行。

 Java在移动领域上的持续成功

  Java也许并没在大型应用程序中有很好体现,但它却在移动领域的细分市场获得快速发展。Android平台从上到下都是基于Java构建起来的,并且它如今的销量轻易的超过了iPhone。JAVA ME作为精简版的语言和VM已经被广泛应用在智能手机上,而智能手机如今已经遍布在全世界。

 Java在蓝光应用取得突破

  Java曾经为机顶盒而设计的语言,Sun想在占据此市场,但是Java却在另外领域中找到了合适的位置。蓝光标准是围绕Java建立,任何想在蓝光光碟中添加额外内容的人,必须得到其Javac编译器版本。蓝光光碟不止限于存放视频内容。那些额外特性和交互工具可以使用纯Java代码修改并增强。压缩后的视频和压缩后的Java字节码的混合。

 Java让花括号能优化代码工作

  类似 Ruby、Python或CoffeeScript等语言的开发者对于Java要求程序员们敲打花括号键来明确表达代码段的开始和结束。括号、花括号、甚至方括号对于程序员略显多余。但是改变符号并不能消除复杂性,使用像制表符等空白后你只能用直觉去感受那些无法看到的东西。

  如果if语句只引导了一行代码,这样不会有问题,但是当很多层嵌套时,就很难看明白。当用Python编程时,并不意味着代码像理解英文简单。

 Java动态类型语法工具Groovy

  Java开发者必须要有一个带有动态类型的语法,可以使用Groovy一个带有预处理器的工具,它能够生成出Java字节码来。这种语言也完全集成到了Java中,因此可以在Groovy中混入对Java库的调用。就像是编写Java代码的缩略形式。

  这一灵活性让开发工程师得以找到问题的出路。在使用了动态方法调用时,开发者可以用Java来重写重要的核心操作。

 Java虚拟机让编程更加的灵活

  Java虚拟机是按照运行Javac编译器产生的代码源头来设计和优化,但开发者们意识到Java虚拟机也可以运行其他代码。只要编译器们产出标准的Java字节码,Java虚拟机根本不关心是使用的那种编程语言。Haskell、Scala和Clojure的开发者们设计编译器就采用Java,而只是这个由Java虚拟机产生的。

  另外,Sun/Oracle为创建跨平台环境而努力,工程师们消除平台间差异,并考虑兼容性问题,然后所有人可以运行他们想运行的程序。微软在创建C#时为大部分主要语言设计了编译器,使得C#虚拟机可以运行这些语言编写的所有程序。C#程序员可以用很多不同的语言编写程序,只要通过一个Windows盒子将其运行在一个虚拟机上即可。

 NoSQL建立在Java之上

  数据库是保存信息并快速有效应对查询请求。NoSQL的出现让程序员们可以自己编写数据库,并根据需求修剪其代码。那些最重要NoSQL工具中很多都是用Java编写。Cassandra、Lucene、ElasticSearch、HBase和Neo4J只是一些经常提到的NoSQL选择。

  据了解,工具通常是开源的。开发者将其独立运行,或将它们集成在自己的模块中,使得Java在数据库层中成为通用语言,保证了Java开发者们担心由于字符编码和行结束符带来的故障。这意味着Java开发者们可以享受由NoSQL革命带来的丰硕果实。

 Minecraft游戏中00后的情结

  非主流们对Java嗤之以鼻,但是Java程序员们却领先一步。在Ruby时尚团正聚集起自己的一群粉丝时,Minecraft让之后的一代人爱上了Java。它用Java编写而成,要扩展该游戏就需学习Java来设计其插件,这保证下一代程序员首选是Java。

 开源成就Java代码广泛的应用

  Sun一直是开源领域中的领导者之一,Java程序员们发布众多开源许可的库和项目。Apache项目一直都在使用一个没要求太多回报的许可证来提供优秀的Java代码。07年完成在GPL许可下公开大部分代码的工作,这种开放的立场一直延续并保证Java平台很大程度是开放和免费的。

  由此,Java有自己的问题,花括号增加混乱等缺点。但目前还没有一个广度和深度上可与之竞争的语言。最接近的也许是JavaScript,依靠有闪电般速度的Node.js在服务器领域受到广泛关注。而语言是开源且灵活多变,意味着Java程序继续存在甚至更加兴旺。

Java不会被淘汰的12个原因的更多相关文章

  1. java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10

    java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10 ...

  2. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  3. Java出现OutOf MemoryError(OOM 错误)的原因有哪些?出现OOM错误后,怎么解决?

    OutOf MemoryError这种错误可以细分为多种不同的错误,每种错误都有自身的原因和解决办法,如下所示: java.lang.OutOfMemoryError: Java heap space ...

  4. java开发师笔试面试每日12题(1)

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设计 ...

  5. Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记

    第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...

  6. 《Java 8 in Action》Chapter 12:新的日期和时间API

    在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...

  7. 《深入Java虚拟机学习笔记》- 第12章 整数运算

    Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢 ...

  8. java开发师笔试面试每日12题(3)

    1.JDK和JRE的区别是什么? Java运行时环境(JRE)是将要执行Java程序的Java虚拟机.它同时也包含了执行applet需要的浏览器插件.Java开发工具包(JDK)是完整的Java软件开 ...

  9. java开发师笔试面试每日12题(2)

    1.Volatile和Synchronized不同点 (1).volatile只能作用于变量,使用范围较小.synchronized可以用在变量.方法.类.同步代码块等,使用范围比较广. (2).vo ...

随机推荐

  1. Mysql查询语句执行过程

    Mysql查询语句执行过程   Mysql分为server层和存储引擎两部分,或许可以再加一层连接层   连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注 ...

  2. 传递 HDU - 5961 题解

    题目传送门 分析 题目大意:给一个竞赛图,将图分成两部分,判断两部分的图是否符合传递闭包,a->b,b->c,则a->c 这道题用Floyd硬跑的显然n\({^3}\)会T 如果用b ...

  3. day54 js基础

    目录 一.变量 二.数据类型 1 数值类型(number) 2 字符类型(string) 3 字符类型常用方法 4 布尔值(boolean) 5 null与undefined 6 对象 7 运算符 8 ...

  4. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  5. Celery无法注册任务的几种情况

    Celery处理异步任务使得程序不必等待任务结束就可以继续执行其它任务或返回数据结果, 在处理耗时任务如发送邮件.发送信息验证码等场景下非常适用! Celery使用方法灵活,根据具体业务有不同的部署和 ...

  6. 机器学习实战基础(三十七):随机森林 (四)之 RandomForestRegressor 重要参数,属性与接口

    RandomForestRegressor class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’ ...

  7. python 之 编码

    本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...

  8. 数据可视化实例(七): 计数图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter5/chapter5 计数图 (Counts Plot) 避免点重叠问题的另一个选择是增加点的大小,这取 ...

  9. 并发编程之关键字(synchronized、volatile)

    并发编程主要设计两个关键字:一个是synchronized,另一个是volatile.下面主要讲解这两个关键字,并对这两个关机进行比较. synchronized synchronized是通过JMV ...

  10. Kubernetes实战指南(三十一):零宕机无缝迁移Spring Cloud至k8s

    1. 项目迁移背景 1.1 为什么要在"太岁"上动土? 目前公司的测试环境.UAT环境.生产环境均已经使用k8s进行维护管理,大部分项目均已完成容器化,并且已经在线上平稳运行许久. ...