Java万岁!令Java永葆活力的十二项核心因素

译文
开发 后端 开发工具
一旦那些被临时追捧的热门词汇已经不再能激起我们的兴趣,那么它们往往会快速湮没在炒作的地平线之外,甚至彻底从我们的头脑中消失。以Cobol为 例,这一时代的遗物就像是过了保质期的鱼虾,被追求时尚的技术专家们抨击为:无用、腐朽、过时而且不再适合实际需求的产物。与之同理,Java很可能成为 下一种继续留存在企业环境当中、但却被人们所遗忘的编程语言。

一旦那些被临时追捧的热门词汇已经不再能激起我们的兴趣,那么它们往往会快速湮没在炒作的地平线之外,甚至彻底从我们的头脑中消失。以Cobol为 例,这一时代的遗物就像是过了保质期的鱼虾,被追求时尚的技术专家们抨击为:无用、腐朽、过时而且不再适合实际需求的产物。与之同理,Java很可能成为 下一种继续留存在企业环境当中、但却被人们所遗忘的编程语言。

[[134495]]

遥想当年,我们还需要购买实体书来学习专业知识。在那个时候,Java已经像是人到中年、不复年轻时妖娆身姿的过气明星,根本无法再在杂志封面上占 据一席之地。自Java诞生至今的二十年中,应用程序开发领域一直迎来送往着一款又一款语言新秀,其中包括Node.js、Objective-C、 Dart、Go以及如此种种。“Java?那不是Web 1.0时代的产物吗?”

但只要对Dice.com网站上的招聘信息进行一番快速搜索,无情的事实就会给抱有上述观念的家伙来上一记响亮的耳光。在这里,我们发现与iOS相 关的就业岗位约有2500个,而Java带来的职位则多达17000个。值得强调的是,Dice.com网站列出的数字仅仅是现实中的一小部分。事实上, 相对于某些在开发者领域内被宣扬为不可阻挡的最新发展方向的编程语言,Java所能提供的工作岗位数量可达到其七倍左右。

也许这是因为Java能够给普通开发人员带来比将营收总额的30%上缴给苹果、然后双手合十静待用户在热门应用排行榜上付费购买我们的应用成果更理 想的营收实现方式。实际情况是,Java一直都致力于解决一些比帮助愤怒的小鸟击败那帮猪头天敌更为重要的具体问题。Java是多种平台的构建基础,其设 计目的在于交付一种顺畅的方式、保证软件能够高效运行在多种芯片架构之上。而这样的既定思路无疑已经帮助无数服务器程序员、客户端程序员以及嵌入式程序员 解决了大量技术难题。

为了防止时间的大浪洗刷掉我们脑海中留下的Java为计算业界作出的众多卓越贡献及其当前地位,今天的文章将列举12项明确理由,证明Java不仅将长久存在、还能够在热潮褪去之后继续保持积极而繁荣的发展态势。

换句话来说:不要误以来Java的兴盛属于什么卷土重来,它一直在这里、扮演着编程世界的主宰角色。

Java继续扮演证实角色的核心理由一:面对政治斗争(或者说肮脏的政治斗争)时的出色弹性

技术领域从来没有给Java提供一条平坦的发展道路,因为其竞争对手数量众多且装备精良。无论如何,新型编程语言总在不断涌现。很多朋友在受到反对派的言论影响、且缺乏对其成功理由的正确认识时,都会惊讶于Java为什么在如此严峻的逆境当中仍能坚强生存并不断普及。

微软公司曾经是Java的头号天敌,因为这位软件巨头仅仅是将其视为MS-DOS时代之后最值得继承的技术成果。微软方面从Java诞生之初就开始 全力以赴打压其发展。Java从来就没能在桌面系统当中获得应有的引导与推动,这一方面是因为Yava虚拟机系统的启动耗时确实有点太长。尽管存在小小的 延时,但Java应用程序确实能够在Windows平台上正常运行且发挥既定功效。

