向Java开战?别搞错了对象
在我看来,Java的广泛成功有着许多原因:
- 它被企业界所广泛接受
- 它是速度最快的语言之一
- 它是最安全的语言之一
- 内置在语言中的同步原语
- 它是平台独立的
- Hotspot是开源的
- 成千上万家供应商提供了无数Java产品
- 成千上万个开源Java代码库
- 来自JCP的良好的社区管理(在Oracle之前)
对于任何语言来说,这都是一个相当了不起的成绩,也展示了Java作为当下最流行的语言,在很长一段时间里无可匹敌的连胜纪录。
那么,为什么从2010年底到2011年,Java突然间就变成了招人讨厌的魔鬼?
- 现在反Java是一种时尚
- 类似C语言的语法已经不再流行了
- 人们把对Oracle的反感带到了对开发语言的兴趣当中
- 人们接触到一些用Java编写的非常糟糕的代码
- ……此处插入另外一百个理由
Java语言本身和它的API确实有不少实际问题,可以说举不胜举,想写也写不完的(比如混合本地和对象类型、一大堆被遗弃的API、还有对受检查异常的不一致的使用等等)。但这里我是想伸出和平的橄榄枝……让我们讨论真正的问题,而不是把婴儿和洗澡水一起倒掉。
那么这个行业究竟出了什么问题?
Java虽然有它的各种缺点,但确实已经完全征服了Web应用编程。而在场边,那些极富挑战性的新的编程语言正以目不暇接的速度一个接一个的出现,时刻挑战着人脑极限,它们同样也想要征服Web应用编程。这些新兴的语言们和Java一起竞争,它们就像赛车手一样蜂拥进站,或者就像街边的促销员正在为争夺街头领土而上演霹雳舞争霸赛。然而,就在大家争吵是PHP还是Rails 3.1哪个运行速度更快,哪个能够处理更多的同步请求,或者在我们幼稚的对语法和运行时的参数争吵不休时,总有一只沉默的大象在房间里暗暗的笑了。
那么告诉我,下面这些有什么共同点?
- 用信用卡买东西
- 去医院使用医疗卡
- 调整养老金
- 在牙医那里使用保险卡
- 寻找最好的汽车保险
- 银行之间的资金转移
- 医疗系统在药店配药
上面所有这些行业在美国的国家经济中都是上百亿美元的重头角色,而这些行业每天都在编写新的COBOL和大型机汇编程序。我没有添油加醋,我现在的工作就在配药行业,其他行业也曾经涉足过,或者采访过相关的人。
朋友们啊,老天作证,早在1959年就发明的COBOL在今天仍然几千行几千行的写着!我说的不是这儿几行那儿几行的那种维护工作,而是真正的全新的成千上万行,用来实现新的功能和新的要求,每一天都是如此。这些行业对新技术不闻不问,云计算里飘出来的风根本吹不到这些行业,但这些行业却是最必不可少的,它们构成了我们经济的基石。不仅如此,在这里,它们还从不创新,而且为了维护自己的传统技术一直进行着昂贵的大规模开销。
有多贵?我们简单谈一下大型机的许可费吧。比方说你的数据库买的是MongoDB企业版,只要把它安装好,然后你挂好CPU,让数据库开始一个接一个的进行事务处理……下周你出去度假并留下MongoDB继续运行。等到你回来以后,MongoDB并没有让你多花一分钱。
但大型机的软件许可就完全不同了。你要先花几百万买你的主机和它的数据库产品,再花了整整一星期才终于把CPU们挂上数据库的请求,然后你松了口气检查一下邮件,这时却发现早就收到了一份数据库供应商发来的100万美元的账单。等一下,我买了硬件,为什么还要付另一份账单?对了,大型机上的软件经常是按使用计费的,或者按照你用了多少CPU周期。你在运行数据库时用了2,000,000个CPU周期,那你就要付给供应商200万美元。奇怪吗?就是这样。
这些行业就在你的生活中,你每天都在使用,却看不见摸不着,这里充斥着自大、老旧的系统和过高的成本。Java一开始想要征服许多领域,虽然它征服了Web应用,但它在集中式计算上的努力最终还是告吹。这些大型机的行业完全到了应该降低成本和提高效率的时候了,但说实话,我们所取得的只能让自己尴尬。这些行业坚持使用那些老旧的系统,因为他们不认为Ruby、Python、Scala、Lua、PHP甚至Java能够处理这些行业的“负载”、可扩展性、或是满足他们那些老系统提供的上线时间的要求。这些理由完全站不住脚,而且在过去的15年间,这些行业“成功的”实现了零创新,而与此同时,网络技术一直在翻天覆地的跨越式进步。