阅读更多

24顶
14踩

编程语言

原创新闻 PHP语言创造者Gutmans炮轰Java已经输掉Web之战

2008-04-13 10:03 by 见习记者 turing 评论(56) 有21554人浏览
PHP 3之后的主要语言开发者、Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言。他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,应该全面拥抱标准的动态语言。

由于Gutmans的特殊地位,他的这篇长文已经在技术界引发了强烈争议。参见其blog上和TSS上的讨论12

下面是对全文的一个编译版本,基本反映了原貌。其中对多核环境中多线程(JVM)与多进程(LAMP)的比较,C语言生态系统以及开源语言与Java等厂商语言和技术的比较,感觉都是非常有价值的。

翻译上的问题,请多指教。

引用
Gutmans回忆自己几年前参与的一个基于IBM Websphere的大型企业级项目。项目团队中无论开发还是架构人员都非常出色,但其中最优秀的人与Andi谈起PHP和动态语言时,还是将之视为玩具语言。这在当时正是Java界对动态语言的典型心态。但是,他们恰恰忽视了Web,因此Java EE设计时并没有以Web为中心,而且关注在企业集成、事务管理和其他后端处理上。虽然Java EE通过servlet和JSP支持Web开发也有不短的历史,但是掌握标准发展的大公司们忽视了Web的RESTful本质,仍然在向通用平台的方向上走。

而与此同时,建于C语言库和工具的生态系统之上的LAMP架构,则成了Web程序最流行的开发平台。其中最常用的语言是PHP。由于PHP专注于Web开发,而且为此不断演变,它简直就是为Web范型(paradigm)量身打造的,能够快速和容易地解决常见的Web问题,因此获得了最大的市场份额。根据Ajaxian.com的调查,大约50%的RIA开发人员都使用PHP。由于各种PHP程序如Wordpress, Drupal, mediaWiki, osCommerce, SugarCRM的流行,这种趋势更加明显。

随着大多数业务应用程序包括CRM、ERP、报表、文档管理等等也都转向了Web,那些大的Java厂商都意识到,Java对Web范型的形成和发展影响甚微,因此他们开始支持各种标准和非标准的Java Web框架(JSF、Struts、Spring MVC等等),要使Java适应Web。这些框架虽然有些也取得了一定成功,但是它们都无法解决Java在Web上的主要问题:由于严格的类型化和架构过度复杂,开发时间和开发人员的技能要求都更高,也就是说,总成本无法令人满意。

而且,大的Java厂商还什么都想占着。一方面想融入Web,一方面又不肯放弃自己已经在Java上建立起来的数十亿计的生意。甚至动态语言的广泛流行都未能显著改变他们的行为模式。但是随着微软雄心勃勃的多语言运行环境.NET的出现,大势又变了。

成功的动态语言包括PHP, Perl, Python和Ruby都是用C写的,充分利用了C语言库生态系统的广泛性和深入性。而且它们都是社区驱动的,没有什么正二八经的语言规范,发展不会被公司政治所阻碍。这些语言都是由使用者自己开发的,他们只有一个目的:快速搞定工作。因此语言可能在小的版本更新时就加入重要的改进。这种敏捷本质正是适应Web应用快速变化必需的。

而且,LAMP的部署方式有显著的优势。在多进程架构中,Web服务器和动态语言软件中的故障一般不会使网站垮掉。虽然会有某个进程崩溃,但其他服务Web请求的进程仍然可以继续运行。这与JVM这种多线程的环境中软件故障包括崩溃和死锁通常都会使系统垮掉,形成了鲜明对比。 而且在特定时间后回收进程的能力能够防止内存泄漏和内存碎片化这两种常见的内存问题使软件随着时间推移性能降低。LAMP上软件更新时,可以轻松和渐增地推到服务器,无需冗长的构建和打包。虽然有时这会带来不规范、不严格的问题,但是只要正确实施,开发人员和运营人员的日子都会好过得多。

