阅读更多

24顶
14踩

编程语言

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

2008-04-13 10:03 by 见习记者 turing 评论(56) 有21556人浏览
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 条 请登录后发表评论
56 楼 少女杀手 2009-01-06 16:26
PHP你先和ASP.NET竞争竞争,在考虑JAVA吧,为啥大型的网站啥的都是JAVA啊?为啥各个银行的的都用的是JAVA啊?也就那不起眼的小公司,小项目用那PHP吧
55 楼 taikeqi 2008-07-10 16:27
我的感觉Java的历史,已开始是想在家用电器的变成上,到歪打正着到企业计算上,每一个领域,其实Java都是想被渗透到各个领域的;这里IBM/ORACLE/SUN都是计算机界的巨头,他们在推这些东西,Java当然是无所不在拉!Java开发那些简单的WeB应用是有点杀鸡用牛刀;但是那又怎么样呢?那些做PHP的程序员的工资能有多少?肯定低于Java的,在中国,做那些纯粹商务网站(PHP)比较合适的)毕竟是少数;当然将Java用的很好的如TAOBAO,TENCENT也是少数;大多说都是那些中不溜秋,作的项目要求不高但是大伙喜欢用jAVA的那种公司。
   这里PHP和Java不是纯粹是技术问题;而是市场问题。
PHP也有劣势,就是他没有一个真正的大公司来领导他。许多开发PHP到一定层次的人都会有这种感觉。一种很虚无的感觉。
  所以Java和PHP,适合不同的项目。不同的场合,因人而异,因事而异。PHP的人攻击JAva的人意义不大
  
54 楼 wangzi6hao 2008-05-14 00:51
"由于严格的类型化和架构过度复杂,开发时间和开发人员的技能要求都更高,也就是说,总成本无法令人满意。 "
就这一点来说,自己开发过的经验告诉我,确实java在中大型的oa,crm等企业信息化开发上,基本不占优势的.
53 楼 weicanhuang 2008-05-09 16:21
炒作吧。

不就个工具,想怎么耍就怎么耍,有什么好争。
52 楼 careprad 2008-05-07 10:59
什么动态语言 脚本语言吧
js为什么成不了气候 看着吧 groovy ruby 都不行
51 楼 MrLee23 2008-05-07 10:05
我认为还是JAVA比较好,因为JAVA做起来标准,就盖像一栋楼,你用别的技术也许盖的快,但你保证能面临很多危险么,就像韩国97%的房子不符合标准,存在险情~就因为盖的快,技术没用标准~
50 楼 sheandwei 2008-05-06 23:40
PHP就是垃圾
垃圾用着方便 用的人便忘了它是垃圾
49 楼 bio1984 2008-05-06 18:50
争来争去有什么意思,PHP个傻X,JAVA是标准懂不,,,??
建议JAVA早点把PHP打倒。。。。
48 楼 flyboy1234 2008-05-06 16:04
PHP好啊 可国内工作不好找啊 这可扎办
要是月薪上w 那个时候php就好了啊~~~~~~~
47 楼 exquan 2008-04-16 20:24
归根到底是各大厂商的利益
46 楼 spiritfrog 2008-04-15 21:23
web2.0?我还是不太明白
动态语言简单?我始终认为习惯使用的最简单
45 楼 hysoft 2008-04-15 17:17
引用
我倒是觉得,java的严格类型校验,正是开发效率和质量保证的前提。
web开发目前最大的瓶颈是错误地选用了javascript这种自由,但是调试成本很高的技术。为啥浏览器不直接默认支持java

44 楼 AllenZhang 2008-04-15 15:50
我倒是觉得,java的严格类型校验,正是开发效率和质量保证的前提。
web开发目前最大的瓶颈是错误地选用了javascript这种自由,但是调试成本很高的技术。为啥浏览器不直接默认支持java
43 楼 jolestar 2008-04-15 15:27
"由于严格的类型化和架构过度复杂,开发时间和开发人员的技能要求都更高,也就是说,总成本无法令人满意。 "
这个确实是java web开发的一个问题。
42 楼 123waily 2008-04-15 14:08
java也好,php也好,能把项目完成就好,能吃饱饭就行
41 楼 lxl686 2008-04-15 13:27
喜欢java!支持java.
40 楼 jejwe 2008-04-15 11:36
php语言那鸟样并不代表java就不鸟样
这里其实讲的是特定的环境,没有WEB这个大前提,PHP也只能是PHP
而且也没讲是干掉JAVA,是你自以为的啊
39 楼 releasa 2008-04-15 11:21
java  love u.
38 楼 edwardpro 2008-04-15 10:01
就php语言那鸟样还干掉java?
37 楼 gfllove 2008-04-15 09:42
动态语言,不规范的语言也只能适合于小的与快速开发的系统.对于以后系统的扩展不会有利的.还是支持Java

