Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企业软件领域?

标签: java 语言 多人 | 发表时间:2013-02-23 03:20 | 作者:天光
出处:http://www.zhihu.com/rss
赞同 @pansz 的答案,java生命力源自其独特的优点。
那么我就来谈谈这些优点。

技术层面:
1. 至今为止,java是大量实际得到应用的语言中,可读性最强,最利于阅读和理解,语法最严谨和规范的语言(当然,这也可以理解为语法繁琐的另一种表述)之一,在这一点上,只有已经基本退出历史舞台的pascal可与之相提并论。而pascal并不是面对对象的,(面对对象的特点和优势我就不再赘述了,有兴趣可以查阅相关资料)。
基于这一点,产生了很多其独特的优势,例如:
  • java是目前最佳的算法及数据结构教学语言(这个位置以前曾经是属于pascal的)
  • java是传统的软件开发过程(生命周期管理)的最佳实践语言,即在传统的 “需求-设计-代码-测试” 这样的一个过程中,java是最能够最大程度贯彻和实践软件工程学的理论的。从建模设计工具直接生成代码,没有比java更出色和靠谱的了。而从代码去逆向生成的javadoc和uml也堪称经典。只有java能够在执行和操作层面,将“设计-代码”这个过程如此出色的无缝集成起来。
  • java的白盒测试方面的表现非常出色和易行
  • java在代码评审,缺陷管理,开发规范约束,大团队的协同开发方面,有着无可争辩的突出优势
其实这样的例子有很多,就不一一举述了

2. java有着目前为止,最丰富,最强大的IDE开发环境,这是历史原因形成的,包括商业因素在内

3. java有着现有所有语言中,拥有最长的产品线,适用性是最广的语言之一。从前端的app应用,到嵌入式,到web,到服务器应用

4. java拥有所有语言中最丰富的类库和代码资源

5. 至今为止,在被广泛应用的编程语言中,java依然是开发效率最高的语言。之所以使用编程语言这个词,是为了和脚本语言,以及4GL开发工具区隔开来。这些语言和编程语言相比,其适用性都有很大局限,而且后者(4GL)和OS平台紧耦合关联。事实上,近10多年来,脚本语言领域突飞猛进(有赖于web应用提供了广阔的舞台),而编程语言基本上自java之后就没有太多大的新鲜事了。

商业层面:
1. java是目前为止唯一的,在商业和开源领域都得到大力推广,推荐和使用的语言,其背后的推力是任何语言所不能比拟的。

2. java的诞生和发展,赶上了千载难逢的好机遇,历史造就了java,这里就不展开了。

======================================================================
下面补充两句,关于java与c/c++, java 与 Ruby、Python,以及企业软件。


我个人是写汇编和basic出身的,后来有大量的时间花在了C/C++上,java当年刚刚出来的时候,我正热衷于CGI和perl的编程,也就是拿java做了一个简单的applet玩玩而已。直到2005年,我才开始使用java大量得写程序,一直到今天。去年底又开始学习Ruby和rails。20多年来,我正式使用过,有产品或者产出物的其他语言和工具也很多,包括foxbase,fortran,pascal,ada,lisp,VB,delphi,PB,C#,obj-c++,lua,PHP,js等等,Python和smalltalk也研究过一下。体会和感慨其实是挺多的。


到目前为止,其实我最喜欢的工具是PB,没有之一。这和我的工作特点是密切相关的。但是PB只是一个在特定的狭窄领域做到极为出色的工具,随着时代变迁,也就慢慢退出历史舞台了。
直到目前为止,在我看来,拥有根本性的,不可替代优势的语言,只有C/C++。虽然它可能开发效率更低,体系更复杂和笨重。在许多领域,C/C++是唯一的选择,没有替代品,它的适用性,也是最广的,虽然在一些领域,它不是最佳的选择,但是也是可用的选择,哪怕是WEB领域,在一些直接和工控设备以及硬件打交道的web应用中,C CGI依然是很好甚至是最佳的选择。

java的某些优势,可以称之为接近于不可替代。前面具体的优势不复赘述,综合来说,对于目的明确,业务非常复杂的应用,需要大规模团队协同开发的,需要有复杂的设计过程的,java是毫无疑问的选择,这也是为什么java在企业应用领域大旗飘飘,傲视群雄的原因。即便像在互联网领域,类似淘宝这样有着复杂业务的公众应用,java的使用也应该是必不可少的。(具体情况我不了解,有可能是某些局部的前端使用脚本语言,但是java应该是后台的骨架)
完全用脚本类语言去构建一个类似淘宝这样的复杂系统,应该说是近乎不可能的。

现在一般谈论Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重的人,基本上是敏捷性开发的拥护者,Python和ruby的使用者,尤其是ruby和rails的粉丝。
确实,作为一个正在学习ruby的人,对ruby和rails的优点我极为赞叹,在某些WEB应用中,用ruby和rails开发其效率是java的10倍,这真的一点都不是夸张之词。简单,易学,高效,看上去很美,确实也很美。只是它的适用范围相对就要窄一些。并不是所有的应用都适合或者都能够用ruby和rails来开发的。在一些应用中,使用ruby和rails可能效果就很糟糕了。


