的确,Java存在缺陷。但是……

【编者按】本文作者为资深码农 Tim Spann,主要讲述 Java 让人无法抗拒的众多优点以及一些些缺陷。本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文。

早在90年代中期,笔者在E&Y工作时,就开始使用Java编程,那是我使用的还是Java 1.0版本。HotJava是当时唯一的书,而且只有语言规范。当时,Java是秘密的流行语言。非常前卫,比C的语法更进步,比C++更安全。可以在UNIX,Windows,Linux,Mac或set-top中运行,非常惊人。它足够强大,许多公司都使用Java编写浏览器,服务器,引擎,规则引擎,库,框架。当时的Java可谓风靡一时。现在,它的增长变缓。但是,围绕Java的开发环境(Eclipse),服务器(Hadoop生态系统),大数据,以及库的数量与规模,都是相当惊人的。

Java仍然在Android中使用(未来可能被Swift取代,但不是现在)。

JVM是强大的,运行着各种几近实时/大数据和大型的网站。数量庞大的公司仍然在企业级和Web应用中使用它。 AOL已经推出了一个非常不错的Java 8库。Spring Boot是一个很棒的快速开发Java的库。

尽管笔者所有的Spark编码都在Scala中完成,但我仍然需要Java Maven资源库。数以万计的Java库是惊人的。它们适用于Scala和JVM上的其他语言。此外,还有很多来自Lightbend 和Pivotal,强大且精简,贯彻12要素理念的微服务以及轻量级的库。

并且,很多供应商都提供Java支持:Oracle,IBM,HPE,EMC,VMWare,Hortonworks和Cloudera。新的库和出色的工具每天都在出现。如果你在GitHub搜索新的Java库和项目,你会发现很多不错的选择,涵盖了方方面面的内容。

如果你想开发物联网,Java语言到处都是。

成千上万的开发人员,数以百计的咨询公司,全球2000强中的大多数企业,都在进行Java开发,并拥有大量的Java资产。

它是拥有最新特性的最酷的语言吗?不是,但是每个Java版本都汇聚了现有语言的精髓。我喜欢Scala,Go 和Node.JS。但是,当我想写一个人人都可以阅读,能在每一个平台运行的(例如,无处不在的Tomcat)程序时,我会选用Java进行编写。每种云,每种PaaS(平台即服务),包括AWS,Google,CloudFoundry, Heroku,都支持Java。在虚拟机,服务器,笔记本电脑,Docker或Rocket容器上安装并运行Java服务器是非常简单的。使用Spring Boot,SparkJava,DropWizard,Ninja,Play等框架,你就可以编写简洁的微服务和优秀的代码。

Java是冗长的,但很容易阅读。而维护代码是编程时最重要的事情,即使你所编写的代码最终会被取代。测试代码为下一次迭代或应用发版,提供了良好的参考文档。

Java会步Cobol后尘吗?有可能,但Cobol仍在使用中。而Java至少将在企业中再流行20年。

我会使用Scala和Go,或者其他一些语言吗?当然会。Java会消失或失宠吗?短期内不会。如果Java消失了,那Android,Hadoop,IoT就得跟着消失。而实际上,你只需要一种广泛应用的语言以及会用这种语言编程的人,就够了。也许Node.JS更适合前端,Go更适合网络服务器, Scala更适合Spark。但是,对于企业而已,Java是更不容易出错的选择。虽然,的确有许多糟糕的程序员,许多混乱的代码,你甚至会指责Java没有迫使人们编写更好的代码(Scala在这方面做得更好)。但是,Java就是自由的象征。Java可以在任何平台自由运行,做任何事情,使用任何你想要的库,编写任何项目。Java仍然是大学里教授的主要语言,并且存在于很多优秀的库中,比如Stanford NLP。

笔者期待积极的讨论

Java的确存在缺陷,但这些缺陷并不妨碍它在世界上最主要的公司和系统内全天候地完成工作。

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/java-and-the-superfriends-stronger-than-one

时间: 2024-09-21 21:28:12

的确,Java存在缺陷。但是……的相关文章

可能java设计缺陷、希望高手指正错误

