当前位置: 首页 > 科技观察

从Java和JavaScript学Haskell和Groovy

时间:2023-03-13 06:03:46 科技观察

记得刚接触计算机的时候,受到两个非常巨大的误解影响。记不清这个概念最初是老师教的还是前辈教的。很清楚,但是直到工作几年后,我才逐渐有了实际的体会:学习和使用什么编程语言不重要,重要的是算法和设计;程序员学习的本质就是面向对象设计模式,掌握之后,无所不知。纯属无稽之谈。或许在极其狭隘的语境下还可以这么说,但笼统地说,这样的态度无疑是误导人的。就说第一点,编程语言不仅重要,而且太重要了。也就是说,学习一门新的编程语言可能会学习到它背后的范式和思考问题的方式。如果本节带来新的东西,那么花时间是值得的。很多人可能和我有相同的背景,熟悉Java和JavaScript,一个是经典的静态语言,一个是经典的动态语言。有人说,有C++背景的人,算法和数据结构基础更扎实;而有Java背景的人可能更懂设计,但水货更多;而说到JavaScript,它似乎更“廉价”。“是的,虽然学好太难了,但是入门门槛极低。所以对于像我这样有背景的工程师,我打算用Java和JavaScript类比,写一些新的编程语言的学习笔记,因为在我看来,使用“模拟”的方法学习起来印象深刻,而且是越来越容易理解的有效方法。我以前也用类似的方法写过一些新技术学习笔记,比如《GWT初体验》。但是平时学习的时候一门新的编程语言,尤其是你从来不熟悉的新的编程范式,学习曲线比这高很多。我脑子里有这么一张清单,记录了我想接触和成为的编程语言最熟悉的这个列表首先包括:Groovy,学习Groovy是针对“动态语言”,动态语言是针对“元编程”,“动态”是指在程序运行过程中可以改变数据类型的结构。换句话说,它是围绕“元编程”产生的一个特征。元编程是指在运行时改变一个“类”的定义,如访问、添加或修改等,简单来说就是“用程序写程序”。Groovy是最接近Java的动态语言。2007年底,我接触了一段时间的Groovy程序,也和当时的Groovy中文社区的站长混在一起。不幸的是,我太喜欢我想念的东西了,我仍然不太活跃。在最新的TIOBE排行榜上排在第36位,很有意思。更何况第35位是Scala,真是个难兄难弟。这是一个简短的段落。Groovy的作者JamesStrachan说,如果他当年看到Scala,就不会有Groovy这样的东西了。即使有这种自掘坟墓的追求,现在看来Scala的命运也好不到哪儿去。JavaScript也是一门动态语言,为什么要接触Groovy?一个重要的原因是元编程功能太丰富了。哈斯克尔。纯函数式语言。“纯”这个词可以这样理解:有些语言“可以”进行函数式编程,而有些“不得不”进行函数式编程。编程语言发展的两大趋势是动态语言和函数式语言。所以有了Groovyfordynamiclanguage,我一直想学一门函数式语言。函数式编程就像数学中的函数。当输入参数唯一给定时,输出结果可以唯一确定,不受上下文的影响,不受执行次数的影响,或者说是天然幂等的。网上批评Haskell过于学院派的文章太多了,甚至教科书都用Scheme来教函数式编程(因为更容易学,也没有那么复杂的类型系统),但无疑是非常好的拓宽你的视野(“代码可以这样写!”),特别喜欢模式匹配功能。当然还有其他的,比较有代表性的语言我想深入研究一下,比如逻辑Prolog,还有会写诗的Perl……不过我也怕吃多了会拖后腿。Haskell之于函数就像Perl之于字符串,Prolog之于谜题,Groovy之于DSL。我将记录和讨论一些语言特性,但不包括可能重要但微不足道的部分,如大多数语法糖。如果只是单纯的学习笔记,多无聊,不如写成吐槽帖吧。我力图比较从Java、JavaScript到Haskell、Groovy这四种语言,一个一个特性,比如从类型系统的角度,弱类型,强类型,静态,动态,以及类型之间的关系,类型创建,ETC。;比如在元编程方面,Java的反射和代理系统,JavaScript的原型,Groovy强大的元编程系统,Haskell的编译期元编程实现等等。