大学时上过两门程序设计语言课,分别是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这么庞大(也很强大)、复杂的东西只是浅尝则止就有暴殄天物之嫌了。想做一个好的程序员就是要偏执,无论用什么,都要写得一手好程序,不可敷衍了事。
对语言接触得越多,越觉得自己视野狭窄、能力有限。这些工具就像软件开发的血肉,只有它们的存在,开发过程才显得丰满充实。回想起自己无知也无畏的年代,不禁汗颜。