创建表语句 create table t_user( u_id varchar(255), u_name varchar(255), u_age Integer, u_price double(5,2), uc_id varchar(255), primary key(u_id) ); create table t_user_class( uc_id varchar(255), uc_classNo Integer, uc_funds double(5,2), uc_back varchar(2

如何使用Contemplate ThreadSafe发现并判断Java并发问题

事实证明,要发挥多核硬件所带来的收益是很困难和有风险的.当使用并发正确和安全地编写Java软件时,我们需要很仔细地进行思考.因为错误使用并发会导致偶尔才出现的缺陷,这些缺陷甚至能够躲过最严格的测试环境. 静态分析工具提供了一种方式,可以在代码执行之前探查并修正并发错误.它能够在代码执行之前分析程序的源码或编译形成的字节码,进而发现隐藏在代码之中的缺陷. Contemplate的ThreadSafe Solo是一个商用的Eclipse静态分析插件,其目的就是专门用来发现并诊断隐藏在Java程序之中

Java技术长久占居主要地位的12个原因_java

我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基本这么形容:没价值,腥臭,过时了,对你没好处.Java 作为现代猿的中坚力量在这点上可能会成为下一个COBOL. 有关JAVA的技术卖出多少本书已经是一个很久远的记忆了.现处中年时期的Java语言的用途已经不再出现在各种杂志的封面上了.JAVA从出生到现在已经19年了,应用开发圈已经开始绕着那些更有吸引力的如"Node.js","

Java Core和HeapDump

什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时可以继续运行,但有时会挂掉. 为了能够保留Java应用发生致命错误前的运行状态,JVM在死掉前产生两个文件,分别为JavaCore及HeapDump文件.   JavaCore和Heap Dump的区别 l JavaCore是关于CPU的 JavaCore文件主要保存的是Java应用各线程在某一时刻

例举Java长久占居编程主要地位的原因

我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基本这么形容:没价值,腥臭,过时了,对你没好处.Java 作为现代猿的中坚力量在这点上可能会成为下一个COBOL. 有关JAVA的技术卖出多少本书已经是一个很久远的记忆了.现处中年时期的Java语言的用途已经不再出现在各种杂志的封面上了.JAVA从出生到现在已经19年了,应用开发圈已经开始绕着那些更有吸引力的如"Node.js","

ASP.NET服务器控件之控件状态

asp.net|服务器|控件 在上一篇文章中,我们讨论了有关视图状态的内容.部分读者已经发现,如果页面或者控件禁用了视图状态,那么开发人员将无法保证利用ViewState存储的状态信息得以正常应用.这对于ViewState而言,的确是一个缺陷.为了解决这个问题,ASP.NET 2.0新增了一个技术特性--控件状态.本文首先对控件状态的基本概念进行介绍,然后通过一个典型示例,说明控件状态应用方法.需要提醒读者的是,在阅读本文,理解控件状态的之前,建议首先阅读上一篇文章中视图状态的概念. 控件状态概

JDBC API为何如何复杂

阅览JDBC的联机帮助文档时,我们往往会产生畏难情绪.特别是DatabaseMetaData接口--与Java中看到的大多数接口相反,它的体积显得非常庞大--存在着数量众多的方法,比如dataDefinitionCausesTransactionCommit(),getMaxColumnNameLength(),getMaxStatementLength(),storesMixedCaseQuotedIdentifiers(),supportsANSI92IntermediateSQL(),su

JavaFx体验

JavaOne放出来的新东西,出来也有段时间了,看了论坛和blog上的讨论,叫好.不看好的各占一半.今天就去 下载了netbean插件,按照getting startted做了一些例子.总体来说,JavaFx仍然是在awt/swing的基础上的包装,只不过用一层薄薄的性感语法包装了一把,而且这语法与javascript等脚本语言基本一致,特别是声明性的编程语法与json非常相似.据sun声称要退出一个消费者版本的jre,大概5M-9M大小,消息参见<桌面java的缺陷:面向消费者的jre>,这

16个不可不知的Linux服务器监控命令

想不想知道你的服务器到底在干什么?那么你要知道本文介绍的这些基本命令.一旦你熟悉掌握了这些命令,就为成为专业的 Linux系统管理员打下了基础. 你可以通过图形化用户界面(GUI)程序来获取这些外壳命令提供的大量信息,具体取决于使用哪一种Linux发行版.比如说,SUSE Linux就有一款出色的.图形化配置和管理工具YaST,KDE的KDE System Guard同样很出色. 不过,Linux管理员要明白的一个常理是:只有绝对必要时,才应该在服务器上运行GUI.那是由于,Linux GUI耗