相比之下,Java厂商受困于与Java绑定太紧对多种语言的支持很少的JVM。他们并没有转向能够使其客户两全其美的LAMP和Java技术松耦合的模型,而是患得患失,怕失去对客户的控制,竞相在JVM上提供动态语言。无论是微软这个强敌,还是Java中互相竞争的厂商,都在实施自己的动态语言策略。

现在,Sun正在其Java EE解决方案上支持JRuby和Jython而投入;IBM Websphere集团则认识到Java EE平台运行现代Web应用的无效,在Project Zero上大力投入,该项目的目的是使IBM在Web 2.0世界中也能有一席之地,目前支持Groovy和PHP;BEA也有一些孵化项目,但是被Oracle并购后,这些项目是否能有结果目前不明。Project Zero的首席架构师是IBM公司里最先公开承认Java现在可以认为只是一种系统语言而不适合构建RESTful Web应用的几个人之一。而构建RESTful Web应用正是Project Zero的目的。Java堡垒花了10年多时间才承认Java在Web上投资回报不佳,而目前的趋势,将有更多的客户做出更明智的选择。动态语言将有大的提升。与大型机一样,Java已经在企业级IT和关键业务应用中根深叶茂,因此不会很快消失。但是在Web应用上,Java语言很可能会在市场份额上急剧下降。

问题在于,非微软的Web市场是会采用动态语言的JVM实现,还是容纳这些语言事实标准实现的LAMP架构。虽然我认为会有客户被前者吸引,但是市场主流还是会选择LAMP。原因在于:

1. 标准实现更新速度很快,而JVM版本总是滞后,会带来兼容性问题。这与Mono跟不上.NET的问题类似。

2. JVM最初设计时并没有考虑支持动态语言,因此在可见的将来,要满足实际需求,挑战非常大。像闭包、间接方法调用和类型juggling等动态特性就不容易解决,这从目前JRuby与Ruby的C版本的比较中可以看出。而且,硬件厂商是否有兴趣跟上也是有待观察的。而开源技术就没有这种问题。

3. 现代Web的可伸缩需求对Web层的处理强度的要求越来越大。基于C的架构更可能与操作系统底层(原文为primitives)最有效地互操作,提供高效、内存占用小的架构,满足这种强度。高性能的Web服务器比如lighttpd, Zeus, IIS 7,高性能的缓存系统比如Facebook等最大的网站使用的memcached,还有其他性能关键的子系统比如内存管理,都是例子。

4. 多核系统非常适合LAMP架构的多进程方式。随着芯片业现在把主要精力都放在了多核而不是超线程技术上,JVM这样的多线程环境的优点在今天的硬件上将无法充分发挥。而多进程方式将提供更多稳定性和可靠性。

5. 由于LAMP的简单性,它对于开发人员而言进入门槛非常低,而又能够提供很好的伸缩性,包括Yahoo和Facebook这样的大规模产品系统。

总而言之,越来越清楚的是,动态语言将逐渐成为Web开发的标准。微软和Java厂商都认识到这个趋势,现在正在各自的软件平台之大力投入,给出解决方案。但是,因为主要动态语言社区都是在.NET CLR和Java JVM软件平台之外发展起来的,这些厂商如果只是想依靠将成功的动态语言复制到自己的平台上而反败为胜,他们将处于困难的境地。有些厂商已经意识到这一情况,采用了一些混合策略,同时为客户提供动态语言的标准实现,虽然还没有完全与其解决方案组合配合起来。微软在PHP上的投入就是如此,Sun也开始为客户提供原生的Ruby和PHP实现。我相信虽然JVM向动态语言抛出的橄榄枝可能会吸引一些Java客户,但是这无法跟上开源社区开发原生动态语言实现的步伐。JVM的动态语言实现对于Java厂商与时俱进是不够的,它们需要全面地拥抱原生的事实标准的社区驱动的动态语言。


附: Joseph Ottinger 已经回复Andi Gutman的“Java 已经输掉web战争”了。