而出于某些莫名其妙的理由,Steve Jobs也从来没对Java抱有过任何好感,即使是在Mac被除Adobe之外的所有厂商排除出支持范畴时亦没有丝毫动摇。Java兼容性显然能够给 Mac带来大量应用方案,但苹果公司一直将其当成决策敲定之后才被想起的对象。(没错,iOS智能手机的使用感受确实比Android要更出色一些,因此 也许Jobs老爷的选择确实明智。)

Java阵营内部的争议之声同样不绝于耳。IBM公司热爱这款语言,但却对其生母Sun百般挑衅。蓝色巨人决定将其伟大的IDE方案命名为 “Eclipse(即月蚀)”,但这种明显在指桑骂槐的作法当然受到了Sun公司方面的抗议——唉,这帮纯技术出身的家伙当然不能理解早已玩转商圈的 IBM的想法啦。

尽管经历了这一切阻碍,Java自身的缔造者们也犯下过诸多失误,但这款编程语言仍然表现出迅猛的发展势头,并在服务器以及桌面系统的可行空间之内 找到了自己的根据地。任何一项技术方案都需要面对由政治斗争所引发的各种拖累,但从Java的发展历程来看,它的抗争无疑更有力也更持久,这也证明了 Java足以成为开发人员赖以生存的可靠技能保障。

Java继续扮演证实角色的核心理由二: 线程的魔法

Java虚拟机的一大突出优势在于,它一直有能力以轻松易行的方式处理多线程。JVM专门针对大型多计算核心设备进行了优化,且能够在毫无阻碍的状 态下频繁处理数百个线程。这种灵活性正是Java吸引到大量其它编程语言为其开发跨越型编译器及模拟器的主要理由,因为只有这样这些语言才能够切实运行在 JVM之上。

这种强大的能力同样吸引到了众多高流量网站的灼热目光。他们利用Java编写出的代码不仅能够运行在自己的台式设备之上,还可以充分利用由服务器提供的多计算核心处理能力。

Ruby属于Java所面对的现代竞争对手之一,它的主要优势在于其简洁而与英语非常接近的语法设置。然而当Ruby拥护者们需要将代码性能提升到 新高度时,他们不得不选择JRuby——一套专门用于在Java当中进行Ruby模拟,从而在高负载情况下利用多线程实现性能水平保障的版本。Sun公司 的工程技术人员们在这些细节方面给出了理想的解决方案。

Java继续扮演证实角色的核心理由三: Java适合作为开发人员接触的第一款编程语言

无论是宗教、军队还是国家,要想拥有持续稳定的发展态势,它们都必须拥有忠诚的青年群体作为依托。Java属于高级计算机科学领域的通用语,这意味 着它往往成为学生们接触到的第一款编程语言。这样的情况既有好的一面、亦有带来负面影响。不过当年轻人们日后开始学习新语言时,他们总会不自觉地将其优势 与短板同Java进行对比。即使他们最终转投其它阵营——事实上确实有很多开发人员放弃了Java——他们的脑海深处仍为Java保留着不可撼动的空间, 这毕竟是他们在探索计算机科学这片广阔天地时所迈出的第一步。

作为教授计算机科学的工具,Java拥有着诸多独特的优势。一部分程序员不愿为数据指定类型,因而会将Java称为“五花大绑”式编程方案。这听起 来似乎有些偏执,但由此培养出的良好习惯非常适合初学者了解计算机内部到底发生了些什么。在拼写数据类型的过程中,他们会思考自己为什么要这样做。接下 来,编译器会揪出他们的错误,指明哪些变量的次序存在问题。

一部分最时髦的编程语言已经彻底放弃了对大括号的使用,因为这些符号的存在会让代码维护工作变得非常复杂。这一结论也许确实无误,但对于新手程序员来说、这些大括号的存在能够帮助他们确切掌握嵌套关系。层层叠叠的括号能够帮助这些菜鸟以抽丝剥茧的方式看懂整个嵌套体系。

