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),然后组队一

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。