从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的编译期元编程实现等等。

时间: 2024-11-08 22:06:03

从Java和JavaScript来学习Haskell和Groovy的相关文章

java调用javascript :js引擎rhino

java调用javascript :js引擎rhino JavaJavaScriptEclipse脚本SQL 前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式.结果方案五花八门:1.jakarta commons JEXL. 2.Beanshell3.Java Math Expression Parser jep 4.parse combinator jparsec 5.jdk 6.0的 script6.利用SQL 7.自己写语法分析如果自己写语法分析,没有个200

javascript小白学习指南1---0

第二章 变量和作用域 在看第二章时我希望,你可以回顾一下前一次所讲的内容  如果有所遗忘 点这里 今天我们来说说 变量和作用域的问题 本章主要内容 基本类型和引用类型 执行环境 垃圾回收(了解即可) 基本类型和引用类型 JS中可能包含两种不同的数据类型的值:  基本类型  和 引用类型    基本类型值 指的是简单的数据段   而 引用类型指那些可能由多个值构成的对象. 如何定义基本类型值和引用类型值呢?  看下面 创建一个变量并给它赋值就OK了. 对于引用类型我们可以添加 和删除它的属性和方法

JavaScript 基础学习1-day14

JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator

Jerry的ABAP, Java和JavaScript乱炖

写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Java和JavaScript好学. 其实任何编程语言总是有很多相通之处,这个系列就是把这三种语言的很多知识点拿来横向比较,即使只会其中一门,也能看懂这些post. 同时对于ABAP较之Java和JavaScript缺乏的一些feature和框架特性,例如闭包,函数式编程,Spring依赖注入等,这些po

编程语言对比分析:Python与Java和JavaScript(图)

编程语言对比分析:Python与Java和JavaScript(图):凭什么说"Python 太慢,Java 太笨拙,我讨厌 JavaScript"?[图]编程语言生而为何?我们人类从原始社会就是用语言表达自己,互相沟通.编程语言也是如此.它是一种人类和机器沟通的工具.就像人类语言一样,很多编程语言也有不同的方言.适用性和语境.有些语言甚至被认为已死,因为没有国家的官方讲这种语言.语言的核心与编程语言很相似:沟通.两者都是很伟大的沟通工具.你看待编程语言的方式理应如此:一种工具.随着敏

为何弃 Java、JavaScript、Ruby 于不顾,而去寻找新的编程语言?

我喜欢编程语言.每种语言都有自己的特点.最近,我开始纠结一个问题:如果开始自己的项目的话,我该用什么语言. 好多优秀的编程语言 在阅读此文之前,需要先说明几件事情.虽然在工作中大部分的时候我都用 Java.JavaScript 和 Ruby 来创建产品应用,但我一直在学习新的语言和新的框架.我相信,语言和语言(或框架)特有的社区能给你带来新的思想,这些思想早晚会有用处:函数式编程可以给你带来许多面向对象的编程知识,而全职从事 Rails 应用可以给你许多测试的经验(如果你写测试的话).但问题是,

# 我为什么学习Haskell

说起来,Haskell真是相当冷门而小众的一门语言.在我工作第一年的时候,我平时从网络的一些学习资料上时不时看到有人提到这门语言.那时候的认识就是除了我们平时用的“面向对象语言 (OOP: Object-Oriented Programming)”外,还存在“函数式语言(FP: Functional Programming)”.碰巧,发现Java 8说引入了对函数式编程的支持,可我尝试去学习时确觉得很难理解.比如说lambda函数吧,说是“可以简洁化代码”,举个例子: public static

javascript立体学习指南

javascript立体学习指南第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的.基于原型的语言.当然,它与Java无关,比如雷峰塔和雷锋.显然,这并不重要.JavaScript的原始名称是LiveScript,它处理了以前由服务器端语言(如Perl)执行的一些输入验证操作.在发布前夕,Netscape临时改名为LiveScript javascript,以抓住媒体炒作的机会.19

2020年Java程序员应该学习的10大技术

摘自:https://www.cnblogs.com/hollischuang/p/12170323.html 对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西.每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5.Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战. 在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11.Java 12.Java 12