0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Java为什么一直在编程语言榜首

Wildesbeast 来源:今日头条 作者:软帝学院 2020-02-17 15:17 次阅读

我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值。就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基本这么形容:没价值,腥臭,过时了,对你没好处。Java 作为现代猿的中坚力量在这点上可能会成为下一个COBOL。

有关JAVA的技术卖出多少本书已经是一个很久远的记忆了。现处中年时期的Java语言的用途已经不再出现在各种杂志的封面上了。JAVA从出生到现在已经19年了,应用开发圈已经开始绕着那些更有吸引力的如“Node.js”,"Objective-C","Dart","Go" 等等类似的新技术转圈了。Java? 那是Web 1.0时代的一个传说吧?

从Dice.com网站的招聘信息你就可以知道押宝在哪。跟iOS相关的开发有2500左右的招聘,Java则有17000多个。Dice的数据不一定能完美的衡量技术的价值,但是在不断推陈出新的技术推广压力下,Java职位是iOS的7倍之多可以说确实是神器了。

也许,相比把私人开发App的收入的30%分给Apple并期盼(更多的是等死)你的App有一天爬上了Top-25List,Java开发可能会给你一个更好的商业计划。但是实际上,Java一直都要面对一个比怎么玩鸟砸猪还要大的问题。那就是如何在任意平台上建立统一平台并流畅运行的问题。这样服务端程序猿,客户端程序猿,嵌入式程序猿所面对的那些平台不统一的问题都得到了解决。

在我们忘记Java在计算机行业里所扮演的角色和做出的那些卓越贡献前,这里有12个绝对的理由来告诉你Java不但不会和COBOL一样被堙灭,并且在其后时代中更加壮大。

换句话说:别说这是Java的逆袭,Java一直就在,并且其地位无法撼动。

一、在政治(通常手段低劣)斗争中不屈不挠

开始时,技术界从来没认为Java会成功,因为它的对手太多而且都是“土豪”。尽管如此,Java还是繁荣发展起来。那些诧异Java仍然存在的人们,一定是花了太多时间听那些对Java怀恨在心的人,而没有花时间去理解为什么Java会成功。

微软是Java第一个面对的强大对手,因为那时MS-DOS提供了通用性,而微软看到Java是此通用性最具可能性的替代者。Redmond从一开始就对Java恶评不断,从每个可能方面与其斗争(译注,Redmond,雷德蒙德,是微软总部所在地,此处代指微软公司)。在桌面应用方向,Java从来没有找它需要的发展推动力,部分是因为强大的Java虚拟机启动时需要花费太长时间。尽管有些启动延时,Java应用在Window平台上还是可用的。
由于一些不明原因,Steve Jobs(译注,史蒂夫·乔布斯)从来没接收过Java,即使是在Mac被除了Adobe之外所有人忽视的年代。Java的兼容性可以带来很多有用的代码,但是Apple一直未把Java视作第一选择。(的确,iOS智能手机比起我用的Android更流畅,所以也许Steve是对的。)

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

尽管这些原因,尽管Java创造者也在Java发展中有许多失策之处,Java依然快速壮大,在服务器应用领域如鱼得水,硕果累累,在桌面应用领域满足基本业务需求。所有技术都需要在政治湍流中前行,但是Java走的更难也更远,证明了,通常,Java对许多应用都是一个优良选择。

二、线程的魔力

Java虚拟机的强项之一是多线程控制。JVM针对大型多核机上跑数百线程的稳定性做了极佳的优化。这也是为什么其他语言会为了能跑在JVM上面搞出交叉编译器和模拟器。

Java的这个能力同时也吸引了很多高流量的网站。他们可以在台式机上搞开发然后丢到服务器上让JVM发挥出多核的功效。

Ruby 因为语法的简洁和源码可读性好成为了Java目前的一个对手。但是当性能成为瓶颈时,Ruby开发人员转到了JRuby,一个用Java模拟出来的Ruby环境并增强了高负载下的线程处理能力。Sun的老猿们在细节上的处理让JRuby大受欢迎。(译注:好像多数人都是写完Ruby程序然后用JRuby打成war丢服务器上....)

三、Java是初学者的语言

宗教,军队和国家兴旺都离不开对国人少年时期的洗脑。作为大学AP计算机课程(译注:高中生可修并计入大学学分的课程。由美国大学理事会提供,就是负责美国SAT的那个机构)意味着很多学生第一次接触到的计算机语言就是Java。由于这个先入为主的原因,当他们学习其他新的语言时,他们会反观Java的优点和缺点,就算大部分转行学其他语言了--虽然大部分学生修完课程就把Java丢一边了--但是他们在思考的时候仍会受到Java的影响。