请看:回复:Java已经输掉了web之战
24
14
评论 共 56 条 请登录后发表评论
16 楼 gxm2052 2008-04-13 21:26
淘汰就淘汰,失败就失败,无所谓。我喜欢的,且正在用的语言都被遗忘了,那又能怎样!
15 楼 comeon 2008-04-13 21:04
企业应用,厂商支持,行业标准 掌握着趋势。web开发就该灵活,多变,巧妙,兼众之长,用其锋芒。
14 楼 mreay 2008-04-13 18:40
与其轰来轰去,不如踏实做事。
13 楼 Army 2008-04-13 18:32
阅读阅读~
12 楼 hdwangyi 2008-04-13 17:24
说到底,看不出来动态语言的实现就一定要倒向所谓的“原生动态语言实现”就是正途,Gutmans还是为php做广告宣传罢了,如今这样的宣传太多了,Rod还不是用同样的方法宣传Spring吗?
11 楼 jessdy 2008-04-13 16:42
引用
这里的LAMP Linux, Apache, MySQL, PHP 吗?
P也可以是Python,perl....
10 楼 flynetcn 2008-04-13 15:28
分析很理智
9 楼 PatrickHe 2008-04-13 15:08
Java 也在逐步适应现代 Web 程序的开发需要,例如更好的异步处理、RESTful 风格、更快速灵活的语法(JavaFX)等,不过社区支持的技术发展更快,到底最后结果怎么样,现在恐怕还难知晓。对于从事互联网方向开发的程序员来说,对新技术保持足够的敏感加上不断的学习才是王道。
8 楼 sp42 2008-04-13 13:54
RIA的时代,或许无论是JAVA还是PHP都显得不那么重要了....
7 楼 balan 2008-04-13 13:21
可以说自己好,但是没必要说别人不好。
每种技术都有较擅长的领域,技术之间又不是你死我活的关系,一般是可以同时共存构建系统的。
Java的内涵早已不是语言了,而是一个体系,一个生态价值链。
技术语言本身是相似相通的,程序员有余力的话可以多尝试不同的技术,不要把自己局限在某个“阵营”,视野开阔些吧。
6 楼 Eastsun 2008-04-13 12:51
引用
相比之下,Java厂商受困于与Java绑定太紧对多种语言的支持很少的JVM。


