我为什么要学习haskell?

可能重复:
Haskell与现实世界中的程序编程

很少有人听到人们说“每个程序员都应该知道Haskell”,“如果你不知道Haskell,你就不是程序员”等等。 但是,我不确定是否应该试图简单了解该语言。 与口译员一起玩(直观了解基础知识)至少需要几天(如果不是几周),而且我不确定结果是否值得。

一点背景(了解我的知识)
我已经开始使用可编程计算器开始编程(从10到13年前的某个地方),然后移植到基本的程序,然后移植到非x86程序集(reimlementing multiplication and division,编写自我修改的鼠标驱动程序很有趣),pascal, delphi,现在我几乎全部使用C ++。 知道我的unix shell的方式,可以用python编写软件,也可以用任何东西(如果我附近有参考书)编写软件,它们与C ++或Pascal(即块,类似流控制等)类似。 专业化是3D编程和着色器。 低水平操作(C风格内存分配,指针)的“鱼在水中”,对于极端的OOP方法(即为了进行类的学习而制作)不太舒服。 几乎完全自学成才。 即绝对不是新手,但有一些地方我可以改进。

那么......在这一点上,我可以从研究Haskell中获得什么? 据我所知,这种语言并没有被广泛使用,因此可能会有更少的库可以连接(就像使用Delphi编程一样 - 如果你真的想,你可以在delphi中使用DirectX编程,但是你可以用它写出3dsmax / maya插件(当然,这可能在理论上是可能的,但它肯定不会容易))。 我也不认为我可以轻松地将一段Haskell代码插入游戏引擎。

那么,我可以从中得到什么样的有用知识?

PS我不会购买“如果你学习另一种语言,你可能会学到一些可能有用的东西”的说法。


(当然这是一个重复的问题,但我现在找不到一个。)

你学习它是为了学习纯粹的函数式编程,这迫使你以完全不同的方式做许多事情。 你有一种新的思维方式。 无状态编程? 编程没有效果​​? 一切都很懒惰? 类型推理的疯狂类型系统? 到底什么是monads? 你的思想会被反复吹捧,但最终你会从函数式编程中获得新的视角/技巧,如果没有成熟的Haskell,很难以其他方式获得。

试图具体的问题是,试图告诉一个非Haskeller他们将从Haskell学到什么就像试图向一个盲人解释“绿色”的颜色。


几年前,我们系的一位漂亮女孩决定兼职学习计算机科学。 很多人都惊讶地发现其中一门入门课程正在使用Haskell作为编程语言来教授! 虽然我没有Haskell的经验,但我在Lisp和其他函数式编程语言方面有一些背景,并且能够帮助她进行练习。

不,这个故事没有快乐的结局:她辍学,娶了别人,我很久没见她了。 但我认为这个轶事显示了当你最不期待的时候知识如何有用。


更实际的说法是:您可能已经注意到CPU速度在几年前就遇到了问题,现在从计算机获得更多性能的最实用的方法是安装多个CPU。 现在恰好大部分(如果不是所有的)编程语言基本上都是单一任务,并且受到冯诺依曼瓶颈的限制。 一个显而易见的解决方案是并行编程,但如果程序的并行部分最终共享状态(即内存),这可能会非常痛苦 - 而这通常是这种情况。

事实证明,函数式编程是一种风格,它可以让您大多避开共享状态下的并行编程问题。 换言之,使用FP风格编写“自然”线程安全且适合并行处理的程序相当容易。 根据语言,编译器和硬件的不同,您甚至可能会发现(正如我最近所做的那样)您的程序的一部分并行运行,而没有对并行性进行任何明确的编码。

我经常犯错,但我的猜测是,随着并行编程变得更加重要和困难,函数式编程将成为未来的热门编程范例之一。 Haskell可能不会成为选择的语言 - 我个人最喜欢的是Clojure - 但看看一种或多种FP语言可能是值得的。


我也不认为我可以轻松地将一段Haskell代码插入游戏引擎。

如果你只想写3D游戏引擎,那么学习Haskell也许没什么意义。

如果你想成为一个能够在多个范例中进行编程的全面的程序员,并且你现在只知道C语言,那么值得一看。

每当你学习一种新的非常不同的语言时,它使得学习下一种语言变得更容易,因为你不仅仅记住新的语法,而且还学习了不同的编程思维方式。 如果您尝试使用新语言并且看到一些新功能,那么如果您可以使用您已知的语言将其与另一功能相关联,则可以更快地理解该功能。 您认识的语言越多,这种新功能就越有可能与您以前见过的类似。

在工具箱中提供许多工具也很方便。 一种语言比另一种语言更能解决一些问题。 如果你有5种不同类型的语言,那么你可以为每个问题选择最好的语言。 如果你只知道两种或三种非常相似的语言,那么一些问题很容易解决,但其他问题可能比如果你使用的语言在这项特定任务上更好。

链接地址: http://www.djcxy.com/p/80853.html

上一篇: Why should I want to learn haskell?

下一篇: shared data without using mutable variables