Haskell是否适合作为第一语言?

时间:2010-07-29 13:25:02

标签: haskell programming-languages

我之前接触过命令式语言(C,某些Java),但我会说我在编程方面没有经验。因此:将我视为非程序员,Haskell是否适合作为第一语言?

我对纯数学和CS的兴趣似乎与大多数Haskell教程的意图一致,虽然我可以从根本上认识到命令式编程的当前和未来行业价值,但我发现函数式编程的潜力(尽可能多的)似乎这种范式的转变令人着迷。

我想我的问题可以按如下方式提炼 - 非程序员是否必须理解命令式编程以欣赏和充分利用函数式编程?

一些参考文献:

11 个答案:

答案 0 :(得分:32)

嗯,SICP的存在表明函数式语言可以用作介绍性材料。然而,Scheme可能比Haskell更容易接近。

Haskell似乎以“难”学习而闻名,但人们往往会忘记经典的命令式编程也难以学习。许多人一开始就挣扎着为变量赋值的概念,并且令人惊讶的程序员实际上从未真正熟悉指针和间接引用。

Haskell和抽象数学之间的联系并不像人们有时认为的那么重要,但对于那些对数学感兴趣的人来说,看看类比可能会提供一个有趣的奖励。

答案 1 :(得分:29)

至少有一项关于将Haskell教授给初学者程序员的影响的研究:

使用以下摘要:

  

我们认为纯粹是教学   函数式编程就像这样   新生课程是不利的   无论是课程还是课程   促进范式。相反,我们   需要关注更一般的目标   教学基本技术教学   编程和基本概念   计算。我们支持这一观点   有几个经验   第一学年的大学教学   课程(最多600名学生)   哈斯克尔。这些类包括   计算机科学专业的学生   来自其他学科的学生。我们   有系统地聚集了学生   之后进行调查的反馈   每个学期。本文   提供了一种使用方法   首先是现代函数式语言   年级课程,并在此基础上,   主张使用功能   这种情况下的语言。

所以,是的,您可以使用Haskell,但您应该专注于基本的,通用的技术和基本概念,而不是功能性编程本身。

初学者程序员a number of popular books也使其成为教授这些基本概念的有吸引力的目标,包括:

  • “Haskell编程”
  • “功能编程工艺”

此外,Haskell已经widely taught as a first language. - 但请记住,关键是要关注Haskell中所示的核心概念,而不是教授Haskell本身的大型丰富语言。

答案 2 :(得分:20)

我会反对流行的观点,并说Haskell不是典型的第一次编程人员的第一个编程语言。我不认为初学者和Ruby这样的命令式语言一样平易近人。

原因在于人们不会以功能的方式思考世界。当他们看到一辆汽车在街上行驶时,他们会看到同一辆汽车,其状态不断变化。他们没有看到一系列略有不同的不可变动车。

如果你看看other SO questions,你会发现Haskell几乎从未被提及为初学者的好选择。

但是,如果你是一名数学家,或者已经足够了解编程以理解函数式编程的价值,我认为Haskell是一个不错的选择。

总而言之,我认为Haskell非常适合你,但不适合典型的初学者。

编辑:感谢您提供富有洞察力的评论。欧文认为,人们以多范式的方式思考是非常正确的。这加强了我的信念,即像Ruby这样的多范式语言会更容易被接受,并且还具有使学生暴露于命令式和功能性思维的额外好处。 Haskell绝对不是多范式的。

Chuck提到了Haskell的复杂类型系统,这是另一个重点。虽然我个人更喜欢静态类型语言,但使用动态语言可以让初学者忽略这一部分,直到他们好奇地发现幕后发生的事情为止。 Haskell的类型系统虽然优雅,但从第1天就开始出现。

答案 3 :(得分:13)

Eleven reasons to use Haskell as a mathematician
我不能写得比这更好。但总结一下:

  • Haskell是声明性的,数学是最终的声明性语言,这意味着用Haskell编写的代码与你作为数学陈述编写的代码非常相似。
  • Haskell是高级的,无需了解有关缓存,内存管理和所有其他硬件的详细信息。这也意味着短程序总是好的。
  • Haskell非常适合符号计算,代数,逻辑......
  • Haskell很漂亮:)。

回答你的问题:作为一名没有编程经验的数学家,你可以开始使用函数式语言。实际上这是更好的选择,你不必修复你从C / Java /无论如何得到的脑损伤 您还应该检查Mathematica。有些人倾向于不喜欢它,因为它是商业的闭源产品,但我认为这是一个非常好的数学环境。

答案 4 :(得分:12)

如果您根本没有任何经验,实际上您将更容易在函数式编程中高效工作,尤其是PURE函数式编程。我是一个从命令到功能的移民,我不得不忘记在Haskell中忘记了80%的学习成果。

相比之下,以后更容易从功能切换到命令。

答案 5 :(得分:4)

一方面,我认为Haskell作为第一语言很好,但我想,对于任何对编程非常感兴趣的人,应该用C或C(或者汇编语言)学习并行 )。 C有必要了解底层发生了什么,这样做的成本是多少,最后还要了解更高层次的抽象和自动资源管理的有用性。我认为当接触到C(作为低级命令语言)和Haskell(作为高级函数语言)时,大多数学生会发现Haskell既实用又富有表现力。

另一方面,我认为编程是一种工艺。这是一项实践活动,重要的是学习创造新的,有用的或有趣的东西的快乐。所以你需要完成任务。最简单的方法是使用一种语言,其中包含适用于您的问题的工具,即用于数据格式的,以及针对您的问题的算法。在这一点上,Python(或Ruby)可能是一个更好的选择,因为Hackage在很多领域仍然落后于PyPI(比如说,你需要教多少天来操纵图像,或者在Haskell中绘制图表? )。

所以,我认为有必要接触低级命令式编程(对于OOP,可能不是)。然后你就可以理解Haskell的价值了。但是为了完成工作并快速提高工作效率,Python对于初学者来说是更好的选择。 Haskell需要几个星期才能成为你的工具。

答案 6 :(得分:3)

我会说它适合作为第一语言,并且首先学习命令式语言可能只会干扰学习过程(因为它首先需要大量的学习)。

作为一个警告,我想补充说,具有数学背景的人可能最好地理解功能语言原则,因为概念是抽象的数学原理。

我知道很多学校都把它作为第一种功能性语言教授,但不是第一语言。

答案 7 :(得分:3)

是的。真实世界Haskell是进入它的好方法http://book.realworldhaskell.org/

答案 8 :(得分:1)

我会毫不犹豫地说“是”,除了在学习中,如果你选择一种更强制性的语言来开始编程,找一个人作为导师或导师将是一项不那么艰巨的任务。我可能会建议使用R或Python(使用NumPy和SciPy)吗?

答案 9 :(得分:1)

没有

很容易清楚地理解haskell98程序。 LYAH对于没有经验的人来说是一个很好的教程,但是试图阻止学习者绊倒扩展x,y z是非常棘手的。很快,他们开始探索并被高级编程/数学概念所淹没,这些概念难以理解,但需要被理解为阅读其他代码。

如果每一段haskell都是用haskell'98 / '10写的,我可能会说是的。

答案 10 :(得分:0)

如果没有必要解决这个问题,我想补充一点:如果你发现哈斯克尔的顽固性太难了,不要气馁。

还有其他编程语言,甚至功能语言都是后期绑定的。