`
floating
  • 浏览: 80760 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

php,rails和java的有趣比较

阅读更多
原文来自:
http://blog.thinkphp.de/archives/170-Keynote-of-Tim-Bray-some-interesting-comparison-between-PHP,-Rails-and-Java.html
觉得很有趣。首先有趣的是作者的身份,Tim Bray是sun公司负责web技术的主管,但是在比较中丝毫看不出作者对Java偏袒;其次是作者的结论,正如在回帖中有人提及的那样,“Java赢在开发工具,却输在开发效率”。这可真有是个绝妙的讽刺!第三点是这个贴子在原出处和TSS上都得到了激烈的讨论。看来随着RoR的出现和逐渐成熟,一次类似当年Java出现时的语言优劣的争执又将无可避免的上演了。
我们自己应该以一个什么样的态度来迎接这次变革呢?其实归根结底,希望用某种编程语言来大幅度的降低软件开发的复杂度是不切实际的。动态语言在灵活性、初期的开发效率(之所以强调初期,因为个人认为动态语言的灵活性在提高开发效率的同时会弱化采用工具或者其他控制手段保证代码质量的可能。)有着先天的优势;但是像Java或者C#这样强类型的准静态语言(Java和C#都已经并且将越来越多的加入很多有意义的动态语言的特征,比如Java6对脚本语言的支持)在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中也有着非常强的优势。
记得七八年前,自己开始从一个C++的熟练使用者向Java语言迁移时,刚开始的确对Java语言的简单(比起C++要命的灵活性)很欣赏,因为在一个大型项目里最重要的是代码的健壮性。但是随着Java的越来越成熟,使得Java越来越复杂,而且和Java相关的很多概念也越来越超越Java语言本身。这无疑大大的增加了学习Java的成本。
再来看RoR,的确非常轻盈和简单。这得益于它对动态语言和OO特性的完美结合。但是个人认为纯粹技术上的优雅不一定会换来商业上的成功。对于软件工业来说,最重要的还是分解业务逻辑的复杂度和不确定性。毕竟,正如我的一个同事所说的那样,“无论用任何语言,初期的开发成本我们还是投入的起的。”呵呵,据他说,他经历的项目在初期的开发上占的成本大概只占到整个项目开发成本的1/6到1/5。
注:初期开发成本,是指一个项目中,最初完成开发人员视角的系统功能时所花费的成本。
分享到:
评论
42 楼 cookoo 2006-11-14  
floating 写道
http://www-128.ibm.com/developerworks/cn/views/java/articles.jsp?view_by=search&search_by=%E8%B7%A8%E8%B6%8A%E8%BE%B9%E7%95%8C
今天花了些时间看了developerWorks上的《跨越边界》系列,觉得对一个Java开发人员来说是了解Ruby的绝好的文章。建议和我一样接触Ruby时间不长的Java开发人员仔细读读。最好,按照文章的内容装一个环境练练手,呵呵。

恩,还有这个也值得一看:10 Things Every Java Programmer Should Know About Ruby
http://onestepback.org/articles/10things/index.html

对熟悉Java的人很有针对性
41 楼 cookoo 2006-11-14  
floating 写道
我越来越感觉到大家之所以对动态语言和强类型语言有这么泾渭分明的看法,更多的是因为所接触的工作环境不同导致的。我不知道在JavaEye上有多少人参与的项目是Internet上的web项目(类似JavaEye本身),有多少人经常参与的是借助web形式的企业应用项目。我属于后者,所以更多的时候考虑的问题是如何满足相对复杂的业务需要,而不是考虑如何解决高并发或者海量信息的组织等问题。
此外,我个人并不特别偏爱某种类型,认为各有各的优势,不存在谁取代谁的可能,只有互相借鉴的对方的长处才会更好的发展。
但是我不太赞同将RoR说的像是一个救世主一样。举个最简单的例子,我认为RoR的出现对软件工业的推动不会比MDA或者在JavaEye很流行的Agile来的大。因为更多的场合,开发者的开发观念和开发素养才是最重要的。

动态语言相对的是静态语言,不是强类型语言,python/ruby都是强类型语言,不存在类型安全问题。
语言都是工具,框架也是,什么好用用什么,没有什么救世主。大家只不过指出一些你帖子中的不妥罢了。
40 楼 floating 2006-11-13  
http://www-128.ibm.com/developerworks/cn/views/java/articles.jsp?view_by=search&search_by=%E8%B7%A8%E8%B6%8A%E8%BE%B9%E7%95%8C
今天花了些时间看了developerWorks上的《跨越边界》系列,觉得对一个Java开发人员来说是了解Ruby的绝好的文章。建议和我一样接触Ruby时间不长的Java开发人员仔细读读。最好,按照文章的内容装一个环境练练手,呵呵。
39 楼 bigpanda 2006-11-13  
我正在慢慢的看ruby,还没开始看RoR。

ruby做为编程语言,是要比Java复杂的,如果两门语言只是语法不同,而语义相同的话,学起来是非常快的,但是ruby的语义更复杂,有Closure,有Continuation,这些都是java里面没有的。有java背景去学C#要比有java背景去学ruby快。

当然看一周ruby然后看RoR照猫画虎,也是可以完成项目的,等需要提高功力了再钻研RoR不迟。
38 楼 floating 2006-11-13  
谁知道发错帖子了怎么删除?找了半天没找到。
37 楼 floating 2006-11-13  
我越来越感觉到大家之所以对动态语言和强类型语言有这么泾渭分明的看法,更多的是因为所接触的工作环境不同导致的。我不知道在JavaEye上有多少人参与的项目是Internet上的web项目(类似JavaEye本身),有多少人经常参与的是借助web形式的企业应用项目。我属于后者,所以更多的时候考虑的问题是如何满足相对复杂的业务需要,而不是考虑如何解决高并发或者海量信息的组织等问题。
此外,我个人并不特别偏爱某种类型,认为各有各的优势,不存在谁取代谁的可能,只有互相借鉴的对方的长处才会更好的发展。
但是我不太赞同将RoR说的像是一个救世主一样。举个最简单的例子,我认为RoR的出现对软件工业的推动不会比MDA或者在JavaEye很流行的Agile来的大。因为更多的场合,开发者的开发观念和开发素养才是最重要的。
36 楼 robbin 2006-11-13  
引用
但是Ruby这样的动态语言对单元测试的依赖性更大。强类型语言中很多编译器能检查出来的错误,在Ruby中恐怕都需要靠单元测试来发现。所以如果都不用TDD,程序员水平都不高,那么Ruby和RoR的效率还能不能比Java高,对此我是有疑虑的。


其实根本没有你想像的那么夸张。除了偶尔打字的时候拼写错误,一般也不会犯什么语法上的错误。
35 楼 robbin 2006-11-13  
BirdGu 写道
刚刚看完Ruby,正在看关于RoR的书。
感觉RoR学起来比Spring+Hibnerate这样的组合快。但是在语言层面,Ruby学起来恐怕不会比Java快。

7-10个人,水平参差不齐,只有一个高手,甚至没有高手。这样的团队在国内还是很普遍的。不知道这样的团队中使用RoR有没有问题。

一个公司如果有三个高手,肯定会让他们带人去做三个项目甚至六个项目,不太可能把他们全投在一个项目中。找不到项目的情况另说。


看你要达到什么样的ruby水平了。如果你达到DHH那种水平,估计要很久了。但是如果你只是需要能够使用RoR的水平的话,那我觉得学习ruby一周就够用了。
34 楼 BirdGu 2006-11-13  
dongbin 写道
关于参差不齐的开发人员问题,请看这篇文章

事实是,如果你的程序员不会用TDD来自律,任何强类型都无济于事。


这个太夸张了。不用TDD,也许不会做得很好,但也不是一定会失败,不管是强类型还是弱类型的都是一样。做不到100分,做到七,八十分还是完全可以的。

但是Ruby这样的动态语言对单元测试的依赖性更大。强类型语言中很多编译器能检查出来的错误,在Ruby中恐怕都需要靠单元测试来发现。所以如果都不用TDD,程序员水平都不高,那么Ruby和RoR的效率还能不能比Java高,对此我是有疑虑的。
33 楼 dongbin 2006-11-13  
关于参差不齐的开发人员问题,请看这篇文章

事实是,如果你的程序员不会用TDD来自律,任何强类型都无济于事。
32 楼 BirdGu 2006-11-13  
刚刚看完Ruby,正在看关于RoR的书。
感觉RoR学起来比Spring+Hibnerate这样的组合快。但是在语言层面,Ruby学起来恐怕不会比Java快。

7-10个人,水平参差不齐,只有一个高手,甚至没有高手。这样的团队在国内还是很普遍的。不知道这样的团队中使用RoR有没有问题。

一个公司如果有三个高手,肯定会让他们带人去做三个项目甚至六个项目,不太可能把他们全投在一个项目中。找不到项目的情况另说。
31 楼 刑天战士 2006-11-13  
robbin 写道
引用
举个简单的例子,如果JavaEye是由三个刚刚学习Java不久的开发人员来负责,你会建议他们使用RoR吗?或者JavaEye是由三十个水平参差不齐的人来维护,你会建议项目使用RoR吗?


肯定会要求用RoR。RoR入门比Java快很多倍。

不需要30个人维护,我需要的是3个高手(Java高手,RoR高手都行),30个人只会把事情搞坏。

引用
希望用某种编程语言来大幅度的降低软件开发的复杂度是不切实际的

如果说软件业务逻辑复杂度是10,Java编程带来的次要复杂度就是50;RoR把次要复杂度降低到了10。

引用
是像Java或者C#这样强类型的准静态语言在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中也有着非常强的优势


为什么静态语言在复杂业务逻辑,大型商业系统,长生命周期应用当中有非常强的优势呢?理由是什么?

引用
对于软件工业来说,最重要的还是分解业务逻辑的复杂度和不确定性。毕竟,正如我的一个同事所说的那样,“无论用任何语言,初期的开发成本我们还是投入的起的。”呵呵,据他说,他经历的项目在初期的开发上占的成本大概只占到整个项目开发成本的1/6到1/5。


http://robbin.iteye.com/blog/29555

http://robbin.iteye.com/blog/29589




robbin大大,我可不认为ruby比java上手快,global environment,implicit iterator,block,以及很多东西的运行方式和传统的都不一样,让新手作肯定困难重重……
30 楼 bd7lx 2006-11-13  
随便瞎说一下

Tim Bray 是Sun 的Web 技术主任,同时也是XML 的发明人之一

04年才进入Sun 不能指望 他这种背景一定说Java的好话

收集整理一些论战的话题

http://www.iteye.com/topic/24443

http://hgq0011.iteye.com/blog/33975

同样看一个帖子得出的结论竟完全不同

引用
这篇文章(http://www.tbray.org/ongoing/When/200x/2006/11/10/Comparing-Frameworks)从可升级性,开发速度,开发工具,可维护性比较了java,rails,php。作者个人认为他们最重要的是可维护性,因为开发完成一个系统,维护它是一个长期的过程。从文章中提供的示意图可看出rails的开发速度和可维护性是非常的好,以前就听说RAILS是个非常不错的脚步语言,我也正在学习它。希望以后能够用RAILS开发出更好的web系统来。

29 楼 gherb 2006-11-13  
类C语法绝对是高级语言世界的魔鬼.

描述性语言的语法根本不可能类C

ruby灵动的语法足以成为扼杀自己的隐患

28 楼 floating 2006-11-13  
bigpanda 写道
C语言是静态语言,(尽管是弱类型的),可是连命名域的概念都没有,一冲突糊涂到底。可见动静态和LZ说的冲突没什么关系。

笔误,我说的C应该改成C++。平时说习惯了,因为很少接触不支持C++的C编译器。
27 楼 bigpanda 2006-11-13  
floating 写道
cookoo 写道
至于第三方库,你说的冲突和命名域有关,和动静态没什么关系。

真的和动静态没有关系吗?似乎没有哪个静态语言的包管理会出现混乱的情况.从这点上至少说明静态语言的包管理要比动态语言容易些吧.


C语言是静态语言,(尽管是弱类型的),可是连命名域的概念都没有,一冲突糊涂到底。可见动静态和LZ说的冲突没什么关系。

Expert C Programming Deep C Secrets是一本很优秀的书,作者Peter van der Linden是Sun的资深工程师,书里写了很多很有趣的小故事,其中一个就是讲C语言因为没有命名域而引起冲突的。(第五章第125页)

辛辛苦苦敲进来:

引用

An Interpositioning Bug in SunOS

Under SunOS 4.0.3, the printing program /usr/ucb/lpr occasionally issued the error message "out of memory" and refused to print. The fault appeared randomly, and it was very hard to track down. Finally, it was traced to an unintended interpositioning bug.

The programmer had implemented lpr with a routine, global by default, called mktemp(), which expected three arguments. Unknown to the programmer, that duplicated a name already present in the (pre-ANSI) C library, which did a similar job but only took one argument.

Unfortunately, lpr also invoked the library routine getwd(), which expects to use the library version of mktemp. Instead, it was bound to lpr's version! Thus, when getwd() called mktemp, it put one argument on the stack, but the lpr version of mktemp retrieved three. Depending on the random values it found, lpr failed with the "out of memory" error.
26 楼 cookoo 2006-11-13  
floating 写道
cookoo 写道
至于第三方库,你说的冲突和命名域有关,和动静态没什么关系。

真的和动静态没有关系吗?似乎没有哪个静态语言的包管理会出现混乱的情况.从这点上至少说明静态语言的包管理要比动态语言容易些吧.

那DLL hell又是什么?
25 楼 Godlikeme 2006-11-13  
cookoo 写道


这里的常客都知道我几乎不在java版发言,我的钻石都是在ruby版赚的。被你说成’一直支持java'实在有够郁闷。

既然你已经意识到这种X vs Y的讨论技术的因素是次要的何必还计较那些数字呢?呵呵,相信自己的感觉吧。


抱歉,我是说“你认为,我是作为一个 java的支持者 而提出这样的问题”。
24 楼 floating 2006-11-13  
cookoo 写道
至于第三方库,你说的冲突和命名域有关,和动静态没什么关系。

真的和动静态没有关系吗?似乎没有哪个静态语言的包管理会出现混乱的情况.从这点上至少说明静态语言的包管理要比动态语言容易些吧.
23 楼 cookoo 2006-11-13  
Godlikeme 写道


很抱歉,我一直对robbin的说法将信将疑,但似乎你很确认。如果你认为这是Sun的人做的,数据可信度不高,这没什么问题。我也没有说会相信Tim Bray的数据,只是请robbin帮分析下。为什么会有这种差距,
摆事实讲道理才能让人信服。相比较来说,我更相信Tim一点。

BTW, It is funny that the people who imediately jump to Java's defense have never tried any of the alternatives, like PHP or RoR. We all need to keep an open mind.

如同上面这句话所说,似乎你一直以一个java的支持者看待我所提出的问题,很抱歉,不是这样的。

似乎我应该退出这些关于ruby,java,php的讨论,自最初我也没觉得讨论这些从纯技术角度有什么重要意义。
说太露骨就是利益集团的政治斗争,已有的既得利益者和未来的争食者。看java能不能倒下、ruby这杆大旗谁能先扛起来了。呵呵。静观其变吧。


这里的常客都知道我几乎不在java版发言,我的钻石都是在ruby版赚的。被你说成’一直支持java'实在有够郁闷。

既然你已经意识到这种X vs Y的讨论技术的因素是次要的何必还计较那些数字呢?呵呵,相信自己的感觉吧。

相关推荐

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    Java资源包01

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包7

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    用PHP和XML进行iPhone开发教程

    iPhone的软件开发包(SDK)基于标准的Dynamic HTML (DHTML),这意味着开发者可以利用他们熟悉的前端技术(如HTML、CSS、Ajax)以及后端技术(如PHP、Ruby on Rails、Java)来开发应用。 #### 三、案例分析:构建...

    Laragon:适用于现代应用程序的强大工具:Django,Rails,Laravel,Node,Go,Java-开源

    Laragon使编码更有趣,更容易。 即时设置-极其快速,轻巧,直观且功能强大的通用开发环境,可用于创建... 在MySQL,PostgreSQL,MongoDB,Memcached,Redis,PHP,Ruby,Python,Node.js和Java上可移植,可靠且零操作。

    programming-challenges:我觉得有趣的编程挑战

    "programming-challenges:我觉得有趣的编程挑战"这个主题集合了一些吸引人的编程任务,旨在锻炼和提升程序员的技能。这些挑战覆盖了多种编程语言,如Java、Python、JavaScript、C++、Ruby以及PHP,这意味着你可以...

    HeadFirst全集

    8. **Rails**: 教授Ruby on Rails框架的基础和高级功能。 9. **Python**: 引导读者掌握Python编程语言的基础和进阶知识。 10. **PMP**: 提供项目管理专业资格认证(PMP)备考指南。 11. **物理**: 结合IT背景介绍物理...

    表白源码-我想你需要.7z

    1. **编程语言和框架**:这些表白源码可能涉及到常见的编程语言,如HTML、CSS、JavaScript、Python、Java或PHP等。它们也可能利用了各种前端或后端框架,如Bootstrap、React、Vue.js、Django、Ruby on Rails等,以...

Global site tag (gtag.js) - Google Analytics