Java作为Internet应用语言在客户端迅速得到立足。借助于灵巧的Applet应用程序,由于Java提供了对于应用开发者极有帮助的特性,使得Java快速转移到服务器端开发,这些特性包含有:
内存管理
干净的继承模型
更好的面向对象功能
便携性
Internet类库
安全
……以及其他许多特性。
在我看来,Java一直以来都是最为成功的编程语言。随着Java不断的改进,使用Java语言变得越来越安全,并最终在Internet应用中统领着服务端开发的市场。商业投资,开发者社区,各种教育培训,开放源代码的框架,以及各种各样的信息发布都使得使用Java开发的风险降低。
上述几点清晰地解释了Java取得成功的原因。
一旦新的程序开发语言跨越鸿沟,开发语言相关的风险则会随着市场占有率的提升显著减少。
Java则拥有一个令人赞叹的成功过程。但是程序设计语言没有仍旧停留在不确定的技术发展水平之上。所有成功语言都会产生技术膨胀,因为它们必须去适应使用者不断变化的需求。
成功的编程语言无法像其他的语言一样快速的适应变化,他们必须保持一定程度上的向后兼容,来满足逐步增长的用户基本需求。随着技术滞后与语言膨胀的产生,另一种形式的风险预测逐步形成。为了新的风险预测,由于风险与程序开发者高效完成工作的能力相关,使得风险与市场占有率的降低有必然的联系。
到目前为止,我已经开始关注于新生技术的市场风险。在Java诞生十周年之际,另一种形式的风险评估成为必须。就像《人月神话》、《死亡之旅》和《人件》等许多有影响力的书籍中鼓吹的那些风险一样:
低下的生产力将导致更庞大的团队规模和更长的时间周期
风险随着项目的规模而增加
风险随着团队规模的扩张而增加
质量风险,以Bug的数量来衡量,随着代码行数的增加而增长
成本的增长导致风险的增加
综合成本随着复杂性的提高而增加
随着程序设计语言或者编程范例的使用有了积累,相对于技术发展水平,语言将会与生产力相关联。
项目团队需要增加规模,开发者需要编写更多的代码来解决相同的问题。所有这些因素本身就会增加风险。所有的因素将会导致必然的结论。
由于市场主宰地位的终止,相对于技术发展水平来说,生产力风险与开发语言相关性将会增加。
在Java语言的范畴中,这些情况是否以及如何发生是一个将会引起激烈争论的话题。
当然,Java仍然是解决整个一系列企业问题的最佳语言,比方说非常大型的项目,或是比如双相提交或核心对象关系映射等具备特定需求的问题。针对于Java的商业投资从来没有这么强过,并且Java社区一直是保持持续高涨。但是根基中的缺陷逐渐开始显现出来。
Java的企业级JavaBean框架,WS-*风格的网络服务,以及JavaEE的复杂性和宽松度已受到越来越多的批评。James Duncan Davidson,servlet的创始人之一,曾表示Java不再像从前那样方便易用。目前很难给一个普通的Java开发者,讲明白如何解决最一般的编程问题:比如有后台数据库支撑的网络应用。
出现的相关证据是,已经出现了很多使用其他语言的开发框架,最为出名的就是Ruby on Rails,在处理小规模问题时具备极高的生产力。资深Java开发者James Duncan Davidson,Mike Clark,Justin Gehtland,Stuart Halloway以及其他许多开发者都证明,在关键的小型项目中使用了Rails之后,获得了非常高的生产效率:具备后台数据库支撑的绿色网络应用。
当然,我的个人经验也是可以轻松地使用Ruby on Rails构造、部署并维护这样的应用。
这些报告将会引起广泛的争论,就像是早期关于Java生产力的那些报告一样。还记得,在Java开发广泛普及之前,Java首次出现在各式的小型应用中。开发人员的生产力是驱动Java早先增长期的重要标准。
请谨记Moore关于新技术出现的理论。跨越鸿沟最好的方式不是通过一次大的跳跃,而是每次只前进一个小的阶段。
我坚信复杂性和松散的开发效率是使得Java目前正在经历风险的原因。
Ruby与生俱来的风险
比起其他新生的开发语言来,Ruby并没有什么特别之处。
缺少商业投资,有限的开发资源,还缺少开发经验,这都为新生的程序设计语言带来了风险。下面是一些我遭遇到的较大的风险。
人才的缺乏。很难找到熟练的Ruby开发人员。根据Java的发展情况来看,这样的现状将会很快有所改观,但是就目前来说,如果你计划在很短的时间内组织一个人数较多的Ruby开发团队,其困难程度远比组建相同的Java团队要大得多。
缺少经验。许多LAMP相关的语言已经建立了记录跟踪机制。Google使用Python;许多主流的。COM公司使用Perl或C语言。目前仍没有使用Ruby打造的旗舰级应用,来展示Ruby语言强健的可拓展性,或是复杂的企业级集成。我们只是不知道Ruby是否可以解决某些特定类型的问题。
部署和配置策略。Ruby on Rails已经出现将近一年的时间,所以在部署和配置方面的经验还不如竞争语言那样丰富。
缺少类库支持。Ruby远不如Java语言拥有这么多丰富的类库支持。
缺少商业投资。你需要花费很大的力气才能找到Ruby的咨询、培训或承包的机会,并且这些大多数还并不存在。