我记得刚接触计算机的时候,我就受到了两个非常巨大的错误观念的影响,这个观念最初是来自于老师的传授还是学长的教诲已经记不清了,但是直到我工作几年以后,才慢慢有了实际的体会:
简直就是是胡扯啊。也许在某个极其狭隘的上下文中还能这样说,但是泛泛而谈,这样的态度无疑是误人子弟的。
就说第一条,编程语言不但重要,而且太重要了。换句话说,学习一门新的编程语言,可能学习的是背后的范型和思考问题的方式。如果这个部分能带来新的东西,那就是值得花时间投入的。
可能很多人和我的背景一样,熟悉Java和JavaScript,一门是经典的静态语言,一门是经典的动态语言。有人说相较而言,搞C++背景的人算法和数据结构基础更加扎实;而起初搞Java背景的人可能设计方面懂的多一点,但是水货更多;而说起JavaScript,就似乎更“低廉”了,虽说学好太难,但入门门槛超低。于是针对像我这样背景的工程师,我打算用类比Java和JavaScript的方式写一些新的编程语言的学习笔记,因为在我看来,用“类比”的方式是学习印象深刻,而且容易更容易理解的有效方式。以前也用类似的方式写过一些新技术的学习笔记,比如《GWT初体验》。但是通常要学习一门新的编程语言,尤其是从未熟悉的一个新的编程范型,学习曲线要比这个高得多。在我的脑海里有这样一个清单,记载了最想接触和熟悉的编程语言,这个清单最首要就包括:
当然还有其它的,有代表性的语言想深入研究,比如逻辑式的Prolog,还有可以写诗的Perl……但是也害怕吃得太多就会撑着。
Haskell之于函数,就像Perl之于字符串,就像Prolog之于谜题,就像Groovy之于DSL。
我会记录和讨论一些语言特性,但是不会去讨论大多数语法糖这样可能重要但是琐碎的部分。如果只是纯粹的学习笔记那多无聊啊,还不如把它写成吐槽帖。我争取从Java和JavaScript到Haskell和Groovy,对这四门语言,一个特性一个特性地横向比较,比如站在类型系统的角度,弱类型、强类型,静态的、动态的,类型之间的关系、类型创建等等;再比如元编程方面,Java的反射和代理系统,JavaScript的prototype,Groovy强大的元编程体系,还有Haskell的编译期元编程实现等等。