非常同意这点
JVM应该在根本上进行改进,而不仅仅只对JAVA语言进行一些补丁式的修改.
现在在JVM上语言都因为JVM的限制,事实上都只是披着不同语法外衣的JAVA而已.
所以这些语言也受限于JAVA,不能做出本质上的改进.
5 楼 jejwe 2008-04-13 12:45
这里讲的只是web方面的,不是其它方面的,所以也没什么JAVA老矣之说。
在其它方面就不一样了
4 楼 山风小子 2008-04-13 12:39
Java老矣? Groovy正当壮年
3 楼 abo 2008-04-13 12:16
好不容易会用java些程序了,就要被淘汰了。
2 楼 kenrome 2008-04-13 12:08
ruby也会走的更好
1 楼 robbin 2008-04-13 10:09
先不说结论,就是这篇文章的分析的内容,都是极棒的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 重构 Martin Fowler

    Martin Fowler的经典书籍,重构 改善既有代码的设计中文版

  • 世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    马丁·福勒(Martin Fowler),世界级软件开发大师,ThoughtWorks首席科学家。他是一位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献,著有《重构:改善既有代码的设计》《分析模式:可复用的对象模型》《领域特定语言》《企业应用架构模式》等经典著作。 马丁·福勒(Martin Fowler)最新出版著作 领域特定语言 世界软件开发大师.

  • Martin Fowler微服务论文--译文

    Martin Fowler微服务论文

  • 来篇文章:Martin Fowler的设计已死中文版

    设计已死?英文原文版权由Martin Fowler拥有Original text is copyrighted by Martin Fowler Martin FowlerChief Scientist, ThoughtWorks 原文出处| 繁体版 | 译者:Daimler Huang 对很多粗略接触到 Extreme Programming 的人来说,XP 似乎 宣告了软件设计的死刑。不...

  • 读 Martin Fowler设计已死?总结

     1 Planned and Evolutionary Design Evolutionary :code and fix bug ,会陷入越修改bug越多的情况 Planned:按照需求分析,概要设计,详细设计,编码,单元测试,集成测试,版本测试,版本发布的步骤进行开发软件  结论:喜欢 planned design。因为我了解 planned design 的缺点,而且正在寻找更好

  • 读-Martin Fowler-企业应用架构模式

    分层 组织领域逻辑 映射到关系数据库 表现层 并发会话状态分布式 并发 会话状态 分布策略 领域逻辑模式 事务脚本 领域模型 表模块模型 服务层 数据源架构模式 表数据入口 行数据入口 活动记录 数据映射器 ormapping 基本模式 入口 映射器 层超类型 分离接口 注册表 值对象货币 特殊情况 插件 服务桩 记录集 现在 大师级人物Martin Fowler的书,04年出版,现在看来有点老

  • 设计已死-Martin Fowler

    “我将在这篇文章中说明软件开发的两种设计方式是如何完成的。或许最常见的是演进式设计……”

  • Martin Fowler 控制反转与依赖注入

    摘要:Java社群近来掀起了一阵轻量级容器的热潮,这些容器能够帮助开发者将来自不同项目的组件组装成为一个内聚的应用程序。在它们的背后有着同一个模式,这个模式决定了这些容器进行组件装配的方式。人们用一个大而化之的名字来称呼这个模式:“控制反转”( Inversion of Control,IoC)。在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,更重要的是:应该将组件的配置与使用分离开——两个模式的目标都是这个。

  • refactor(重构-改善既有代码的设计)

    refactor(重构-改善既有代码的设计),中文版共15章

  • 读-Martin Fowler-重构

    代码的坏味道 构筑测试体系 重新组织函数 在对象之间搬移特性 重新组织数据 简化条件表达式 简化函数调用 处理继承关系 总结重构领域的经典之作,开发必看,推荐之!第一章讲了一个案例引入重构,第二章讲了重构的一些原则,如何为重构,何时重构等,理论性的东西,过,从第三章开始。代码的坏味道何时需要重构,作者用了代码的坏味道来描述,坏味道体现在: Duplicated Code; Long Method;

  • “软件开发教父” Martin Fowler 从业 40 年最想说这两个字!

    作者 |异步社区本文经授权转载自异步社区(ID:epubit)Martin Fowler,世界级软件开发大师,敏捷开发的开拓者和创始人全球知名的面向对象分析设计、UML、模式等专业领...

  • Martin Fowler关于微服务的原文翻译

    原文如下:http://martinfowler.com/articles/microservices.html 微服务 有关这个新的技术架构术语的定义 “微服务架构”这个术语最近几年横空出世,来描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软件应用系统的设计。尽管这种架构风格尚无精确的定义,但其在下述方面还是存在一定的共性,即围绕业务功能的组织、自动化部署、端点智能、和...

  • 重温大师经典:Martin Fowler的持续集成

      持续集成  作者:Martin Fowler     译者:滕云 原文发布时间:2006年5月1日     翻译时间:2012年2月25日 原文链接:http://www.martinfowler.com/articles/continuousIntegration.html (此翻译已获原作者同意)     持续集成(Continuous Integration, CI)是一种...

  • Martin Fowler:英国口音的软件工程

    刘天北在一些罕见的情况下,大师会被阐释者夺走自己的创见。比如在软件工程界就有这么句话:“统一建模语言(UML)的发明者Grady Booch本人,都不一定比Martin Fowler更会用UML。”这说的是知名软件工程专家,《UML Distilled(中译UML精粹,清华大学出版社2002年出版)》的作者Martin Fowler。对于今天的软件开发者来说,UML是他们的面包和黄油,但在19

  • martinfowler

    https://martinfowler.com/articles/microservices.html

  • Martin Fowler微服务论文翻译

    原文地址 :https://martinfowler.com/articles/microservices.html Microservices 微服务 a definition of this new architectural term 一个新架构术语的定义 The term "Microservice Architecture" has sprung up over th...

  • 设计已死?Is Design Dead?

    基线编程 模式 UML

Global site tag (gtag.js) - Google Analytics