Home > programming, python > 对 Python 和 Ruby 的一点看法

对 Python 和 Ruby 的一点看法

February 27th, 2008 Leave a comment Go to comments

还是从我在 Ruby 和 Python 上的经历说起吧。

大二暑假的时候学了 Ruby,但是到现在为止只用 Ruby 做过文本处理,还有一次做 Linux 网络编程作业的时候用 Ruby 实现了一个服务器的原型,还稍微尝试过一下 RoR,不过因为我对 Web 开发没什么兴趣,所以是浅尝辄止而已。平时自己机器上能够用到的 Ruby 程序也只有 deplate 而已。

今年寒假的时候开始考虑毕设的事情,考虑实现语言的时候也曾考虑过 Ruby。但是我要用的 dazuko 的 Ruby 绑定可能存在内存泄漏的问题,引起内存泄漏的原因应该在 Ruby 的实现上。考虑到 Python 的实现更成熟,对于要求稳定的系统程序来说可能更为合适而开始考虑 Python。于是开始看 Dive Into Python,被这本书吸引而继续学下去。我之前的介绍过这本书,很欣赏它。

最经开始更多的实际使用 Python 了,很自然的会想把它跟 Ruby 做些比较。因为我对 Ruby 和 Python 的语法和特性的了解只是一般而已,所以对语法的比较我说不出太多的东西。在我看来语法上来看它们相似的地方多于不同的地方,在它们中进行切换是很方便的。我很喜欢 Ruby 的 block 语法,但 Python 有 list comprehension 和 generator,很多 block 的用法都可以用它们来完成,所以我并不会在使用 Python 的时候非常的渴望 Python 也有 block 语法(仅有的时候是文件打开完成任务以后自动关闭这种地方,Python 里还没有很好的解决)。就语言本身来说我更喜欢 Ruby,个人觉得用 Ruby 写程序更为舒服,而且通常完成同样任务的 Ruby 程序也比 Python 更短。但是 Python 的优秀的社区使我选择 Python 而不是 Ruby。

在 Python 和 Ruby 中我只想选一个,用它来完成一些 quick and dirty 的任务,我希望一切越简单越好,最好就是别人已经帮我完成了,直接拿来用就可以。随着越来越多的使用 Python,看到 Python 社区所完成的工作,我觉得 Python 才是这一任务更好的选择。Guido 在一次访谈中说:

对于杀手锏应用(killer application),我个人并不十分迷信。如果你太看重杀手锏应用的话,实际上你可能会把焦点放错地方,或者你可能太专注于某一个方面。

以前对这话觉得不屑,觉得是酸葡萄心里而已,现在越来越觉得 Guido 是对的。Python 现在已经进入很多领域,在科研领域,已经出现像 NumPy, SciPy 这样优秀的软件。我也看到生物信息学研究者写的用 Python 编程来处理生物信息学问题的文章。在图形处理方面也有了优秀的软件,如 PIL。而 NASA, Google 等组织也在大量使用 Python。而在 Web 开发框架上,Python 有不止一个,另外还有像 twisted 这样高层的互联网应用程序开发框架。实现上 CPython 比 CRuby 也要成熟,两者都有许多实现,以前很看好 Rubinius,但现在我知道了 PyPy,如果 Rubinius 能够使得 Ruby 在性能上有很大的提升,那 PyPy 肯定也能,事实上 PyPy 现在应该比 Rubinius 更成熟。而我现在自己常用的 VCS 工具 Mercurial 就是用 Python 实现的。

从使用的广泛程度来说 Python 目前远超过 Ruby,记得 2008 年 1 月的程序设计语言使用广泛度统计中 Python 排名首次超过 Perl,而 Ruby 的排名反而下降了。不知道是因为 Python 有大量优秀的软件导致大量的使用,还是因为大量的使用导致有如此多优秀的软件,但现在的社区已经使得这两个方面可以互相促进,形成一个良性循环了。如果 Python 社区的注意力都集中在 Web 开发上,或许它可以出一个类似 RoR 的 killer application,但它就不会产生如此之多不同领域的优秀软件,也会使得 Python 的使用达不到如此广泛的程度。在我看来这是得不偿失的。

即使我不喜欢 Python 中一些 Guido 强加给我的限制,但是只要它能够让我把那些 quick and dirty work 以最快的速度最小的精力做完,我就不在乎,而那些限制在构建大型软件上可能反而能够带来好处。如果哪天 Ruby 能够像 Python 社区这样成熟,提供更多的优秀的软件,那我在解决个人的 quick and dirty work 时就会选择使用 Ruby。但是现在,我选 Python。

我仍然会花时间去学 Common Lisp,但 CL 现在不擅长跟 OS 和其他基础设施交互,所以我不会用它来完成日常的工作。我目前只打算想把它作为一个研究性质的语言,满足我对程序设计语言本身的兴趣。一方面,SLIME 提供的交互式的开发环境更加合适探索性的任务(ipython 虽然不错,但是跟 SLIME 和 CL 提供的环境比起来还是差了点);另一方面,正因为有许多工作在 Common Lisp 中还没有完成,我可以尝试自己来研究解决,在其中得到锻炼。我也希望在真正领悟 Common Lisp 的时候我能够成为一个更好的程序员。