Java作为一个教学语言是有它的原因的。有些幼猿不喜欢声明数据类型,认为好像有人让你穿个背带裤又要系皮带一样是多此一举的行为。这个看上去可能比较抽象,但是为了能让幼猿们理解计算机的一些原理,这是一个很好的方法。让幼猿在写代码的时候声明数据类型,然后编译器会告诉他们数据类型不匹配而无法编译时可以让他们更好的理解计算机的底层原理。
一些所谓时髦的语言已经摒弃了花括号,因为他们觉得维护它们很麻烦。这也许是对的,但是花括号对那些新手是非常有用的,因为这能帮助他们理解嵌套的代码块。花括号帮助新人拆解所有的嵌套。

有些人想努力推广他们自己的语言,在大多数情况下,他们心爱的语言更自由,并没有像java那么多的限制和规则。他们有一个非常好的想法,但是他们忽略了这么一个事实,就是越简单,越干净的语法会在后期开发中出现明显的问题。一些人觉得这种“穿个背带裤又要系皮带”方式让人窒息,但是java在一开始就推动更好的编程习惯。当新手经过好的训练后,他们就可以处理这种自由和危险的编程方式了。

四、跨平台兼容性(已经很接近了)

虽然Java并不是第一个提供跨平台兼容能力的语言,但是Java已经成为最受欢迎的(跨平台语言)。这并不是说Java是完美的——缺少的一个库或者一个版本不匹配的库都会导致程序崩溃。你也不能把使用最新的JRE 1.7编译的需要使用大量内存的桌面程序放到一台Java ME手机上运行。Java并不是那么兼容。

但是Sun以及现在的Oracle已经为程序可以跨平台使用做了最大的努力。当程序(不能在多个平台上)使用时,(导致这些问题的)原因通常是可以弄懂的。如果你使用合适的Java版本,并且确保有足够的内存,那么,(程序)一般可以正常工作。Java程序员可以使用他们的桌面开发工具进行编码,并部署到目标设备,可能是一台手机或者一台服务器。如果编译器包含了正确的库并且使用了正确的版本,代码就可以运行。这是一个很可贵的(特性)。

五、在小芯片上的持续成功

Java也许从没有在桌面领域造就过大型的应用程序,但它却在移动世界中找到了一片温床 —— 这是一个爆发了的细分市场。Android平台从上到下都是基于Java构建起来的,并且它如今的销量轻易的超过了iPhone

这一霸主地位并不是新晋的。JAVA ME作为精简版的语言和VM已经被广泛应用在许多所谓功能手机之上,那些智能手机在全世界的数量也几乎数以百亿计。

当你将它们都混合到一起,Java的优势是就是惊人的。

六、蓝光(Blu-ray)

Java曾经被称为“Oak”,是为机顶盒而设计的语言,Sun想在占据此市场。事情没有完全按照计划发展,但是Java却在“客厅”中找到了合适的位置。蓝光标准是围绕Java建立的,任何想在蓝光光碟中添加额外内容的人,必须得到其Javac编译器版本。

蓝光光碟不止限于存放视频内容。那些额外特性和交互工具可以使用纯Java代码修改并增强。蓝光光碟是压缩后的视频和压缩后的Java字节码的混合。使用蓝光标准,你可以实现不少功能。

七、花括号正好能工作

那些像Ruby、Python或CoffeeScript等时髦语言的爱好者们开心的蔑视Java(和C)是怎样的要求程序员们反复敲打花括号键来明确表达代码段的开始和结束。括号、花括号、甚至方括号——都是这些人深恶痛绝的。(我本人也非常讨厌它们,但我仍然怀念有一些类型的Lisp语言让你使用一个方括号结束所有内容的编程方式。)

但是改变标点符号并不能消除复杂性。如果有用,它也只是隐藏或者掩饰了复杂性。使用像制表符等空白后你只能用直觉去感受那些无法看到的东西。如果if语句只引导了一行代码,这样不会有问题,但是当很多层嵌套时,就很难看明白。当我用Python编程时,我发现自己在反复数这些缩进。只是因为这样看起来像英文,并不意味着它像理解一句英文那么简单。

八、Groovy

假如Java开发者必须要有一个带有动态类型的更清洁更简单的语法,他们没必要去运行一种新奇的语言。他们可以使用Groovy,一个带有预处理器的整洁的利器,它能够生成出Java字节码来。这种语言也完全集成到了Java中,因此你可以在你的Groovy中混入对Java库的调用。就像是编写Java代码的缩略形式。

