Dr. Dobbs主编Andrew Binstock日前发布了一篇关于Java的帖子《Java那么健壮,怎么会挂?》。该帖发出后立刻成为了各大科技网站的讨论热点,并很快收到了近1000条回复。Andrew Binstock似乎早就预料到了会产生这样的局面,因此在1000条回复产生后,他立刻又写了一篇关于网友回复的帖子,再次阐述了自己对网友的回复的一些观点。
我在上周发表的专栏:“Java这么健壮,怎么可能挂”深深地触动了很多开发人员的神经。在Reddit,Hacker News和Slashdot上,这篇文章的回复数量都超过了1000. 让我觉得有些意外的是,其实只有很少一部分人不同意我的观点。也就是说,其实号称Java即将挂掉的说法在现实当中其实是不太站得住脚的。不过,即使如此,我还是要在这里列举一些大家的观点:
Java不会挂,但是却将成为“古董语言”。 这个观点可能是留言中最普遍的一种了。“古董语言”,在我的印象中,需要具备两个特点:首先,是用这门语言所写的代码库除了需要维护之外,不会再有人去修改,也就是说,新的项目基本上不会再考虑用“古董语言”去开发;其次,新的语言会用来代替“古董语言”,去开发那些早先由“古董语言”编写的那些种类的软件。在这样的概念下,COBOL就完全符合“古董语言”的这两个特性:现今的商业程序已经不再使用COBOL编写,转而使用其他各类语言来实现,尤其是,呃,Java.
所以我不同意Java是“古董语言“这种观点,因为我根本找不到证据去证明这个观点。单单是Android就能够保证Java在很多新的移动应用开发项目中被使用。在企业开发方面,我也没发现有什么语言能够取代Java的地位。Spring框架的流程程度也证明了Java在企业级开发领域是一门广受欢迎的语言。JavaScript在前端开发的统治地位以及通过Node.js在服务器端的表现可能最终会把Java在Web应用程序的市场份额挤掉一部分,同样的道理,Ruby on Rails同样也会占据小规模站点的市场份额。在非常狭义的领域里,Java或许成为了“古董语言”,但是现在就要断言未来发生的事情还为时过早,在很多新项目中,基于Java语言编写的框架的表现还是非常活跃的。
Java之所以看上去要挂了的样子,是因为那帮“酷小子”喜新厌旧 我本人同意这种观点。软件开发正在经历新技术,新语言的“黄金时代”。在过去的15年里,Erlang,Lua, Ruby, Scala, Groovy, Clojure, 还有很多其他语言(尽管某些语言发明的时间并不“新”,但是他们成名却较晚)层出不穷,于此同时,还有:Go,Rust,CoffeeScript,R,Haskell,等等一大堆语言争先恐后地引起人们的注意。在计算机发展的历史上,还从来没有哪一个时期像现在这样盛产新语言和新技术。如果说Java作为很多大学采用的计算机科学教学语言,代表了一般编程语言的标准,那么这些新语言则代表了新兴的技术和实例,更容易吸引技术人员的眼球。我同意这样的说法。我本人喜欢探索新语言,但是这些新语言并不能取代Java。就像一个Reddit网友说的那样:“我本人在编程领域是个新手,今年刚刚拿到学位,我要说Java和C#/.NET并没有‘挂掉’。我现在正在做我的第二份工作,不过我的***份和第二份工作都用到了Java编写程序。”
Java桌面应用开发挂了。 在这里,我还是要说我偏向于同意这种观点。Java applet现在几乎已经彻底消失了,只有在相当少的领域内才会做为一些特殊的用途使用。 甚至是JavaFX,作为Swing的一个重要技术升级,我也不认为它有足够的实力让Java占据客户端接口开发的主要地位,尤其是桌面应用方面。然而,Java从来就不是桌面应用开发方面的主角,所以说即使是现在Java不擅长桌面领域的开发,也并不影响Java的整体表现。
Oracle因素 我必须承认Oracle的形象在开发者眼中并不怎么好。 Oracle对大量从Sun遗留下来的技术资产(尤其是许多开源项目)的处理方式,更加巩固了程序员对公司的敌意。但是从另一个角度来看,Java处于Oracle的羽翼之下,我相信一定会比当年在Sun的经营下更加有利,因为Sun只是把Java作为一门计算机语言来发展,而Oracle会做得更多更全面。我在我的上一篇文章中提到了这一点。尤其是,我非常质疑一个观点:“发展语言本身才是硬道理。” 你看JavaScritp, 不需要我再去陈述这个语言在互联网时代的作用了吧。JavaScript从语言特性上来说,几乎是人见人恨,而且这么多年了,也没见有什么改进。但是这门语言的不思进取完全不影响它成为互联网领域最火爆的语言,甚至很多开发人员就是喜欢它的这些所谓的“语言限制”。
*** ……有些评论完全同意我上一篇文章的观点,并且还认为我说得不够深刻全面。他们特别指出,在Java生态系统中有很多高质量的工具软件;尤其是IDE;还有数目众多的工具库,而且这些都是开源的;还有就是Java字节码高度的可移植性;以及很多现成的文档和资源可供开发者使用,但是我要说的是,没有哪种编程语言——无论老还是新——能够做到像Java一样拥有这么多的可用资源。