习惯写程序解决问题

同事指出一个错误,存在于五六个文件中,每个文件里有那么几处,我答应马上改掉。一会儿同事来看,发现我在写Perl脚本,惊呼:“这也要写程序啊?直接改改好啦!”

我这么做有两个目的,一是检查,同类型文件很多,万一有所遗漏,岂不显得很不专业。二来最近Perl用得正爽,顺便玩玩。事后估算一下,所用时间与逐个手工修改差不多,也许还要多一点,区别是写程序很有趣,手工改十分枯燥。

写这段脚本的时候特意没有加use warningsuse strict,Perl的精神就是对于用过一次就扔掉的一小段程序,用不着写防御性代码。我以前写脚本时不管长短,都是顺手写上这两句,看似严谨,实则多余。

工作两年(六)——进入非C/C++语言的世界

大学时上过两门程序设计语言课,分别是C和C++,另外做项目用过Delphi,自学了点Pascal。后来读研的时候,正赶上C++学习热潮,跟着啃了几本名著,算是入了门,也是从那时开始,对程序设计着了迷。

工作之后,由于工作需要和个人兴趣,陆续接触了Perl、Emacs Lisp,还学了Shell编程以及一些标记语言如HTML和XML,每样都沾一点,但都学得不精,可以说这两年主要是一个开阔视野的过程。开始学HTML是为了写文档,因为不想用Word。后来还接触了一点CSS知识,才发觉网页设计也有很多变化和技巧,于是便试着美化我的blog。学Emacs Lisp是为了更好地使用、定制、甚至扩展Emacs,在05年春节利用假期时间把Introduction to Emacs Lisp和The Emacs Lisp Reference Manual通读了一遍,获得了一些感性认识,这些知识对于我后来深入学习Emacs很有帮助,虽然现在还无法做到用它来写程序,但由于能看懂一些,通过阅读代码,我就能掌握一些帮助里没有的知识。Dynamic scope的概念也是这时候碰到的,对我后面学Perl也起到了一定的作用。

学习Perl和XML则是为了做测试,由于公司QA人手不够,我就接手了部分测试工作,主要是开发测试环境,使用的语言就是Perl。想把Perl学精还是很有难度的,但上手却比较快,像Learning Perl讲授的知识有限,但也足够做些事情了。然而我感觉,越是上手快的语言越容易写出垃圾程序,因为很容易被表面现象所迷惑,不肯深入钻研这门语言的精髓。我认为,Perl的字符串处理、正则表达式和符号系统三个方面非常重要,Mastering Regular Expressions是讲正则表达式最好的一本书,到目前为止无出其右者,这在百花齐放的程序设计领域里显得很另类;而要深入理解Perl的符号系统,一定离不开Advanced Perl Programming,我还从这本书上学会了如何写Perl Module。学Perl不能光是看书写代码,Perl Cookbook要看,一些常用Module的代码也要看,对于Perl这么庞大(也很强大)、复杂的东西只是浅尝则止就有暴殄天物之嫌了。想做一个好的程序员就是要偏执,无论用什么,都要写得一手好程序,不可敷衍了事。

对语言接触得越多,越觉得自己视野狭窄、能力有限。这些工具就像软件开发的血肉,只有它们的存在,开发过程才显得丰满充实。回想起自己无知也无畏的年代,不禁汗颜。