这一灵活性让开发工程师得以找到问题的出路。当然Groovy是慢——这通常是在使用了动态方法调用的时候 —— 开发者可以一直用Java来重写重要的费时的核心操作。

九、Java虚拟机

Java虚拟机是按照运行Javac编译器产生的那些代码来的目的来设计和优化的,但是某个时候开始,开发者们意识到Java虚拟机也可以运行其他代码。只要编译器们产出标准的Java字节码,Java虚拟机根本不关心是使用的那种编程语言。Haskell、Scala和Clojure的开发者们按这个方式设计他们的编译器搭上了Java这趟快车。而且他们只是这个由Java虚拟机产生的生态圈中几个比较优秀的代表。

吸引力是显而易见的,Sun/Oracle为创建跨平台环境而努力,所有其它人从中受益。Sun/Oracle的工程师们消除平台间差异,并考虑兼容性问题,然后所有人可以运行他们想运行的程序。

微软在创建C#时借用(并扩展)了这个创意,为大部分主要语言设计了编译器,这样C#虚拟机就可以运行这些语言编写的所有程序。C#程序员说他们可以用很多不同的语言编写程序,只要通过一个Windows盒子将其运行在一个虚拟机上即可。何等灵活!

十、NoSQL革命很大部分建立在Java之上

很久之前,数据库是一个神秘的黑盒子,它保存信息并快速有效的应对查询请求。然后NoSQL革命来临,程序员们意识到他们可以自己编写自己的数据库,并根据需求修剪其代码。那些最重要的NoSQL工具中很多都是用Java编写的。Cassandra、Lucene、ElasticSearch、HBase和Neo4J只是一些经常提到的NoSQL选择。然后还有一些像acid-state等程序,使用Haskell编写并运行在Java虚拟机中。

这些工具通常是开源的,可以方便的集成。一些开发者将其独立运行,另一些人将它们集成在自己的模块比如库中。不论哪种方式,Java在数据库层中成为通用语言的情况,保证了Java开发者们的生活更简单了些。 他们更少担心由于字符编码和行结束符带来的小故障。这意味着Java开发者们可以享受由NoSQL革命带来的丰硕果实。

十一、Minecraft游戏融入00后们的共同情结中

也许布鲁克林时尚的非主流们对Java嗤之以鼻,但是Java程序员们却领先一步。在Ruby时尚团正聚集起自己的一群粉丝时,他们之后的一代人却爱上了Java。为什么?一个词:Minecraft。它用Java编写而成。如果孩子们想要扩展该游戏,他们就需要学习Java来设计其插件。这保证下一代程序员第一个学习的是Java。

十二、开源

Sun一直是开源领域中的领导者之一,但它却在完全开放Java的过程中时有犹豫。但这并没有妨碍Java程序员们发布很多伟大的有着宽松开源许可的库和项目。Apache项目一直都在使用一个没要求太多回报的许可证来提供优秀的Java代码。

Sun在2007年完成了在GPL许可下公开大部分代码的工作,从那时开始,它和它之后的新主人Oracle想努力成为它认为的Java的合格管家。当然,这种开放的立场并没有阻止Oracle将Google拖入一场混乱的法律诉讼中,但是另一方面,Java平台很大程度是开放和免费的。

讨厌它的人很多,但Java持续前行

的确Java有它自己的问题,而且讨厌的Java人们也会越来越多, 并将他们的不满情绪充斥在线上评论区中。Java垃圾回收器会引起程序的小抽风。程序书写规则繁重,也并不能阻止那些确实差劲的代码。注解(译注:annotation)太复杂。各个特性也不如之前演进的频繁。花括号增加混乱。其缺点列表很长,但是通常是合情理的。

然而目前还没有出现一个广度和深度上可与之竞争的对手。虽然一些抱怨很容易解决,但是解决方案本身会带来自己的问题。最接近的也许是JavaScript,依靠有闪电般速度的Node.js,它在服务器领域越来越有吸引力。不过这些创意可以被复制,程序员们也可以用其来编写快速的Java。这是Java的优势之一:它运行所有程序,而且接受改变。如果你需要不同的功能,你可以将大部分库替换成自己的代码。语言是开源的而且灵活多变。不论语言和平台有什么限制,都可以相对轻松的解决。这意味着Java程序员继续是最具生产力的人员之一。即使相关图书不在能再占据畅销榜,软件更新也没之前频繁,Java将依然存在甚至更加兴旺。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2953

    浏览量

    104504
  • iOS
    iOS
    +关注

    关注

    8

    文章

    3393

    浏览量

    150386
  • 编译器
    +关注

    关注

    1

    文章

    1617

    浏览量

    49021
