为什么我选择了Ruby而不是Python

Python019

为什么我选择了Ruby而不是Python,第1张

伴随着RoR的风行,Ruby语言受到越来越多的开发者的关注,同为脚本语言,Python的地位却略显尴尬,什么样的原因,造成了这样的局面?

笔者认为有以下几个方面:

一、 RoR的推波助澜

笔者认为,Ruby的成功,很大一部分是由于RoR的带动。

几年前,如果你没听过RoR倒是情有可原,但如果今天,RoR对你来说,还是一个陌生词汇的话,那你就有点危险了。:)

什么是RoR呢?

全称,Ruby on Rails,简称,RoR或者Rails。

它是个全栈的(full-stack)web应用框架,它为开发者提供了构建一个web应用所需的完整基础结构,并且严格按照MVC(模型-视图-控制器)架构进行开发。

RoR致力于提高开发者的开发效率,希望通过尽量少的代码,完成尽可能多的功能。基于这样的考虑,RoR有两大设计原则,一是,不要重复自己 (Don''t Repeat Yourself);二是,惯例优于配置(Convention Over Configuration)。

使用RoR,你甚至可以通过简单的几条命令行、几行代码,就完成一个功能强大的web应用程序,这极大地提高了开发者的开发效率。

2004年7月,RoR一经发布,在短期内,便受到很多开发者的追捧。时至今日,RoR已经被全世界的开发者们所关注,它带给开发者的效率提升,是前所未有的;它带给业界关于软件开发的思考,也是意义深远的。

在RoR如此风行的大背景下,Ruby on Rails,这个需要使用Ruby进行开发的web框架,也自然地带动了Ruby语言的发展。

在下面的“Ruby语言受关注程度趋势图”上,可以清晰地看出,Ruby语言在RoR发布也就是2004年7月后,进入了高速发展期。

Ruby因为有了RoR这样的“杀手级”应用,变得春风得意,那么Python呢?

在《浅谈Python语言》一文中,我们提到了Python具有丰富的API库,在web开发方面,也有Django、Turbogears这样的一些框架,就运行速度而言,

Python比Ruby快;就社区而言,Python也比Ruby成熟,可是为什么Python没有产生一个像RoR这样的“杀手级”应用呢?

Python语言的创始人Guido在接受InfoQ采访时,是这样解释的:

“我不喜欢Killer

Application,因为那会让多数人或者社区将精力集中于一个地方。Python是一个应用广泛的语言,基于Python已经产生了很多好用的

Web框架,比如Django等。但是Python不Killer

Application,至少目前是这样,而且我相信随着Python社区的发展,会有很多Killer

Applications自然出现。我喜欢多样化的应用。”

通过这个观点,我们可以看出Python在其发展道路上,追求的是一种均衡,一种“大而全”。

“会有很多Killer Applications自然出现”,这点,我想我们需要拭目以待。单就“均衡”而言,笔者认为这很危险,作为一门脚本语言,试图做Java之类传统语言做的事情,不太可取。

以Java为例,在web应用上,有太多的框架可供选择,不错,“在不同的场景用不同的框架”,这想法很好。可是,在实际应用中,有多少开发者可以根据项目特点,正确、合理地选择框架?

与其到最后,用户还不知道该如何选择,还不如一开始就替用户做出一个选择。

作为Python的使用者,我更愿看到有个Python的“杀手级”应用出现,进而带动Python更快速地发展。

你可以说RoR成就了Ruby,可是Rails为什么偏偏选择了Ruby?!Ruby优势何在?

二、 Ruby的优势

1. 比Perl更强大,比Python更面向对象

“比Perl更强大,比Python更面向对象”,这是Ruby创始人Matz设计Ruby的初衷。

Python既支持面向过程的编程也支持面向对象的编程,而Ruby则是完全面向对象。

在Ruby中,任何东西都是对象,包括Python中的基本数据类型;每个过程或函数都是方法。

例如,取-3的绝对值,在Python中,是这样的:abs(-3)。

