从Java和JavaScript来学习Haskell和Groovy

简介:


我记得刚接触计算机的时候,我就受到了两个非常巨大的错误观念的影响,这个观念最初是来自于老师的传授还是学长的教诲已经记不清了,但是直到我工作几年以后,才慢慢有了实际的体会:

  1. 学习和使用什么编程语言不重要,重要的是算法和设计;
  2. 程序员学习的精髓是面向对象的设计模式,掌握以后,一通百通。

简直就是是胡扯啊。也许在某个极其狭隘的上下文中还能这样说,但是泛泛而谈,这样的态度无疑是误人子弟的。

就说第一条,编程语言不但重要,而且太重要了。换句话说,学习一门新的编程语言,可能学习的是背后的范型和思考问题的方式。如果这个部分能带来新的东西,那就是值得花时间投入的。

可能很多人和我的背景一样,熟悉Java和JavaScript,一门是经典的静态语言,一门是经典的动态语言。有人说相较而言,搞C++背景的人算法和 数据结构基础更加扎实;而起初搞Java背景的人可能设计方面懂的多一点,但是水货更多;而说起JavaScript,就似乎更“低廉”了,虽说学好太 难,但入门门槛超低。于是针对像我这样背景的工程师,我打算用类比Java和JavaScript的方式写一些新的编程语言的学习笔记,因为在我看来,用 “类比”的方式是学习印象深刻,而且容易更容易理解的有效方式。以前也用类似的方式写过一些新技术的学习笔记,比如《GWT初体验》。但是通常要学习一门 新的编程语言,尤其是从未熟悉的一个新的编程范型,学习曲线要比这个高得多。在我的脑海里有这样一个清单,记载了最想接触和熟悉的编程语言,这个清单最首 要就包括:

  • Groovy。学习Groovy就是奔着“动态语言”去的,而动态语言,就是奔着“元编程”去的。“动态”,是指在程序运行过程中可以改变数据类型的结 构。也就是说,是围绕着“元编程”产生的特性。元编程,指的是在运行时改变“类”的定义,例如访问、增加或修改等等。一言以蔽之,就是“用程序来写程 序”。Groovy是和Java最亲近的动态语言。07年底接触过一段时间Groovy程序,还混过当时Groovy中国社区的斑竹,只可惜本人如此喜爱 挂念的东西,现在依然不算多活跃,在 最新的TIOBE排行上面 ,列在36位,有趣的是,35位的是Scala,真可谓难兄难弟。这里有个小段子,Groovy的作者James Strachan说,如果当年他看到了Scala,就不会有Groovy什么事儿了。即便是这种自掘坟墓式的追捧,如今看来Scala的下场也没见得好到 哪去。JavaScript也一样是动态语言,为什么还要接触Groovy?其中一个重要原因是其中的元编程特性太丰富。
  • Haskell。纯粹的函数式语言。可以这样理解“纯粹”一说:有一些语言“可以”进行函数式编程,但是有的则是“不得不”进行函数式编程。 编程语言发展的两大趋势就是动态语言和函数式语言。因此有了Groovy代表动态语言,接着我一直想学习一门函数式语言。函数式编程就像数学中的函数一 样,唯一给定了输入参数,就可以唯一确定输出结果,没有上下文的影响,没有执行次数的影响,或者说是天然幂等的。网上太多文章批Haskell太过学院 派,连教科书里面要教授函数式编程都用Scheme(因为它更易学,还没有那么复杂的类型系统),但是开阔视野无疑是非常好的(“代码原来可以这样 写!”),尤其喜爱其中的模式匹配的特性。

当然还有其它的,有代表性的语言想深入研究,比如逻辑式的Prolog,还有可以写诗的Perl……但是也害怕吃得太多就会撑着。

Haskell之于函数,就像Perl之于字符串,就像Prolog之于谜题,就像Groovy之于DSL。

我会记录和讨论一些语言特性,但是不会去讨论大多数语法糖这样可能重要但是琐碎的部分。如果只是纯粹的学习笔记那多无聊啊,还不如把它写成吐槽 帖。我争取从Java和JavaScript到Haskell和Groovy,对这四门语言,一个特性一个特性地横向比较,比如站在类型系统的角度,弱类 型、强类型,静态的、动态的,类型之间的关系、类型创建等等;再比如元编程方面,Java的反射和代理系统,JavaScript的 prototype,Groovy强大的元编程体系,还有Haskell的编译期元编程实现等等。


来源:51CTO

相关文章
|
7天前
|
消息中间件 前端开发 Java
java学习路径
【4月更文挑战第9天】java学习路径
15 1
|
27天前
|
安全 Java 程序员
学习Java类加载机制
在Java的世界里,每一个类或者接口,在经历编译器后,都会生成一个个.class文件。
18 0
|
7天前
|
设计模式 前端开发 安全
Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
【4月更文挑战第9天】Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
11 1
|
1天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
4天前
|
Java 存储
键值之道:深入学习Java中强大的HashMap(二)
键值之道:深入学习Java中强大的HashMap
8 0
键值之道:深入学习Java中强大的HashMap(二)
|
6天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
25天前
|
前端开发 Java 数据库连接
五年Java学习心路历程
五年Java学习心路历程
33 0
|
26天前
|
JavaScript Java
什么?java中居然可以执行js代码了?真是不知者不怪
什么?java中居然可以执行js代码了?真是不知者不怪
12 1
|
28天前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
Java 程序员 数据安全/隐私保护
Java中的异常语法知识居然这么好玩!后悔没有早点学习
Java中的异常语法知识居然这么好玩!后悔没有早点学习
32 1