Java已死?九百万程序员说不

Java没死,事实上它拥有足够的能量让你的应用跑起来。那些对Java吹毛求疵人频繁地聚焦在一些小众问题上,总是和其他技术或者语言做些不公平的对比,这些语言并没有像Java一样得到广泛应用及长远的历史。

现在的小孩都能学Java,它在Web和企业开发中广泛被采用,特别是近些年更是有了些让人惊讶的改善,一些新特性正在筹备中。即使抛开这些最新的特性,Java仍然很酷,应用的广泛性、JVM平台背后卓越的设计、清晰的语法、拥有丰富的工具和库文件构成的生态系统。Oracle说有超过9,000,000 Java开发者(亿万的应用和设备用户),所以为什么我会听到诸如“Java正在被淘汰中”,2007年开始,Java就已经沦为“21世纪的Cobol语言”的言论?

Java平台是工程师的梦想

首先就是Java平台的存在,HotSpot JVM是一项非凡的设计,CLR(公共语言运行库)有了大量的优化,Java应用在性能上甚至可以与C相媲美,当然还有其他可选的虚拟机供可用(如:JRockit,Zing),应你的环境有特殊的需求而定。

再者,多种基于JVM的语言使得这个平台更奇妙,如:Groovy,Jython,JavaFX,Scala,当然还不局限于以上流行的语言。 Java现在包含有字节码指令:invokedynamic和java.lang.invoke包,使得JVM构建动态语言更简单,现在已经有超过50中基于JVM的语言。其中最有意思的一个是php.reboot,它的目标是保持php的哲学理念,但是移除了其中一些缺陷,而且它同样能在Android中运行。

Java是一门成熟的语言,并不适合“老人”

Java成为被批评,抱怨,诅咒的靶子,我说这门语言还没死,恰恰相反当有人抱怨Java的时候正是推广Java时机。人们总会做些奇怪的对比,好像仍然以为Java还是停留在1.4的版本,用记事本编写、需要EJB2的支持、只能用来写写简单的留言板,然后把这些用来与一个高端框架甚至是CMS来对比。

作为Java程序员,这种对比对我来说没有任何意义。更为明智的方法对比Java就得理智地选择竞争对手,看看Java vs PHP、Python或者Ruby,或者用框架Play对比Ruby on Rails,SpringMVC vs Zend Framework,有鉴于此,我觉得Java似乎根本就不适合老人。

Java 冗长吗?当然

人们常说Java太啰嗦了,减缓了运行速度。批评者矛头通常指向Java的强类型静态语言特性,缺乏前沿技术在语言中,然而,我认为他们是经过深思熟虑的,而且这正是Java良好的特性。动态语言在启动一个小项目时开始会觉得很受欢迎,但是可以考虑一下,在时髦框架及合适的工具(如:考虑用IDE代替记事本)下创建一个“Hello留言板”类型的应用,Java很简单,只是10分钟的事情,如果你想做个试验的话,使用Spring Roo再准备一个秒表,如果有需要的话。现在就可以开始繁琐的CRUD了。

想象一下,你正为移动运营商搭建一个系统,运行客户登陆网站,你不得不在后台调用各种子系统收集大量的数据,Cool框架通常分解你的程序模块而不需要匹配任何用户模型。要更多的了解建议你看看Joel Spolsky发表的一篇文章。

Java是一门强类型静态语言

强类型静态语言有很多好处,我喜欢它简单的视觉外观,我可以粗略看一段代码就知道是做什么的,它就像是可视化的用英语反馈,语言非常易读,字母混合成单词仍然可读。其它的一些好处是有强大的IDE支持,动态语言在这点一直是弊端,大项目中有强大的IDE和工具支持是无价的。

批判者的观点在Java在读文件、转换xml或迭代集合的时候缺乏表达力,但是你可以总是创建一个方法去处理这些常用的事例,或者是用FileUtils.readLines(),java语言上表达力的缺点有很多库对其支持。在Java7中能看到一些优雅的加强型功能,如自动关闭资源、siwtch语句支持String、数字类型支持下划线(强烈建议读Coin项目)。Java8承诺了更多的东西(最有意思的应该是闭包)。Java是不是在任何方面都是那么的完美无缺呢?当然不是,这就是Java8、Java9在准备阶段的原因。我个人也不喜欢那些不太优雅的核心API.是否的确将更多的事情留给平台而不是语言本身?java核心包括API进阶设计跨度长达20年,API的更新会破坏向后兼容性,有些设计太抽象,但有些还不够抽象,有些太零碎,有些根本不可思议。看看其竞争对手.NET,核心API做的很好,比如统一的通信API。Java8在Jigsaw项目的帮助下,会有所改变。

所以你值得拥有Java,正确地使用它,它是一门很棒的语言。堪比Klingon语言,它将继续改善并不会很快消失。不应把努力放在取代Java上,而是和其他JVM语言结合使用,这是最明智的,但是对我的下一个Pet Clinic还是坚持使用Java。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS中position的absolute和relative用法

static: HTML元素的默认定位方式absolute: 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位。而其层叠通过z-index属性定义。绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父…

避免流量高峰期CDN问题的10个方法