语言的选择并不是至关重要的,但是我希望能够使用一个使得编程更加有趣的语言。以前在语言上花了太多的时间,现在决定把语言逐渐固定下来,把注意力放到更加重要的问题上,为我以后的研究做准备。

PS:
现在在浦口每天的时间都可以自己支配,太爽了 :-)

不过想看的书太多了宏观经济学(微观已经看完了),算法导论,线性代数,Ansi Common Lisp,还要每天在毕设上投入一点时间(现在还在准备阶段),再加上要利用本科最后这个学期好好练小提琴,有点安排不过来了。为了集中精力,有些书看了一点又要停下来了。

最近回到浦口真开心,爱死浦口的食堂了 :-) 我现在的日子跟查师兄去年的比真是太舒服了,这两天有点堕落,明天起要鞭策自己努力了。

  1. Minjie Zha
    February 27th, 2008 at 18:07 | #1

    同意你的观点,我现在也渐渐体会到了语言只是帮助你更快更好完成任务的工具了。不过有时候还是会很神经质的推崇某种语言。
    居然我比我那时候还舒服!要不顺便谈个黄昏恋吧。

  2. chenyufei
    February 27th, 2008 at 18:17 | #2

    恋不恋的看缘份了 :-)

    不过很多大牛都认为有些语言是可以改变你的思想的,所以一直坚持要把 Lisp 学下去。

    John McCarthy 除了 Lisp 以外还弄了个语言,Elephant 2000,不过现在还是不看了。

  3. February 27th, 2008 at 20:27 | #3

    哈哈,今天在网上偶然搜到这篇文章。发现竟然是刚刚发表出来的。
    更令我惊讶的是,作者是南大软院的。我也曾经是的!
    个人也觉得python很棒!快速开发很合适。ruby相比python没有明显的优势,加上又是日本人的东西,担心不懂日语会学不到最新的知识,所以暂时不打算深入学。
    浦口是个适合做项目的地方,我很怀念!

  4. February 27th, 2008 at 22:58 | #4

    Ruby 不太清楚,不过Python 的确是给程序员用的,比如循环后面带个else阿,高度抽象的模块啊什么的。
    LISP 是可以带在身上一辈子忘不掉的功夫

  5. Minjie Zha
    February 28th, 2008 at 09:08 | #5

    哈,Peter Liu 好久不见阿。

  6. chenyufei
    February 28th, 2008 at 14:10 | #6

    呵呵,没想到这篇文章能引来这么多南大的师兄评论 :-)

  7. Vinx
    February 28th, 2008 at 17:34 | #7

    那我东大的同乡也来插两句,Python用的的确很广,哪怕是在嵌入式领域,比如希捷的硬盘生产过程中大量使用了python作为测试脚本,呵呵,

    P.S 浦口真的适合学习与看书,不过对我这种喜欢玩的人来说真是个令人沮丧的地方:)

  8. chenyufei
    February 28th, 2008 at 17:42 | #8

    以前生活在浦口也有点沮丧的,但去过上海以后发现反而更喜欢浦口这里的生活。

    Vinx 在希捷工作过?看你 Blog 应该在南京工作吧,我只知道希捷在无锡有工厂。

  9. Vinx
    February 28th, 2008 at 19:52 | #9

    我去无锡希捷玩过,我在南京,感觉无锡还是没有什么做技术的公司….

  10. Vinx
    February 28th, 2008 at 19:59 | #10

    另外,我对上海也没有什么好感,我在上海也待过一段时间,太商业化,交通很不方便…..我还是更喜欢南京,尽管工作机会少,尽管收入会少,但是南京能给我温暖的感觉,上海则没有…

  11. vernkin
    February 29th, 2008 at 09:34 | #11

    很神经质的推崇某种语言的人可能有着与其它人不一样的眼光,呵呵,看自己的爱好吧。
    现在不在学校,和chenyufei相比,最令人沮丧的就是不能”每天的时间都可以自己支配”了……
    管是”黄昏恋”还是什么,有机会先谈吧 (*^__^*)

  12. March 20th, 2008 at 16:35 | #12

    浦口的过来人,很怀念啊。python入门中。

  13. March 28th, 2008 at 09:58 | #13

    楼主,python也可以自行关闭打开的文件的:)
    你可以看看with语句,python in a nutshell 2e有详细介绍。

  14. chenyufei
    March 28th, 2008 at 15:13 | #14

    嗯,谢谢!

    在 Python 文档里面看到了。不过 with 在 2.6 里面才会默认启用。

    手头没有那本书,看了 PEP 0343 对 with 的说明。

  15. April 15th, 2008 at 13:40 | #15

    就是觉得python的GUI框架们不是很好用…

  1. No trackbacks yet.