也有一部分技术人员更倾向于自行打造编程语言,而且在大多数情况下他们拿出的衍生语言会抛弃大部分 Java所采取的束缚与规则、从而降低其使用难度。他们的思路绝对是好的,但其中的理解误区在于,更简单、更直白的语法往往会在日后的实际使用中带来更多 难题甚至是危险。有些人认为“五花大绑”式的规则方案令人窒息,但Java确实能让我们在起步之初培养起良好的开发习惯。在经受过良好的培训之后,新人们 能够在面对极端状况时表现得更加轻松从容。

Java继续扮演证实角色的核心理由四:(足够出色的)跨平台兼容性

Java并不是第一款希望实现简单跨平台兼容性的语言,但它却是其中人气最高的选项。这并不是说Java的兼容效果堪称完美——如果存在库缺失或者 不兼容版本,那么代码仍将陷入崩溃。大家无法将自己的最新JRE 1.7代码在经过编译之后,同时运行在拥有数GB内存的台式机以及资源有限的Java ME手机上。Java的兼容性还没那么理想。

不过当初的Sun与如今的甲骨文公司在大多数情况下都带来了令人满意的跨平台兼容效果。如果兼容性无法正常起效,我们往往会发现这是由某些完全可以 接受的理由所导致。如果大家使用了正确的Java版本并确保设备拥有足够的内存,那么其兼容性肯定能得到正常发挥。Java开发人员能够利用自己的桌面系 统工具来创建代码并将其移动到目的地处——无论是一台手机还是一台服务器上。如果该编译器当中包含有正常的库并通过了版本验证,那么代码将如我们的预期般 顺利运行。这样的能力简直称得上无价之宝。

#p#

Java继续扮演证实角色的核心理由五:在小型芯片上不断获得成功

Java也许已经不可能顺利登陆大型台式设备,但其却在移动领域找到了适合自己发展的温暖环境——而这也恰好是近年来发展最为迅猛的市场区划。Android平台从上到下皆以Java作为构建基础,而且这款来自谷歌的移动系统也已经在市场份额方面轻松超越了苹果iOS。

不过别会错了意,Java在移动领域的优势可不是在现代智能手机出现后才确立的。该语言及其虚拟机的精简版本Java ME在想当初的所谓功能机上就已经得到了广泛普及,这些与智能手机非常接近的移动设备当初可是拥有着成百上千万台的销售量。

当我们将上个时代与这个时代的状况加以汇总,就会发现Java的优势已经不能用明显来形容了——简直是压倒性的。

Java继续扮演证实角色的核心理由六: 蓝光

Java曾一度被命名为“Oak”,且其设计目标在于运行在Sun公司希望统治的机顶盒平台之上。虽然其历史使命没能像Sun方面的预期那样顺利实 现,但Java却仍然在用户的起居室当中找到了更理想的运行载体。蓝光标准正是以Java为核心建立而成,而任何希望将向蓝光光盘中添加额外内容的朋友都 必须使用Javac编译器版本。

蓝光光盘的适用范围远不仅仅是充当原始视频资源的载体。我们可以利用纯Java代码编写额外功能并对现有交互工具进行修改及强化。蓝光光盘内容属于压缩视频与压缩Java字节码的混合体。大家可以利用这套蓝光标准实现不少既定目标。

Java继续扮演证实角色的核心理由七:括号机制仍有存在必要

Ruby、Python或者CoffeeScript等流行语言的拥护者们往往会对Java(以及C语言)强迫程序员一次又一次按下括号按键的方式 不屑一顾。小括号、中括号以及大括号都是这些人的咒骂对象。(我本人也不喜欢这种设定,而且很怀念Lisp的某些版本允许我们始终以中括号结尾的机制。)