而在Ruby中,则是这样的:-3.abs。这种OO的方式,显得更加直观。

2. 强大的语法功能

单就语法的简单性而言,Ruby不及Python。但解决一些较复杂的问题,Ruby强大的语法功能,有助于降低问题的复杂度。

例如:

Ruby以“块”的方式来实现列表内的条件、循环语句,比Python的更灵活、更具通用性。

Ruby具有类似Lisp的彻底的函数方式的条件、循环语句等。

Ruby的迭代器功能可以将流程控制结构抽象化。

3. 强大的字符串处理、正则表达式功能

Matz认为:Ruby >(Smalltalk + Perl) / 2。

Ruby类库是对Perl语言功能的面向对象方式的重组,因为借鉴了很多Perl的东西,使得字符串处理、正则表达式这块,Ruby同样强大。

4. 不会僵住的“胶水语言”

同样是“胶水语言”,Ruby比Python更灵活。

使用过一段时间的Python,你会发现,Python比较依赖第三方的东西。相比较,Ruby则更依赖自身。例如,Ruby可以使用(UNIX的)绝大部分的系统调用,单独使用Ruby也可以进行系统编程等。

有优势,Ruby就一定可以成功了?Python同样也有很多优势!对,还得看当时所处的环境。

三、 时势造英雄

这点还得回到RoR的崛起。

Ruby,1995年12月正式发布,2000年进入美国;2004年7月,RoR正式发布。

RoR的出现时间,值得玩味。

在下面的“Java语言受关注程度趋势图”上,可以看到,2004年7月前后,Java处于一个相对“衰退期”。

提到Java,大家应该都会想到J2EE。

J2EE应用程序的广泛实现是从1999、2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是因其开发效率、学习难度和实 际性能的问题,在实践中没有获得完全的成功。作为J2EE核心技术的EJB(2.x),更是因其高昂的学习代价、极低的开发效率和极高的资源消耗,备受指 责。

在这样一个大背景下,2003年,Spring框架诞生了。

Spring的设计思想在于“使J2EE开发更加简单”。这个设计思想,在包括Java领域在内的众多软件开发领域引起了广泛关注。软件开发者们开始思考,如何让开发向着一个更简单的方向发展。

RoR在这一时期出现,无疑是顺应了这样一个潮流。

可以这么说,是历史选择了RoR,当然也选择了Ruby。

遇到合适的机遇,还不够,俗话说得好:“众人拾柴火焰高”。

四、 众星捧月

Ruby的出现,受到了两大主流平台Java和.NET的极力追捧。

2006年9月,SUN雇佣了JRuby的主要开发者Charles Nutter和Thomas Enebo;一年不到,2007年6月14号,JRuby 1.0正式发布。SUN在其Java IDE NetBeans 6.0 M10中,更是集成了对Ruby/JRuby的支持。反观Python的Java实现——Jython,则没有这么幸运,发展至今,它并没有得到SUN的 支持。

而Microsoft,也在2007年7月,推出了Ruby的.NET实现——IronRuby的预览版。

相信SUN和Microsoft对Ruby的竞相推崇,必然推动Ruby的进一步发展。

基于以上几点,笔者认为Ruby的成功不是偶然,并且相信这样的成功还会持续下去。对于Python的未来,我们也将拭目以待。

perl基本已经被淘汰,在各方面几乎已经没有优势,虽然说还正在开发perl6啊什么的,不过基本上大势已去。虽然在部分场合还有应用,不过大部分都只是因为历史遗留问题而已,也就是说一些老软件用这个,部分地方还因为各种原因没去替换这些老软件而已。

从web的角度来看,这四个语言都做过web开发,不过后来php代替了perl。而现在作为python的django构架和ruby的Ruby On Rails构架正在逐渐代替php。因为php也有其天生的缺憾,例如对于模板分离式编程不是天生的支持导致的。所谓模板分离也就是由网页制作和美工人员写纯网页,又程序员写纯程序,然后二者结合。在这个模式之前就是典型的php默认,代码和页面都是一个php文件并未分离。