收藏 人收藏

    评论

    相关推荐

    对比Python与Java编程语言

    Python与Java都是目前非常流行的编程语言,它们各有其独特的优势和适用场景。以下是对这两种编程语言的对比:
    的头像 发表于 11-15 09:31 124次阅读

    ASCII码在编程中的应用实例

    ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)在编程中有着广泛的应用。以下是些ASCII码在编程
    的头像 发表于 11-10 09:43 194次阅读

    C语言Java语言的对比

    C语言Java语言都是当前编程领域中的重要成员,它们各自具有独特的优势和特点,适用于不同的应用场景。以下将从语法特性、内存管理、跨平台性、性能、应用领域等多个方面对C
    的头像 发表于 10-29 17:31 171次阅读

    C语言与其他编程语言的比较

    C语言作为种历史悠久的编程语言,自其诞生以来,一直在软件开发领域扮演着重要角色。它以其高效、灵活和可移植性强的特点,成为了系统级
    的头像 发表于 10-29 17:30 156次阅读

    单片机烧录程序时为什么一直在检测

    单片机烧录程序时,如果软件一直在显示“正在检测单片机”,可能是由多种原因导致的。以下是些常见的原因及其解决方法: 1. 连接问题 USB转串口接触不良 :检查单片机与电脑的连接是否稳定,可以尝试
    的头像 发表于 09-02 09:57 2931次阅读

    华纳云:java web和java有什么区别java web和java有什么区别

    Java Web和Java是两个不同的概念,它们在功能、用途和实现方式上存在些区别,下面将详细介绍它们之间的区别。 1. 功能和用途: – Java
    的头像 发表于 07-16 13:35 653次阅读
    华纳云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别

    modustoolbox3.0打开不了设备配置器 ,一直在转圈圈怎么解决?

    我的modustoolbox 打开不了设备配置器 ,一直在转圈圈。我尝试卸载重装,但是并不能解决我的问题
    发表于 07-04 06:46

    华为自研仓颉编程语言引领全场景智能编程新纪元

    在科技飞速发展的今天,编程语言作为软件开发的基石,其创新与突破一直备受瞩目。近日,华为开发者大会论坛上传来了则振奋人心的消息:华为自研的仓颉编程
    的头像 发表于 06-22 11:30 894次阅读

    英伟达为什么越涨越便宜?英伟达的市盈率一直在下降?

    英伟达为什么越涨越便宜?英伟达的市盈率一直在下降? 在2023年英伟达的股价涨了两倍多;龙年开年之后,英伟达股票继续猛涨,2024年以来英伟达的股价上涨超过87%。 但是为什么分析师说英伟达越涨越
    的头像 发表于 03-12 18:02 1632次阅读

    一直在调pmsm无速度的仿真,但是波形总是不对是为什么?

    一直在调pmsm无速度的仿真,但是波形总是不对,转速甚至是负的。。。用的反电势积分法。就是目前能正转了。但是仅限于空载情况下某个特性参数下才会出现正转,速度一直是且封顶900(可能是电机参数关系
    发表于 02-06 06:49

    四种编程语言之间的区别和联系

    编程语言种人与计算机之间进行交流的方式,不同的编程语言有着不同的特点和用途。本文将对四种常见的编程
    的头像 发表于 02-05 14:16 1406次阅读

    c语言,c++,java,python区别

    C语言、C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言: C语言
    的头像 发表于 02-05 14:11 2180次阅读

    LTC3265正输出端只有10V,负输出端一直在跳变是为什么?

    按照这个原理图搭建的电路,正输出端只有10V,负输出端一直在跳变
    发表于 01-08 07:55

    SIMCom,一直在路上

    发展。 芯讯通从成立之初就开始了国际化征程,出海二十几年来一直与走向国际市场的无数“中国方案”和“中国故事”共同前进发展。值此之际,和大家聊聊在与“路”息息相关的数字基建、智慧
    的头像 发表于 12-16 16:05 485次阅读
    SIMCom,<b class='flag-5'>一直在</b>路上

    java程序必须以什么为文件扩展名

    Java种高级编程语言,由Sun Microsystems(后来被Oracle收购)开发并首次发布于1995年。Java
    的头像 发表于 11-29 14:24 1040次阅读