不过改变标点符号的使用规则并不能够真正消除复杂性。换言之,这只不过是将复杂性隐藏或者掩盖了起来。使用空格作为标签仅仅是以看不到的方式将这些 关系从我们的直觉中剔除了出去。如果单纯只是一条用于触发单行代码的if语句还没什么,但如果涉及多层嵌套关系时、这种模糊的表达就会让人很难理解。当我 编写Python代码时,我时常发现自己需要不断复核自己的叙述思路。也就是说,单纯让代码看起来像普通英文并不意味着其真就跟英语句子一样易于理解。

Java继续扮演证实角色的核心理由八: Groovy

如果Java程序员希望拥有一套具备动态类型的简洁便利语法规则,那么他们也完全不必转而使用某种新奇的语言。他们可以使用Groovy,一套能够 生成Java字节码的完备预处理方案。这种编程语言与Java全面集成,因此我们可以在向Groovy代码行中直接添加指向Java库的调用。它就像是一 套用于编写Java代码的速记机制,便捷而有效。

这种出色的灵活性让程序员及工程师们以自己的方式解决难题。当Groovy的运行速度无法满足需求时——这种情况通常是由于使用了动态方法调用——程序员也仍然可以利用Java对其中那些导致时耗变长的部分进行重新编写。

#p#

Java继续扮演证实角色的核心理由No. 9: JVM

JVM的构建目的与优化方针主要指向由Javac编译器所生成的静态范围,但在此基础之上、开发人员意识到JVM也能够同时运行其它语言的编码成 果。由于编译器能够生成合法的Java字节码,因此JVM并不在乎所导入的代码到底属于哪种编程语言。Haskell、Scala以及Clojure的开 发人员都能够构建自己的编译器并借此投身于Java阵营之下——而且JVM中存在的显著共生问题数量非常有限。

由此带来的吸引力可谓显而易见。Sun/甲骨文公司的工作是创建出了一套跨平台环境,并让每个人从中受益。Sun/甲骨文公司的工程师们缓和了不同语言之间的差异并消除了人们对于兼容性的担忧,这样每个人都能以自己熟悉的方式将代码运行在JVM之上。

微软公司在创建C#语言时也借用了这一思路(并加以进一步扩展),同时以自己的方式构建起面向大部分主流语言的编译器方案,这样一来C#虚拟机将能 够顺利将它们纳入自身。C#程序员表示,他们能够以多种不同语言进行代码编写——同时不必担心它们无法运行在Windows设备之上年虚拟机系统当中。干 得漂亮!

Java继续扮演证实角色的核心理由十: NoSQL革命在很大程度上得益于Java

很久以前,数据库本身就是一套不可思议的黑匣子,它能够存储信息并快速高效地对查询请求作出应答。在此之后,NoSQL革命开始席卷而来,程序员们 意识到自己能够编写属于自己的数据库方案、并根据需求对其中的代码进行调整。而大部分广受好评的NoSQL工具都是由Java编写而成的。 Cassandra、Lucene、ElasticSearch、HBase以及Neo4J则是人们最常提及的几类NoSQL选项。接下来,acid- state等方案开始陆续出炉,其由Haskell所编写但能够运行在JVM环境当中。

这些工具通常属于开源方案,而且能够顺利实现整合。一部分开发人员会运行它们以处理独立任务,但也有一些会将其代码编译至自己的库等堆栈当中。在其 它情况下,Java往往作为数据库层中的通用语言,从而确保Java开发人员能够在这里以较为轻松的方式完成代码编写任务。Java开发者不用太担心由字 符编码或者线路终端所带来的小故障。换句话来说,Java开发人员可以享受到NoSQL革命所带来的现实成果。

Java继续扮演证实角色的核心理由十一:《我的世界》让千禧一代找到心灵的寄托

