今天上午考完了《面向对象》这门课,往后一段时间就不用再接触继承(这还好)、Shadowing、Refinement、Overloading之类的概念了。相对来说我还是更喜欢可以快速开发的脚本语言的。
我们这门课接触了三门语言:Java,C++,和Ruby。纵观每次作业的代码量,Ruby是最少的。里面Java用的多,感觉还好。C++里面那些C的东西就太讨厌了,指针啊什么的传来传去,自己回收对象也容易犯错。编译器对包的控制也比Java落后,不像Java那样可以搜寻CLASSPATH里的类,而必须要自己来控制#include。总之,再怀念一次脚本语言。
我目前比较熟悉的脚本语言有四种(可能不严谨):Python、Perl、Scheme、Ruby,这个顺序是以我的熟悉程度来算的。之前也有花大半天时间来从零开始用PHP来写网站的,不过以失败而告终,我的眼还没有练就在一堆HTML tag里看出PHP语言的逻辑的境界,因此可以忽略。正好一门课告一段落,今天就记录一下我对它们的看法。
Scheme是我最想学好的一门。理由很简单,单就SICP在计算机界的地位就已经足够了。我买过裘宗燕翻译的中文版,也下载过作者放在网上的讲课视频,不过都没有什么精力自习看。其实Scheme很简单,这也是我喜欢它的原因之一,区区50页的R5RS对我很有吸引力。而且因为如此,要想查找一个什么函数也就很简单,因为实在没有太多需要查的。但Scheme蕴含的思想,也就是SICP里的东西,我还没有领悟。
我上学期用Scheme的次数比较多,那门“科学计算”课上的作业我没少用Scheme来写。奇怪的是我虽然不是很熟悉它,但我写的Scheme程序很少有错误,不知道是不是因为它的括号语法让我写起来必须要加倍小心的原因。另外一个因素可能是它的交互式环境更方便调试,我在上学期的“编程语言概念”课上用J语言的时候也很少犯错(不过J的语法我估计现在已经忘了)。
我机器上一直有scheme48。我遇到要进行数值运算的时候最喜欢用Scheme来作为计算工具。Emacs结合Scheme运行起来很方便。
Perl语言是我学的第一门脚本语言,因此我对它的感情很深。我的Perl入门读物是《Perl语言入门(第三版)中文版》。那本书翻译的相当不错,原作中幽默的笔调,译作中完全体现出来了,因此它是我那时候的厕上读物之一。可以说这本书打开了我对脚本语言喜爱的感情。不过那时候学习忙,没有时间实践,我多数时间是凭空看书,在脑子里空想。不过奇怪的是反而印象深刻。后来出于对Perl的喜爱,又去买了厚厚的“大骆驼书”──《Perl程序设计语言》。不知道是不是因为这书太厚还是因为翻译的问题,我读这本书的前半部分时感觉非常枯燥。因此我后来只看后面的专题部分,如POD、调试、C语言接口之类的。
Perl对语言格式的思路我非常喜爱,TIMTOTTDI。它衍生出来的种种Perl艺术也令我相当震惊。不过我对自己写Perl诗没有什么兴趣。不过因为学了面向对象,写了很多很长的程序,现在养成了把代码弄的很整齐的习惯,结果Perl代码我也是写的比较易读。
最近因为用了Movable Type的原因,我又拾起了Perl。处理HTML、XML的两个小脚本来获取dict.cn的翻译和Twitter到校内同步的工具我都是用Perl写的。期间有一种感觉,似乎Perl的实现比Python来的简单,更贴近于C。比如写往校内上修改status的时候,用Python怎么试都不成功,后来是用的Perl,就是因为对Python的字符串还不甚了解。另一个感觉是Perl更容易结合其它语言,而Python似乎更容易在自己的内部来工作。
我对Perl的负面感觉是没有交互式的界面。我用Python写程序时离开了交互式环境就没有什么思路,一定要先试验一下再整理初代码。写Perl的时候虽然不这样,但有时总感觉不方便。另一点是目前网上的中文Perl资料越来越少了,而且都不是很新。国内程序员追逐的风气在几年前就往Python移动了,近几年大概都转移到了Ruby上了吧。还有就是我用Python写多了程序后,再写脚本都容易忘了在句子的结尾写分号……
我学Python的时候有点障碍,当时看的是一本《Python宝典》,怎么也看不下去。当时冷静想了一下是因为看Perl太久了,对Python不习惯。后来出国以后我再逼着自己看《Dive into Python》,才可以开始使用Python。后来对Python熟悉之后就喜欢上了Python,不过对于Perl的感情还是无法取代。当时看了《Dive into Python》里处理HTML那一章后,在2007年圣诞那会写了段Python脚本来获取RubyConf 07的演讲视频,感觉不错。
不过我经常感觉Python有点“超出掌控”的感觉。经常会出现摸不着编辑的错误,尤其是字符串方面,弄的我挺郁闷。似乎相对与Perl,离C之类的低级语言更远了,因此也导致我不熟悉。另外,Python的面向对象机制我还没学通,因此Django之类的代码框架我就不大在行了。
我知道Ruby还挺早,记得高中时看过《程序员》上有文章介绍Ruby。当时的印象就是“日本人发明的语言”、“一切都是对象”。那时没有深入的接触Ruby,也没有想到后来RoR能如此之火。后来想用Rails写网站的时候看了一部分Ruby,感觉就是代码挺诡异(我觉得比Perl要诡异的多)。后来这门“面向对象”课上老师用Ruby来解释动态语言的面向对象机制,我算是多接触了一些Ruby,并用它写了此作业。不过这次的学习只是学Ruby里面关于面向对象方面的机制与语法,Ruby里面那些诡异的语句我还是不明白。