不过php在现在还是有其顽强的生命力的,这也是有其历史遗留原因的,毕竟太多大型网站、大型项目都使用php,一时之间改变还很难。

排除web构架以外,python和ruby都差不多的,其对各种库的支持也都相似。总体来说现在python的普及率要高一点,可能因为一种先入为主的优势吧。高就高在几乎所有linux发行版,OSX系统都自带python,但是ruby则不然。

python在某些非常轻量级的桌面任务上可能也有优势,因为自带一个gui库,tinkter,不过这一点优势应该很小,因为毕竟太轻量级了,就是说太简单了,用处一般。

从语法的角度来说,未来肯定还是python、ruby这种开发更简单的语言的天下,php还保留着c/c++遗留下来的各种语法诟病,要是只论纯开发速度肯定不如python、ruby的强,这里主要说的web,因为php开发桌面程序那还是随便玩玩的,虽然有吧。

Ruby和Python都是基于Web应用程序和Web服务的编程语言,这两种语言有一定的相似之处,所以很多人就喜欢将这两者进行对比。那么ruby和python到底哪个强大呢?

Python

Python采用的是直接编程方法,主要目标的是使程序员显而易见。在Python中,只有一种“最好”的做法,这种理念导致了Python严格的语言布局。

Python的核心理念包括三个关键的层次原则:显式优于隐式、简单比复杂好、复合胜于复杂。

以上三个原则使得Python更加易于学习和阅读,同时这也是Python受到编程初学者青睐的原因。Python在介绍性编程课程中占有重要地位,语法简单,易于理解,另外Python的代码结构明确,开发人员可以很容易的定位错误,实现调试。

相关推荐:《Python教程》

Python的原理层次在语言的许多方面都是显而易见的。它使用空白来做流量控制作为语言语法的核心部分与大多数其他语言(包括Ruby)不同。缩进代码的方式决定了其动作的含义。这种空白的使用是Python“明确”哲学的一个很好的例子,Python应用程序的形状说明了它的逻辑和应用程序的行为。

Ruby

与Python相反,Ruby专注于“人类语言”编程,其代码阅读起来更符合人类的习惯,而不是机器的习惯。Ruby的发布者Yukihiro Matsumoto表示:“我设计Ruby来是我的惊讶最小化,我现在可以肯定全世界的程序员的思维都是相似的。”不同的情况,Ruby都可以不同的方法来实现相同的事情。

与Python不同,Ruby有一个“块”的概念,块由大量的代码组成。Ruby将OOP(面向对象编程)的概念发挥到了极限,一切都可以是一个对象,甚至全局变量都是在ObjectSpace对象中表示的。

类和模块本身是对象,而函数和操作符则是对象的方法。这种组合让Ruby变得十分强大,当然除了这些,Ruby的函数编程和lambdas函数也不容小觑。Ruby的粉丝认为它的优雅也是其顶级卖点之一。Ruby的“magical”功能和灵活性可以很好地跟踪错误。

社区:稳定与创新

虽然功能和编码理念是一门编程语言兴盛的主要驱动力,但是社区的贡献也是不容小觑的。而我们今天的主角Python和Ruby都拥有强大的社区。

Python的社区包括一个大型的Linux学术社区,因此会有很多数学和科学的学术用例。这种支持为社区提供了稳定性和多样性,未来随着Python在Web开发中的应用越来越多,用例也会增长,社区的作用会日渐重要。

Ruby的社区主要侧重于Web开发,与Python相比,Ruby社区的创新性更强,但是有时创新也会导致很多事情被破坏。此外,Ruby社区也比之前更加多元化,但距离Python的多样化水平还有一定差距。

总结

对于Web开发来说,Ruby和Python都有各自的优势,分别是Rails和Django这两个强大的框架,但是真要说哪个更强大,这个真的无法下定论,只能说各有各的优点,最终决定哪个好用的,还是你的编码水平和经验水平。