前几天,我在CSDN上见到了那个原教旨主义者,或者更精确些,原教旨主义程序员。他声称perl是一种邪教,理由大致是,一,perl不严谨,语法诡异,根据上下文(context,应该说“左右文”)不同,同样的语句会得出不同的执行结果。二,perl的创始人Larry Wall是个基督徒。他在该语言中传播自己的信仰,定义了“bless”这个关键字,还在写《启示录》。(我猜他是指Wall在use.perl.org/~Revelation/处写下的journal。)三,使用perl的很多人都声称它好,并向其他人推荐。他说,perl就像传销,你被骗了,所以你会努力去骗别人,而他则是一个站出来告诉别人不要受骗的人。他说,perler都是宗教狂热分子,不肯接受自己的理论,又找不到能说服人的理由来解释perl的诡异。他说,学perl就像吸毒。我告诉了你吸毒不好,你还要去吸,那是你的事情。他说,etc。我不知道他对邪教的定义是什么,是否任何不能在他接受的范围内自圆其说,还仍旧努力让更多人相信的信仰都可以称为邪教。那基督教算不算,ccp又算不算。而perler都是宗教狂热分子和吸毒者,先不讨论是否算得上蔑称,这个说法本身就不是一个持理性态度的人应该提出来的。我从他身上学到的东西是,可以说出自己的怀疑,但是应该考虑提出怀疑的方式。虽然几天以来,我发现对照于python代码的工整和自然,perl代码简直如同计算机终端的呕吐物,但是我仍旧捏着鼻子寻找,试图将perl看作一块臭豆腐,从而最后找到它的诱人之处。回想自己管窥的每一种语言,和目睹的每一场great language debate,我发现保持一种indifferent的视角是相当必要的:没有一种语言可以尽善尽美地满足一切需要,也没有一种语言在任何地方都优于其他语言。如果有这样的语言,那么其他语言都没有存在的理由了,如果因为喜欢自己最擅长的语言,就排斥其他的,后果就是固步自封,无所进取。最合理的态度是,按照效率来使用语言。在特定语境下,表达特定语义,何种语言最快捷有效,而且不仅仅是当时的效率,还有后期维护的效率。何时用C和汇编,何时用python和ruby,何时用java和C#,何时用lisp和scheme,是环境决策问题,无法衡量语言的优劣。当然,在某些场合下,某几种语言具有相近的特性,那么要考虑的东西就多了一些,但是那些仍旧和语言无关。过去我不喜欢java,因为我觉得它吹嘘了很多它其实不具备的特性,比如所谓跨平台:“一次编译,到处运行”分明就是胡扯,明明是“一次编译,到处调试”。不过现在好多了,我想大概是对语言的观察有一些更深层的领悟。不能因为某种语言不具有某种特性就贬低某种语言,必须看到它为达成该目标所进行的改进,以及认真分析该语言是否应该具有这种特性。我的印象里,许多C++程序员看不起VB程序员,认为VB是小孩子的玩意。但是作为一种简单易用的语言,无数高效(尤其是开发效率)灵活的工具由它产生,它所承担的实际应用并不比C++之类的工业语言少。如果OO会引入更多的复杂性,使得一种语言对于初学者(和那些仅仅想写点小东西的非专业人士)来说难以掌握(比如java),那么为什么他们要使用它?