我大体上对编程语言感兴趣。特别低,我一直对另一门编程语言 如何能够提供给我表达程序的新特性以及允许我成长为一名程序员 感到好奇。
我在校时学到了第一门语言。那儿的电脑——一屋子都是PET 2001,那时候他们是新潮的——只有BASIC,很快就让我失望了。在大学,我开始了一门Pascal的课程,闲暇做了很多编程。Pascal很快填补了我在BASIC发现的恼人的不足。
带着兴趣我学习了FORTRAN基础,但是从来没有真正用过。Modula 2 出现了,甚至有更大的编程分配,但是没有真正引起我的兴趣。我发现Ada更有意思,不过在进程控制课程之外很少有机会使用。我接触了一点儿Forth,但是再一次没有真正的应用程序来实践。
当我接触C时,最终被吸引住了。那是,最终的,“真正的语言”,在某种程度上,我可以完全掌控的一门语言,不仅在技术情景——对于我的大部分专业生涯,它是让我过得很好的主要因素之一。
我在大学还学了其它有意思的语言,比如,Tcl,不是最伟大的语言,但它是一个非常易于嵌入的解释器。很快,我把它嵌入了我写的每一个主要程序。我学了一点儿Prolog,但还不够,我很遗憾。
但是我对函数式语言产生了极大兴趣,并在那个领域取得了更多进步——主要是Lisp、Hope、ML,Lisp是我自己构建实现的唯一语言——或者,不止一个。起初对于一项任务,和一名合作学生一起,在Modula 2上。我们不喜欢那门课程里的某些要求,没有如此多的实现语言,因此随后,我们用C做了一个相似的。数年后,我用Java做了一个Lisp解释器,后来还用C做了另一个Lisp解释器。所有这些都不是真正完全的——特别是后面的垃圾回收有点儿着急,回收了它不应该回收的东东,但是两者都实现了一个小型但“真正”的Lisp,能够使用递归和高阶函数,有可用的基本内建命令。在此期间我用Go写了一个,它是它们当中最完整的,尽管还在我收藏的玩具语言分类、而不是有用的编程环境。
正如前面提到的,C对于我的大部分专业工作是有帮助的,也是我目前在用的。但是其他语言进入了视野,主要是Perl。当我想尝试某个东东或不得不只实现一点儿功能时,Perl甚至变成了我的默认语言。这不是因为我对Perl的技术有点有着高度评价,不过它随处可用,每个人了解它,因此和C比起来,很多事情用Perl不可否认地更加容易,所以Perl已经变成了一种习惯。虽然我不是Perl的最大粉丝;我发现它处处不雅和粗野,总在试图鼓励其它语言的有疑问的编程习惯。还有,它用相对较少的努力就能把事情搞定。
在此过程中还有其它语言我发现有意思,但是没有找到足够时间(或实践机会)去真正学习它们——LUA、SNOBOL,APL(或J)浮现在脑海。我迟早不得不要用JavaScript工作,但是我认为它非常无聊。
然后我看了越来越多的Go。Rob Pike的一篇文章最终让我深入进去,关于我一直想去做的东东。现在它貌似是一门好的语言,内建了伟大思想,还有继承了与C和其后代语言一起成长的程序员的习惯。Go有潜力把我带回20年前我脑子里充满C的那种愉悦,结合了一门最终的优雅语言(虽然不如Lisp或更加现代的函数式语言优雅)的舒适和实用(像Perl)。我将拭目以待;现在除了一些简单程序和用Go实现的上面提及的Lisp解释器,我没有做更多。
后来有了Haskell。我在90年代早期就对Haskell感到好奇,当时我做为一名学生(参考上面)接触了其它函数式语言。有人给我一篇关于在ACM SIGPLAN Notics上面的Haskell的文章。Haskell那时候还是新的,但是它已经成长了数十年,它仍然存在,我认为这是好的信号。由于我总是喜欢函数式编程,这或许是我一起成长的语言。
现在对我来说,采用一门新语言的最大障碍不是学习的难度和为了实际任务的加速学习,而是其他人。让我遗憾的是,我的工作场所有一种文化,人们大部分在独立地做他们的开发项目,当原作者在度假、或者原作者离开后做进一步开发时,其他人能够修复问题,这仍然被认为是重要的。当然我同意这一点。但是当其他人只是对同样事情不感兴趣时,才会使得采用一门新语言变得困难。哎,他们好像不是这样。
除了使用shell脚本,我们工作时用C,差不多也用Perl,不过我爱用Go或Haskell工作。我愿意在工作中使用,来让我的工作更加简单和有趣。但是由于没有人能够接手用这些语言做的项目,我还不能那样做。(有个人对Go有足够的兴趣,我猜的,但他是名学生,一两年后会离开我们。)太让人失望了。或许我应当尽量发起 下一步我们应当采用哪种语言的 某种共识——不过我担心兴趣不够而剩下C和Perl的老路。毕竟,他们已经采用Perl做为一门新语言甚至不到20年,那么,为什么同样的情景这么快就再来一次呢?