(zz)haskell学习体会
学习haskell一段时间了,这中间断断续续磕磕碰碰,到现在也还远没达到应用自如的程度。其实,Haskell并不是一门很难学的语言,至少其语法是很简洁统一的,之所以感觉上比较难入门,我想有一下几个方面:
1. 纯函数式范型。本质上与常见语言有所不同。
2. 中文资料稀少,而且翻来覆去就那么几篇数学游戏性质的介绍。英文的资料倒是不少,不过啃那些书真是太耗精力了。
3. 国内应用环境的稀少。缺少实际应用环境。大的项目直接用haskell不现实,辅助工具可以尝试,不过经常python就搞定了,更快更方便,主要是更熟悉啊。
4. 缺少引导,都是自己摸索,加之本人并没有几两理论基础,刚一接触haskell就见到一堆的lambda演算,beta替换,monad,范畴论之类的东西,很容易溺水身亡。说到这里,我觉得这一点,是我走弯路的根本原因:Haskell及其涉及的领域,社区,缺少一个由浅入深的层次,新人进入总会不知所措,不知深浅,信息超载。一个初学者要经过不断的碰壁挫折之后才能理出一个学习的路径来。而大多主流语言,因为前行者众多,已经给踏出了明晰的路径来,后来者循序渐进即可快速入门,不断提高。
在此根据我遇到的挫折与走过的弯路,跟想学习haskell的人提供几点基本建议,因为本人也属于刚刚入门阶段,所提建议仅供参考。
1. 树立信心: Haskell 绝对不是一门“怪异”的语言,当你熟悉了他之后就会觉得:程序就该是这个样子的!与C++比较起来,Haskell绝对要容易的多。
以应用为目的的话,haskell是比较容易掌握和上手的,至少比C++容易。
2. 区别对待语言知识点,对于以应用为目的话,就不需要在开始纠缠于lambda演算,Monad定律,范畴论,Arrow什么的。我们用C++的话,写很久程序也不会天天纠缠于模板一类的东西。我们用命令式语言,也不一定要深晓图灵机的理论。
3. 选择一个好用的编辑器,如果之前就会用emacs的话,最好用emacs,因为emacs里haskell的自动函数名补全,缩进对齐等都很好用。
4. 类型是个好东西,因为有一样叫 Hoogle 的工具,用hoogle可以根据参数与返回值的类型,在不知道函数名的情况下快速搜索到想要的函数。
5. 熟悉下基本语法后,就要开始熟悉各种lib。 尤其是熟悉list 的处理,Data.List 模块中有大量的函数。Prelude 里的函数更是要很熟悉。有了大量的函数打底,就可以构建一个坚实的基础,遇到问题可以多种函数组合起来,不只提高效率,更重要的是构建一种FP解决问题的感觉。
6. Monad,初学者的拦路虎,我没啥好说的,如果像我一样笨的话就先绕过去吧。了解了 do <- 的基本用法后,应该就可以实际用了。并不是每个用 C++ STL的人都能说清楚模板的使用的。
7. 推荐下 Real world haskell 这本书。大部分Haskell的文档资料都太学术化,缺少与实际开发场景的联系, real world haskell算是目前最照顾程序员的了。
1. 纯函数式范型。本质上与常见语言有所不同。
2. 中文资料稀少,而且翻来覆去就那么几篇数学游戏性质的介绍。英文的资料倒是不少,不过啃那些书真是太耗精力了。
3. 国内应用环境的稀少。缺少实际应用环境。大的项目直接用haskell不现实,辅助工具可以尝试,不过经常python就搞定了,更快更方便,主要是更熟悉啊。
4. 缺少引导,都是自己摸索,加之本人并没有几两理论基础,刚一接触haskell就见到一堆的lambda演算,beta替换,monad,范畴论之类的东西,很容易溺水身亡。说到这里,我觉得这一点,是我走弯路的根本原因:Haskell及其涉及的领域,社区,缺少一个由浅入深的层次,新人进入总会不知所措,不知深浅,信息超载。一个初学者要经过不断的碰壁挫折之后才能理出一个学习的路径来。而大多主流语言,因为前行者众多,已经给踏出了明晰的路径来,后来者循序渐进即可快速入门,不断提高。
在此根据我遇到的挫折与走过的弯路,跟想学习haskell的人提供几点基本建议,因为本人也属于刚刚入门阶段,所提建议仅供参考。
1. 树立信心: Haskell 绝对不是一门“怪异”的语言,当你熟悉了他之后就会觉得:程序就该是这个样子的!与C++比较起来,Haskell绝对要容易的多。
以应用为目的的话,haskell是比较容易掌握和上手的,至少比C++容易。
2. 区别对待语言知识点,对于以应用为目的话,就不需要在开始纠缠于lambda演算,Monad定律,范畴论,Arrow什么的。我们用C++的话,写很久程序也不会天天纠缠于模板一类的东西。我们用命令式语言,也不一定要深晓图灵机的理论。
3. 选择一个好用的编辑器,如果之前就会用emacs的话,最好用emacs,因为emacs里haskell的自动函数名补全,缩进对齐等都很好用。
4. 类型是个好东西,因为有一样叫 Hoogle 的工具,用hoogle可以根据参数与返回值的类型,在不知道函数名的情况下快速搜索到想要的函数。
5. 熟悉下基本语法后,就要开始熟悉各种lib。 尤其是熟悉list 的处理,Data.List 模块中有大量的函数。Prelude 里的函数更是要很熟悉。有了大量的函数打底,就可以构建一个坚实的基础,遇到问题可以多种函数组合起来,不只提高效率,更重要的是构建一种FP解决问题的感觉。
6. Monad,初学者的拦路虎,我没啥好说的,如果像我一样笨的话就先绕过去吧。了解了 do <- 的基本用法后,应该就可以实际用了。并不是每个用 C++ STL的人都能说清楚模板的使用的。
7. 推荐下 Real world haskell 这本书。大部分Haskell的文档资料都太学术化,缺少与实际开发场景的联系, real world haskell算是目前最照顾程序员的了。
还没人转发这篇日记