为了掌握Haskell,您投入了多少时间?

时间:2010-09-20 10:28:57

标签: haskell functional-programming

我知道这个问题可能听起来很愚蠢,但我正在学习(至少尝试)Haskell大约4天。我已经读完了http://learnyouahaskell.com/,现在我正在投入时间:The Haskell Road to Logic, Math and Programming,事情变得非常复杂。我没有函数式编程的经验,只有一些关于Lisp的基础知识。

即使我理解这些概念,但当我必须编写一段不那么基本的代码时,却完全是黑暗,我无法在脑海中制定计划。似乎有很多方法可以完成某项任务,但我无法表达自己。

经过4天的python,我可以编写复杂的脚本(不是'pythonic',但它们确实有效)。在哈斯克尔待了4天后,我......几乎是空白。

有关如何提高我的功能技能的任何建议? 你需要多长时间才能完全掌握Haskell?

7 个答案:

答案 0 :(得分:13)

大约2年后,Haskell的某些部分我很清楚(Ptr的东西,矢量库),我知道的一些区域足够危险(模板haskell),还有一些我没有触及过(web框架,仿制药)。但总的来说,我认为我非常了解这门语言。

学习Haskell的一个难点是(非常陡峭的IMO)学习曲线。在你能够提高语言效率之前,你需要学习很多不同的相互关联的东西,并且因为它们是相互关联的,所以如果没有至少几个月的经验,很难很好地理解它们。我的建议是坚持下去,如果你认为你不了解某些事情,或者发生了更深层次的事情,你可能是对的。如果你现在无法理解,只需继续前进,并在一个月左右的时间内回到它。最终,你将在多个方面取得足够的进展,一切都应该变得清晰。

与任何语言一样,取得进步的最佳方法是编写代码。这需要更长的时间,因为Haskell远离你已经知道的语言,但它是值得的。

答案 1 :(得分:4)

好吧,2年后我仍然没有完全掌握Haskell的一切。我可以编写“高级”程序(大约2-3个月开始学习Haskell之后),但人们不断提出要学习的新东西,这是Haskell乐趣的一部分:)

至于如何最好地学习,我总是喜欢边做边学。浏览你对Hackage感兴趣的代码(不是很大的东西),然后尝试自己实现类似的东西(或子集)。选择一个项目,你可以随着时间的推移添加更多的difficut图层。

答案 2 :(得分:3)

在大学完成150小时的功能性编程课程后,我们做了

  • 排序功能
  • 制作二叉树
  • 使用/编写map,filter,zip等功能
  • ..可能已经忘记了什么

所以我只能在大约一个月的全职时间里说基础知识。四天不算什么......我认为你只需要编写更多代码来熟悉函数式编程思维方式。从头到尾实施一切,在获得经验时做更多的事情。

答案 3 :(得分:3)

我认为Haskell的学习曲线非常奇怪。一开始,你几乎什么都不懂 - 更奇怪的是,在你想要应用你的命令性知识(缓冲等)的大多数地方,你会被告知你应该忘记任何关于它的事情。

在这个阶段之后,通常会出现在你的书中的章节中,你将学习Haskell的特殊风格。至少在这一点上,你的大脑应该爆裂,几乎任何人都会想:

  

有人可以开发像monad这样的东西吗?

但是很快,当你也掌握了这一点时,没有什么可以阻止你理解其余部分,你很快就会想到,有多么困难和冗长的命令式编程。

顺便说一下,我花了两个月的时间来理解基础知识,我从2010年2月开始。但是我又花了4个月的时间来理解一些更难以思考的功能参数和结果效果(特别是State monad是一个奇迹,直到我找到了一个关于SO IO如何工作的一个很好的描述 - 只是以同样的方式;),但我看到了新的想法无处不在。

答案 4 :(得分:3)

我在Haskell重型大学(Utrecht)学习,我很喜欢Haskell,所以我参加了以下所有使用Haskell的课程:

  • 介绍性FP(学期)
  • 语法与Haskell解析(学期)
  • 编程语言的实施(学期)
  • 通用编程(学期)
  • 软件构建(2个月)
  • 高级功能编程(2个月)

我也是TA(教师助理)帮助实现入门和实施的实践。我写了我的硕士学位。 on(Generic)Haskell。

所以这看起来很糟糕,但是我在介绍课程的某个地方得到了FP。拥有强大的数学背景在我的案例中有所帮助,所以我已经习惯将问题分解为简单的函数。至于编写真正的程序,在Haskell中编写Go程序是学习使用monad的有趣练习(GUI在TclHaskell中,唉!)

答案 5 :(得分:2)

我绝不是Haskell专家,但我有两个建议:

  • 花时间玩纯粹的lambda演算(如果你是勇敢的话,甚至是SKI)。基本上Haskell允许你做一些更舒适和类型安全的事情
  • 尝试解决常见问题,例如来自Project Euler。但不要就此止步,尝试将您的代码与其他人的解决方案进行比较。

对于我来说,给出基础知识的1~3个月的估计似乎是现实的。

答案 6 :(得分:1)

在Haskell开始有意义之前还需要一段时间。我在学习Haskell的第二个月,这是我在过去两年中的第二次尝试。这一次,我从The Little Schemer开始。然后我看了Giesel的视频。第一次阅读RWH是一场灾难,但现在它有点意义,所以希望在另外6个月内它会更清楚。我能在Haskell中编写的代码更加简洁。

底线坚持下去,需要时间,但这是值得的。 BTW,IRC #haskell是一个很好的资源,可以帮助您加快速度。

我的建议是,找一个小编程项目并在Haskell中啃它。不要太担心用Haskelly方式编写它。刚开始做Haskell ..