我曾经发过这个比较,今天发的是第2版。为了和原来的比较,您可以查看 Python, Ruby和Perl。
这一年多以来,我使用Python的频率很高,可以说,现在我能熟练的使用Python。我用Python完成过以下功能:
(1) Telnet Server 和 Web 管理界面
(2) Clearcase 脚本 -- 查找最新版本是不是都打上了标签,某行代码是谁,哪一个版本第一次引入的,根据关键字自动设置view
(3) 测试 -- 模块测试,测试核对数据工具
(4) 代码生成工具
草草估计,应该也有5000行以上的代码。(Python 5000行代码不是Java或者C++)
我经常使用的一些Python Library:
socket
subprocess
re
string.Template
logging
unittest
sys
getopt
threading
glob
xml.etree.ElementTree
经常用到的Python“高级”技术是:
List Comprehension,这个我非常喜欢
类属性
反射
自己设计的异常
用到的设计模式:
Singleton (多线程和单线程都有)
State
Factory
因为无论是在工作的Solaris/Linux/Windows,还是自娱自乐的Mac上,这一年半以来脚本语言我几乎只用Python。坦白说,我对它的感情好了很多。我现在不讨厌写len(str)或者len(list),因为我已经习惯了。虽然缩进我仍然认为不太好,但实际工作中,我通常不会出现这个问题。这也许得益于我的Vim用的不错。下面我小小的总结一下Python的优点:
(1) 几乎任何平台都能跑,只要有支持C的编译器。我在Solaris, Linux, Mac和Windows上使用Python,版本都是2.6.x。我有计划升级到2.7.x,不是因为性能,是因为增加了一个类似于LinkedHashMap这样的container。
(2) 现在公司几乎都允许你使用Python(很多公司Ruby是不能使用的)。
(3) Python在Unix上的使用习惯和C/C++几乎一样,这个比Java好很多。你要在Java里面捕捉信号,或者要得到进程号,都比较复杂。后者甚至需要用到Native Interface,我曾经为Log4j写过一个插件。
(4) Python的库非常非常丰富。
(5) Python的性能不和Lua,但是比Ruby好很多。和Perl比较我不知道,但据说正则表达式的性能略差。但在实际工作中,Python的性能不是我的障碍。
(6) Python的文档现在觉得也不错,最重要的是Python的Tutorial写的真好。我建议新手看Tutorial,不用看其他任何书籍就可以开始工作了。
(7) Python的List Comprehension非常好用,怎么用怎么爽。这个Ruby比不了。
再来谈谈Ruby吧。其实我不知道有多少朋友是用Ruby,但是不用Rails的。以前我就是,自己用Ruby写工具。我写过百度mp3自动下载top100的工具,写过bug分析的工具。至今为之,我都觉得Ruby的语法很纯粹,用Ruby写程序很享受。我最近又拣起了Ruby,因为开始学习Rails了。怎么说呢,Ruby的语法太灵活,它有几个最大的特点:
(1) Block
(2) Meta programming & SDL -- 这个Ruby太强大了
(3) Rails
现在Rails没有前几年火了,但是Rails却成熟了很多 (Ruby也成熟了很多)。无奈,企业对Ruby的认知不如Python,Perl好。
最后说说Perl,今年我用Perl写了一段deliver的代码。写了一个Perl的Logger库,比较简单的。坦白说,Perl应该被淘汰了。它很难用,很容易忘记,需要记忆太多的潜规则。我知道很多欧美的“资深”企业还有很多Legacy的Perl代码和Perl(er),但是这们脚本语言老了,它不应该再在新的项目中使用。我不偏激,因为我用过。我们team最熟练的perl程序员都需要打印两张A4的纸,存放那些$?的符号是什么意思。Perl程序相对不好维护。我想不出使用Perl的理由,因为能用Perl的地方,几乎都可以使用Python代替。(他们告诉我,Perl(er)比Pythoner多,这个让我奇怪)。