Ruby 跟 Python 本质上不同

# 08 年的老文,但仍值得重读

对岸高手孟岩最近写了一篇「 Ruby 1.9不会杀死Python 」,里面提到Ruby 1.9一出,仿佛Ruby已经迈向完全体,所有的缺点都已经消失了。仿佛已经要一统武林

有人认为,这下子不得了了,Ruby要称霸动态语言了。你想想,Ruby已经几乎拥有了所有梦幻般的语言特性,神奇的动态能力,强大的支持库,内置的跟 Perl可以比肩的正则表达式,Smalltalk级别的纯而又纯的面向对象特征,简洁明快的风格,跨语言整合也非常容易,唯一的缺点就是速度慢。现在连 这个缺点都被弥补了,Ruby还能挡得住吗?其他的动态语言都该歇菜了。

然后他又提到一个很有趣的分类,Ruby是魔幻语言,Python是简约语言。Robbin老大也出来讲了 Ruby为什么会受程序员的欢迎?。一整篇看下来,实在是很过瘾。

简约语言

简约语言是什么呢?大致上是C、PHP、Python和Lua,C# ,Java。他的大概意含可以由Python 的中心思想EIBTI 可以略知一二

Explicit is better than implicit.

看不懂的话,用更白话的方式来解释,The Zen of Python 里面有提到

There should be one– and preferably only one –obvious way to do it.

也就是,Python 有意的限制语言的表示方式,使得不好的coding 习惯都不能Compile 过,有意的强制使用者养成良好的习惯。

这虽然极端了点,但也不超乎其他简约语言的中心思想。简约语言不关心语言的表述方式,他们在乎的是「解决问题」。以工程来看,简约语言在大专案里面的协同工作上面较为吃香。

魔幻语言

我很喜欢这个词。魔幻语言的代表有C++、Perl、Javascript和Ruby。中心思想可以由Perl 的TMTOWTDI 来表示

There’s More Than One Way To Do It.

魔幻语言的拥护者思考的东西,这位孟岩老大也描写的很传神

他们写的代码是一种谜语般的艺术,出谜语和猜谜语的人们都能从中获得巨大的精神满足

但是,请不要轻易的把Ruby归于「华而不实」这一派。Robbin老大也在 这里 讲到

C++的魔幻语法会导致代码的可读性变差,而Ruby的魔幻语法会导致代码的可读性大大提高。

不论是matz本人,还是整个Ruby社区,Rails社区诸多开源项目的作者,抑或整个Ruby和Rails开发者社区,在一个编程哲学问题上是高度统一的,这就是:

强调程序员的快乐编程,追求人性化编程,在代码的可读性上面有偏执的追求,拒绝难以阅读的代码和难用的API。也就是所谓的coding for fun!

Ruby 奇妙的手法,以及DSL 的技巧,都是为了达到跟Python 同样的Promise Land ,那就是「code 可读性」。只是两者作法不同而已。

两者的不同

两者最大的不同是在「 开发者的审美观以及开发风格 」上。不是语言的不同,是使用者个性上的不同。

回到开头的话题,Ruby是一个典型的魔幻语言,而Python则是简约派的代表。两个语言的支持人群在审美观念和开发风格方面差距非常大。初学Ruby 和Python的人,都会感受到一种欣喜和兴奋,但是原因却不太一样。Ruby的学习者会惊喜于很多新的表达方式,比如:attr_accessor 之类的魔幻特性,而Python学习者则会惊喜于实现具体功能的简洁性。可以说从一开始他们追求的就是不同的东西。随着学习的深入,Python开发 者当然也会发现Python中的不少深入的特性,不过却并不倾向于滥用它们。长次以往,Python人群对任何语言的魔幻面都会产生一种厌恶感。我认识的 一个Django开发者,就明确表示,就算RoR比Django开发效率高一点,也绝不使用Ruby,因为Ruby这个语言充满了“不必要的小聪明”。

高手果然是高手,好露骨的讲法。Python 人对于「语言的魔幻面」,或是你要称为「奇技淫巧」有种本质上的厌恶感,很多Ruby 人引以为傲的东西,都会被视为「恶魔」。尽管Python 也可以玩出些好玩的把戏,但是他们的中心思想让他们「选择不去作」。

而Ruby 正如上面所说得,Ruby 人会被鼓励使用「语言的魔幻面」,并且从中获得相当的精神上的乐趣。但是跟「华而不实」最大的不同,是在于Ruby 是利用语言的炫技,达到超乎想像的开发效率跟可读性。最后,伟大的杰作诞生了,Ruby on Rails 用本身的「魔幻面」,反而达成了比PHP 这种Web 专用的简约语言的更高的可读性。

本质上的不同?还是人的不同?

人的tone 不同,才是真正的问题所在。或许双子座的我,永远不会欣赏Python :p

奇想

不知道为什么,写这篇文章的时候,总是把魔幻语言想成魔法师,简约语言想成战士。所以脑中一直围绕着Ruby 是魔法技能点数10 的魔法师,前面还有一个血防加到满的战士在前面罩着(Java),然后组队一

from http://simple-is-better.com/news/385

发表评论?

0 条评论。

发表评论