# 我为什么学习Haskell

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

public static void test(){

        ExecutorService executorService =  Executors.newFixedThreadPool(3);

        // Java 8之前:传入一个函数需要通过匿名类
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("task1 is running...");
            }
        });

        // Java 8: 可以通过lambda
        executorService.submit(()->System.out.println("task2 is running..."));
    }

我确实觉得不一样,可是不太明白这些到底意味着什么、该怎么用。更不要说闭包(closure),流(stream)这些概念了,只觉得有些神奇、云里雾里。

所以,以后有机会要学学函数式编程的想法就这么埋下了。

不过真正决定好好学学Haskell,还是受编程大神“轮子哥”(@vczh)的影响,他分享过的言论包括:

还有,在博文 <如何设计一门语言 (九)—— 类型> 中提到:

了解编程语言的基本原理并不意味着你一定要成为一名编译器的前端,正如同学习Haskell可以让你的C++写得更好一样,如果你知道怎么设计一门语言,那遇到语言里面的坑,你十有八九可以当场看到,不会跳进去。当然了,了解编程语言的前提是你是一个优秀的程序员,至少要写程序,对吧。于是我这里推荐几门语言是在此之前要熟悉的。编程语言有好多种,每一种都有其代表作,为了开开眼界,知道编程语言可以设计成什么样子,你至少应该学会:

  1. C++
  2. C#
  3. F#
  4. Haskell
  5. Ruby
  6. Prolog

其实这一点也不多,因为只是学会而已,知道那些概念就好了,并不需要你成为一个精通xx语言的人。

遂决定入坑。

原文地址:https://www.cnblogs.com/nanlan2017/p/10428804.html

时间: 2024-10-09 09:41:53

# 我为什么学习Haskell的相关文章

从Java和JavaScript来学习Haskell和Groovy

直击现场 记得刚接触计算机的时候,我就受到了两个非常巨大的错误观念的影响,这个观念最初是来自于老师的传授还是学长的教诲已经记不清了,但是直到我工作几年以后,才慢慢有了实际的体会: 学习和使用什么编程语言不重要,重要的是算法和设计: 程序员学习的精髓是面向对象的设计模式,掌握以后,一通百通. 简直就是是胡扯啊.也许在某个极其狭隘的上下文中还能这样说,但是泛泛而谈,这样的态度无疑是误人子弟的. 就说第一条,编程语言不但重要,而且太重要了.换句话说,学习一门新的编程语言,可能学习的是背后的范型和思考问

学习Haskell的一些资料

趣学Haskell指南: http://fleurer-lee.com/lyah/chapters.htm 对应的英文原文: http://learnyouahaskell.com/chapters stackoverflow上面的讲解: http://stackoverflow.com/questions/1012573/getting-started-with-haskell/1016986#1016986 看完上面的书可以看<real world haskell> references:

入Function Programming到底我该选择Lisp还是Haskell?

要学习Lisp的,可以看看sicp,当初我花费了一个暑假的时间啃sicp,啃到啃不动了,但是发现确实学到了不少有趣的东西,然后又去玩Haskell,大概学习Haskell断断续续的也有半年的时间,但是我感觉我在Haskell中学到的东西比在sicp学到的东西要多的多,可能是我功力不够,不足以理解sicp中的精髓吧. 学习Haskell让我学到了类型是多么美妙的东西.

我的 Linux 新世界观 (转)

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} 我的 Linux 新世界观 (转) Table of Contents 关于工具的哲学 自由软件好,还是开源软件好? Linux 桌面,永远的痛? Linux 擅长什么? 十年河东,十年河西,何时宛在水中央? 是工具决定目的,还是目的决定工具? 为什么是 Linux,而不是别的? 原文: h

5年GTD自我管理经验,一块听听

我在胜利油田做了20多年的油田信息化工作,以前的我经常处于这样一种状态: 当我正在做着手边的一项事情时,头脑里却不断地蹦出来其它的事务,让我烦心不已,焦虑不安:PPT经常要拖到汇报当天的凌晨才做完,有些事情拖延了一年也没有完成,甚至是还没有真正开始. 每年感觉好像都挺忙,但在年底时又感觉啥也没做.2010年的年底,我的个人博客上只有这样几行总结: 又忙了一年 离40又近了一年 博士终于毕业了 孩子上一中了 一个大项目也验收了 863把人折腾得不轻 技术上没有什么提高 股票解套了,没赔就不错 单词

1.2 通往实用函数编程之路

函数式编程的思想发源要早于第一台计算机,其历史可追溯到上世纪三十年代,当时 Alonzo Church 和 Stephen C. Kleene 引入一种理论,叫 lambda 演算,属于数学基础研究.虽然它未能实现其初衷,但仍有一些逻辑分支在使用,并发展出有用计算理论.为了学习函数式编程的基本原理,有必须简单了解一下lambda 演算(下一章).发明计算机以后,Lambda 演算放弃了它原来的领域,成为早期函数式编程语言的灵感. 1.2.1 函数语言 到 2008 年,第一个函数式编程语言走过了

【转】关于语言的思考

之前写了那么多 Haskell 的不好的地方,却没有提到它好的地方,其实我必须承认我从 Haskell 身上学到了非常重要的东西,那就是对于"类型"的思考.虽然 Haskell 的类型系统有过于强烈的约束性,从一种"哲学"的角度(不是数学的角度)来看非常"不自然",但如果一个程序员从来没学过 Haskell,那么他的脑子里就会缺少一种重要的东西.这种东西很难从除 Haskell,ML,Clean,Coq,Agda 以外的其它语言身上学到. Has

JavaScript函数式编程(三)

JavaScript函数式编程(一) JavaScript函数式编程(二) 在第二篇文章里,我们介绍了 Maybe.Either.IO 等几种常见的 Functor,或许很多看完第二篇文章的人都会有疑惑: 『这些东西有什么卵用?』 事实上,如果只是为了学习编写函数式.副作用小的代码的话,看完第一篇文章就足够了.第二篇文章和这里的第三篇着重于的是一些函数式理论的实践,是的,这些很难(但并非不可能)应用到实际的生产中,因为很多轮子都已经造好了并且很好用了.比如现在在前端大规模使用的 Promise

蜜汁二八定律,成为顶级程序员真的有那么难吗?

在软件开发领域,二八定律同样适用.头部 20%的研发人员或许就是许多人眼中的"alpha"程序员,甚至是领导者.开拓者.潮流引领者等,比如发明 B 语言的 Thompson.发明 C 语言的丹尼斯·里奇.以及发明万维网的伯纳斯李,这些是谷歌.阿里巴巴.腾讯.百度和华为更喜欢的求职者. 反之,80%的程序员构成了软件开发行业的大部分,这些程序员大多毕业于一所还可以的学校,专业是计算机相关方向,掌握了足够的 JavaScript.Java.C ++ 和 Python 等基础知识,然后去了银