【编者按】本文作者为资深码农 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 能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

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

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

  1. java 多态缺陷

    一,会覆盖私有方法 package object; class Derive extends Polymorphism{ public void f1() { System.out.println(& ...

  2. 认识Java Core和Heap Dump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  3. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  4. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  5. Java Core和HeapDump

    什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...

  6. [转载] 常用 Java 静态代码分析工具的分析与比较

    转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代 ...

  7. 【转载】常用 Java 静态代码分析工具的分析与比较

    摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后 ...

  8. Java长存!12个Java长久占居主要地位的原因

    Java长存!12个Java长久占居主要地位的原因 我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基 ...

  9. 常用Java静态代码分析工具的分析与比较

    给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...

随机推荐

  1. paddlepaddle使用(一)

    paddlepaddle是百度提出来的深度学习的框架,个人感觉其实和tensorflow差不多(语法上面),因为本人也是初学者,也不是很懂tensorflow,所以,这些都是个人观点. 百度的padd ...

  2. 【树】Flatten Binary Tree to Linked List(先序遍历)

    题目: Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 ...

  3. 转载:Spring学习总结

    地址:http://www.cnblogs.com/best/tag/Spring/

  4. android studio生成aar包并在其他工程引用aar包

    1.aar包是android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...

  5. protocol buffer开发指南

    ProtoBuf 是一套接口描述语言(IDL)和相关工具集(主要是 protoc,基于 C++ 实现),类似 Apache 的 Thrift).用户写好 .proto 描述文件,之后使用 protoc ...

  6. 用python写一个爬虫——爬取性感小姐姐

    忍着鼻血写代码 今天写一个简单的网上爬虫,爬取一个叫妹子图的网站里面所有妹子的图片. 然后试着先爬取了三页,大概有七百多张图片吧!各个诱人的很,有兴趣的同学可以一起来爬一下,大佬级程序员勿喷,简单爬虫 ...

  7. vue里面computed的运用理解

    computed 计算属性,是用来声明式的描述一个值依赖了其它的值,当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM.这个功能非常强大,它可以让你的 ...

  8. 测试使用highlight.js的代码效果

    ---恢复内容开始--- C#代码 private void NextDateUpdate(DateTime dtt) { dtt.AddDays(); Response.Write("dt ...

  9. [Linux] Linux系统(用户管理)

    Linux中有三种用户 Root用户:超级管理员 系统用户:Linux运行某些程序所必需的用户,不建议修改 普通用户:一般修改这个 使用命令groupadd,添加用户组,参数:组名称 在文件/etc/ ...

  10. 面向对象(static关键字的特点)

    static关键字的特点 * a:随着类的加载而加载 * b:优先于对象存在 * c:被类的所有对象共享 * 举例:咱们班级的学生应该共用同一个班级编号. * 其实这个特点也是在告诉我们什么时候使用静 ...