发表评论

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

相关推荐

  • 重构 Martin Fowler

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

  • 敏捷史话(八):敏捷的破局之道——Martin Fowler

    本文转自敏捷开发。 在 Martin Fowler 的世界里,任何事情都有最优解。 1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育。在这里的乡村中,他度过了一段简单、愉快的少年时光。 上了中学之后,Martin 接触到了策略桌游。在桌游的“厮杀”中, 如何从复杂的局势中找出最简洁、直观的破局之法,就成为他想要寻找的答案,也成为日后他解决任何事情的目标。 1986年,Martin 毕业于伦敦大学学院,获得了电子工程与计算机科学的学士学

  • 设计挂了吗?(设计已死? Is Design Dead?)译文,普通话重译版

    原文:http://martinfowler.com/articles/designDead.html 转载请附带连接,注明出处 译注:重新翻译这篇文章是因为目前搜索引擎的结果中没有一个理想的普通话译本,故尽我所能,将这一方面补完。里面为了让语义平实,并且尽量符合原文诙谐的感觉,也有一些北京或者不知道是哪里的方言(即兴而为),但是大体上是普通话,希望这些小小的即兴发挥不会影响到大家...

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

    Martin Fowler微服务论文

  • 读 Martin Fowler设计已死?总结

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

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

    原文如下:http://martinfowler.com/articles/microservices.html微服务一个新的架构术语“微服务架构”一词是在过去几年里涌现出来的,它用于描述一种独立部署的软件应用设计方式。这种架构方式并没有非常明确的定义,但有一些共同的特点就是围绕在业务能力、自动化布署、端到端的整合以及语言和数据的分散控制上面。“微服务”- 这是在软件架构领域这个非常拥挤的街道上,冒

  • 《重构改善既有代码的设计(中文版)》(Martin Fowler[美] 著,候捷、熊节 译)

    Martin Fowler和《重构:改善既有代码的设计》(中文版)另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。《重构:改善既有代码的设计》(中文版)解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。《重构:改善既有代码的设计》(中文版)的核心是一份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。点击进入该书更多详细信息。 ——《豆瓣读书》

  • 设计已死?Is Design Dead?

    基线编程 模式 UML

  • 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...

  • 设计已死原作者网站

    http://www.martinfowler.com/感觉设计已死 这篇文章的理念 不错.其作者的网站上是否有些值得看的文章.

  • 设计已死?

    对很多粗略接触到 Extreme Programming 的人来说,XP 似乎 宣告了软件设计的死刑。不只很多的设计被嘲笑为 "Big Up Front Design"[译注1],连很多技术像UML、富有弹性的程序架构 (framework),甚至连模式 (pattern) 都不受重视,或是近似忽略了。事实上,XP内含很多设计理念,但是它与现有的软件流程有着不同的运作方式。XP藉由多种实务技巧 (

  • 首席科学家马丁•福勒(Martin Fowler)

    现任思特沃克公司首席科学家的马丁·福勒先生是当今世界软件开发领域最具影响力的五位大师之一。作为一位敏捷软件开发方法的早期开拓者,福勒先生对IT 业的影响是不可估量的。 思特沃克公司是一家跨国专业IT 服务公司,总部设在美国芝加哥,并在加拿大、欧洲、澳大利亚、中国及印度等国家和地区设有分公司。福勒先生是一位知名的作家、软件顾问兼演讲大师,他凭借16年丰富的经验帮助各企业将前沿技术应用于关...

  • Martin Fowler有关“Refactoring”误用的一篇文章

    今天偶尔逛到Martin Fowler的Blog,在他的Blog中看到了一篇题为“Refactoring Malapropism”的文章。讲的是有关“Refactoring”的误用,同时也讨论了“Refactoring”一词的界定问题。很浅显,却觉得颇有道理。我觉得,其文章的要旨是澄清了Refactoring和Restructuring的区别。 针对一个不日内即将破败的系统的Refactoring

  • 读-Martin Fowler-重构

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

  • Nature重磅封面:复活死亡大脑!

    来源 | Nature、npr转自 | 新智元(公众号ID:AI_era)编辑 | 金磊、大明今日,Nature封面重磅发布耶鲁大学最新研究:猪大脑在死亡4小时后成功复活...

  • Martin Fowler最近的两篇Blog,推荐阅读

    《人本接口》与《最小接口》 http://blog.csdn.net/mfowler/archive/2006/10/19/1340358.aspx http://blog.csdn.net/mfowler/archive/2006/10/19/1340364.aspx 一个类的接口如何设计?这个问题很值得探讨。 我在设计DJ的时候,也考虑过这个问题,按照Channel的思想,...

Global site tag (gtag.js) - Google Analytics