在视频流媒体中,因平台火爆而出现问题是件好事。至少,这比根本没有观众要好。\\也许你正在使用世界级的CDN,但是,在大型赛事期间,当CDN的服务器和对等点流量变得饱和的时候,一些用户还是无法享受到流畅的体…

Android应用进入爆发期 手机游戏仍是市场重心

近日,91无线发布了《91无线移动应用发展趋势报告(Android版)》。报告显示,2012年,无论Android移动应用用户下载还是开发者研发均呈爆发态势,手机游戏仍是市场重心所在。同时,Android移动应用下载…

WebService中文件传输

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端…

Django框架-Form组件

一、DjangoForm组件介绍 我们之前在html页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如验证用户是否输入,输入的长度和格式等是否正…

主席树的各类模板(区间第k大数【动,静】,区间不同数的个数,区间=k的个数)...

取板粗 好东西来的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid2665 (POJ2104)http://poj.org/problem?id2104 (POJ2761)http://poj.org/problem?id2761 题意:求区间第K大&…

分享Spring Cloud分布式微服务架构图

分布式、微服务、云架构JAVA语言开发、跨平台、高性能、高可用、安全、服务化、模块化、组件化、驱动式开发模式 从现在开始,我这边会将近期研发的springcloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友&#xff0…

Lyft Level 5 Challenge 2018 - Elimination Round翻车记

打猝死场感觉非常作死。 A&#xff1a;判一下起点和终点是否在其两侧即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x0,…

mysql用户的权限分配

2019独角兽企业重金招聘Python工程师标准>>> 因今天在分配数据库权限的时候&#xff0c;同事反映账户不能使用函数&#xff0c;遂搜集资料总结了一番关于mysql用户的权限分配。 MySQL 赋予用户权限命令的简单格式可概括为&#xff1a; grant 权限 on 数据库对象 to …

小米360口水战背后:国产手机第三态诞生

摘要&#xff1a;按照双方公布的配置信息&#xff0c;小米手机青春版为1.2G H z双核处理器&#xff0c;华为闪耀为1G H z双核。种向市场投入海量推广资金&#xff0c;以换取产品上的高利润&#xff0c;代表为步步高、金立、O PPO。南都制图&#xff1a;宋小伟 互联网入侵通信业…

线段与多边形的关系

转自周见智 介绍 最近项目中要用到有关几何&#xff08;Geometry&#xff09;方面的知识&#xff0c;程序需要判断给定的一条线段&#xff08;Segment&#xff09;与指定多边形&#xff08;Polygon&#xff09;的位置关系。这种关系分为三种&#xff1a;多边形包含线段、多边形…

解决,文件上传到 ftp 服务器,中文出现乱码问题

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 上传到 ftp 服务器&#xff0c;中文出现乱码解决&#xff0c;之前文件名 “ 网关信息 ” 始终不能正确显示&#xff0c;尝试了多种编码…

常用负载均衡策略分析

背景 一般生产环境单机所能承受的QPS压力为2w左右&#xff0c;过大的压力会导致服务器爆炸。即便是单机能够撑住2w QPS&#xff0c;一般也不会这么做&#xff0c;生产环境一般会预留50%的冗余能力&#xff0c;防止QPS因为某个热门的活动而爆炸。当QPS超过单机所能承受的压力时&…

解决- SecureCRT上运行 linux vim 命令中文出现乱码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 乱码如图&#xff1a; 这个问题是CRT的编码设置造成的&#xff0c;改一下设置就可以了&#xff1a; 1. 在当前连接上右键选择最后一个 2…

linux中操作数据库的使用命令记录

1&#xff0c;mysql 查看数据库表编码格式&#xff1a; show create table widget; 修改数据库表编码格式&#xff1a; alter table widget default character set utf8; 修改数据库表中某字段的编码格式&#xff1a; alter table widget change widget_name widget_name varc…

ICC Scenario Definition

现代先进工艺下的后端设计都是在 MCMM 情况下设计的&#xff0c;所谓 MCMM 就是 muti-corner muti-mode&#xff0c;用于芯片的不同工作模式和工作条件。 后端设计过程中&#xff0c;需要保证芯片在所有工作模式和工作条件下都能正常工作&#xff0c;工作模式一般只有几种&…

持续集成与持续部署宝典Part 2:创建持续集成流水线

2019独角兽企业重金招聘Python工程师标准>>> 在本系列文章中&#xff0c;我们将探讨在容器时代如何在基于Docker的环境中创建连贯的工作流程和流水线来简化大规模项目的部署。另外&#xff0c;我们还将详细介绍如何利用Docker和Rancher自动化处理这些工作流。 在上文…

64 装饰器函数: 母版 csrf防御机制 cookie

主要内容: 1: 装饰器函数 a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能 b: 实例: 装饰器的原理: def yue(tools):print(使用%s约一约 % tools) def wrapper(fn):def inner(*args, **kwargs):print(先准备好钱)fn(*args, **kwargs)return inner yue …

Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方案一&#xff1a;用Eclipse自带的Export功能 步骤1&#xff1a;准备主清单文件 “MANIFEST.MF”&#xff0c; 由于是打包引用了第三…

一个判断session是否过期的小技巧

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Session一直是我们做web项目经常使用的&#xff0c;以前没太注意&#xff0c;这次又细致的看了下&#xff01; 1.session其实就是一个Ma…