布鲁克林的时尚人士可能会嘲笑Java,但Java程序员群体却拥有着年轻一代的广泛支持。而且尽管Ruby等时髦语言一直在不遗余力地拉拢自己的 支持者,但仍有很多年轻人投入到Java的怀抱当中。为什么会这样?四个字:《我的世界》。这款游戏由Java编写而成。如果孩子们希望对《我的世界》进 行扩展,那么他们需要学习Java开发技术来构建相关插件。这就确保了下一代程序员们能够继续以Java作为其入门起点。

Java继续扮演证实角色的核心理由十二: 开源

Sun公司一直扮演着开源领域的领导者角色,但其对于是否彻底放开对Java的控制却一直显得比较犹豫。但这并没有妨碍Java程序员们以宽松的开 源许可为基础发布大量出色的库与项目。作为Apache项目之一,Java在许可之下不断带来可观的代码成果,但同时又不要求使用者付出任何回报。

Sun公司最终于2007年将大部分Java源代码以GPL许可进行了发布; 自此开始,该公司及其新任持有方甲骨文就一直在努力将开源作为该语言的理想归宿。当然了,公众由于甲骨文将谷歌拖入诉讼纠纷的作法而对其进行了一番口诛笔 伐,不过Java在很大程度上仍然应被视为一套自由开放的平台。

反对者比比皆是,但Java仍然奋勇前行

Java当然也有着自己的一些问题,而Java的反对者们也始终存在并在各类网络评论栏中对其大加抨击。Java的垃圾收集机制会影响到代码的运行 稳定性,而输入校正系统效果不理想、无法真正消除代码录入错误。注释系统太过复杂。目前新功能的推出节奏明显比过去慢得多。强制要求程序员使用括号令人头 大如斗。这份抱怨清单很长,而且大部分内容确实有几分道理。

然而就目前来看,还没有哪位竞争对手能够真正在深度与广度方面压倒Java。尽管前面提到的这些问题看似容易解决,但解决问题的过程往往同时也会带 来新的问题。目前与Java之间差距最小的对手可能要数JavaScript,其凭借着快如闪电的Node.js在服务器上找到了理想的施展空间。不过这 样的设计思路完全可以在Java上重新实现,而程序员们单纯依靠Java也能够获得同样出色的代码运行速度。

综上所述,我们不能忽视Java自身所具备的众多优势。作为平台,它能够承载一切开发成果且以开放姿态接受修改。大家可以将Java库中的大部分内 容替代为自主开发的代码,从而实现各类差异性功能。Java语言属于开源项目且具备卓越的灵活性。无论该语言及其平台存在着怎样的局限,其解决过程都相对 比较轻松。这意味着Java程序员们可以继续拥有最理想的生产效率。换句话来说,虽然Java的相关书籍已经无法再占据畅销书名单、其更新频率也无法与诞 生早期相提并论,但Java仍将继续生存并展现出旺盛的生命力。

原文标题:Java forever! 12 keys to Java's enduring dominance

 
责任编辑:王雪燕 来源: 51CTO
相关推荐

2015-05-25 10:56:36

IT技术周刊

2013-02-26 11:01:42

CIO信息化大数据云计算

2010-04-06 09:02:59

Solaris甲骨文Sun

2015-04-23 09:34:18

CoffeeScripJavaScript开

2019-10-11 08:58:21

Hadoop开源

2013-03-29 10:13:22

lisp编译器

2010-03-22 16:58:41

2015-11-05 10:17:42

网络工程师IT人员

2017-09-25 09:00:06

IT负责人信息化CIO

2018-01-08 07:58:51

深度学习编程人工智能

2020-08-17 07:50:09

阻塞CPU中断

2010-08-27 13:41:30

UPS

2015-03-30 14:34:08

混合云应用开发混合云部署

2017-02-05 14:49:39

2011-06-24 16:26:20

SEO

2010-03-16 15:46:23

核心交换机

2013-09-24 09:40:41

Java图形加速

2015-06-26 09:27:14

Java调用性能

2009-02-27 15:13:00

2010-09-14 09:30:04

Java多态
点赞
收藏

51CTO技术栈公众号