对于java来说,Python和ruby这样的脚本语言可能就像当年java对于C/C++一样,在某些领域以其突出的优势取代它,但是在其他的一些领域,脚本语言还是不能完全取代java。就像java不能完全取代C/C++一样。要知道脚本语言的诞生,例如perl,还远在java之前。

即便如此,在web开发领域,在ruby异军突起的今天,我认为web应用开发的脚本语言领域,还远未到其终极形态。也许,类似于WEB应用领域的4GL工具,已经呼之欲出了,至少在dashcode上,我看到了苹果的这种野心。

或者我们期待一种全新的,革命性的编程语言的到来。

— 完 —
本文作者: 天光

知乎是一个真实网络问答社区,在这里可以寻找答案、分享知识,发现一个更大的世界。
下载知乎 iPhone 客户端: http://zhi.hu/ios
此问题还有 29 个回答,查看全部。
延伸阅读:
Android 为什么要用 Java 开发软件?Java 的运行效率不是很低吗?
在 JavaScript 开发中使用面向对象的编程方法,会比用面向过程的方法效率低吗?

相关 [java 语言 多人] 推荐:

Java跨语言调用实现方案

- LightingMan - 淘宝JAVA中间件团队博客
在大型分布式 java 应用中,为了方便开发者,通常底层的 rpc 框架都会做一些调用的封装,让应用层开发人员在开发服务的时候只用编写简单的 pojo 对象就可以了,如流行的 spring remoting , jboss remoting 等等,都有这样的效果. 随着业务的需要,可能上层应用希望采用非 java 技术,如 php , ruby on rails ,而由于 java gc 和内存模型的限制,可能有的底层服务又需要采用更高性能和更加灵活的技术,如果 c++ , python 等.

[链接帖] 新的Java语言规范、Java虚拟机规范

- Wong - Script Ahead, Code Behind
随着7月28日,也就是Java SE 7预定的发布日期越来越近,相关的一些规范也已得到或即将得到批准. 这里主要关注的是下面几个规范:. Java语言规范,JSR 901的第三修订版(Maintenance Review 3)已经完成审核但尚未正式得到批准. Java虚拟机规范,JSR 924的第三修订版(Maintenance Review 3)在今年3月19日已经得到批准.

java语言常用性能优化技巧

- - Java - 编程语言 - ITeye博客
java语言常用性能优化技巧介绍.     java程序常用的方法有以下几种:.     1.不用new关键词创建类的实例. 用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用. 但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法. clone()方法不会调用任何类构造函数.

探索Java语言与JVM中的Lambda表达式(译)

- - BlogJava_首页
探索Java语言与JVM中的Lambda表达式.     Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期 Java Magazine中的 一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. (2013.01.02最后更新).

jdk1.6 java语言 连接pcsc读卡器 发送APDU指令

- - CSDN博客编程语言推荐文章
java语言操作读卡器  jdk1.6 提供的Package javax.smartcardio可以直接连接pcsc读卡器、和读卡器进行指令交互. Package javax.smartcardio详细信息. 作者:wyx100 发表于2014-9-22 0:13:28 原文链接. 阅读:147 评论:0 查看评论.

Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企业软件领域?

- - 知乎每日精选
赞同 @pansz 的答案,java生命力源自其独特的优点. 至今为止,java是大量实际得到应用的语言中,可读性最强,最利于阅读和理解,语法最严谨和规范的语言(当然,这也可以理解为语法繁琐的另一种表述)之一,在这一点上,只有已经基本退出历史舞台的pascal可与之相提并论. 而pascal并不是面对对象的,(面对对象的特点和优势我就不再赘述了,有兴趣可以查阅相关资料).

2011年10月编程语言排行榜:Java人气持续走低

- coofucoo - cnBeta.COM
在TIOBE公布的2011年10月编程语言排行榜中,Java继续着9月的势头,持续走低,下降了几乎1%的人气,尽管Oracle在八月初发布了最新的Java 7. 看来下个月C语言又要复返第一的宝座了.

Java之父评价C语言之父:我用尽了形容词

- satan - Solidot
伯乐 写道 "詹姆斯·高斯林在上周发布了关于讨论C语言之父丹尼斯·里奇(Dennis Ritchie)的简短博文(中文),认为他的影响巨大,并超越了科技世界,虽然他的大多影响都不为人知,但完全可以感受到. 他说,“我的整个职业生涯也是从C和Unix中发展而来. 对当今的大多数工程师而言,很难理解我在20世纪70年代感受到的幸福愉快感.

TIOBE 11月编程语言排行榜 09年7月以来Java再次超过20%

- - 博客园_新闻
Java 在 TIOBE 指数仍然持续上涨,现在已打败了 20%. 因为 10 月底成功召开的 JavaOne 大会,它的受欢迎程度有可能进一步上升. 目前 Java 和C两大语言和其余的包之间的差距现在超过 10%. 本月前 50 排名上升幅度较大的是 OpenEdge ABL(从 19 上升至 38),VBScript(从 77 上升至 46)和 GO(从 65 上升至 48).

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).