首页 文章

我为什么要学习哈斯克尔? [重复]

提问于
浏览
35

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

很少有人听到人们说“每个程序员都应该知道Haskell”,“如果你不了解haskell就不是程序员”等等 . 但是,我不确定我是否应该费心去尝试简短地理解这种语言 . 使用口译员(直观地了解基础知识)至少需要几天(如果不是几周),而且我不确定结果是否值得 .

一点背景(了解我的知识)
我几乎完全使用C了've started programming as a kid (somewhere between 10 or 13 years ago) with programmable calculator, moved to basic, then onto non-x86 assembly (reimlementing multiplication and division, and writing self-modifying mouse driver was fun), pascal, delphi, now I'm . 了解unix shell的方法,可以在python中编写软件,也可以在任何东西(如果我附近有参考书)中编写远程类似于C或Pascal的软件(即块,类似的流控制等) . 专业化是3D编程和着色器 . "Fish in the water"具有低级操作(C风格的内存分配,指针),对于非常OOP方法不太舒服(即,为了具有类而创建类) . 几乎完全是自学成才 . 即绝对不是新手,但有些地方我可以改进 .

那么......在这一点上我可以从学习Haskell获得什么呢?据我所知,这种语言并没有被广泛使用,因此它可以与更少的库进行交互(就像Delphi编程一样 - 你可以在delphi中进行DirectX编程,如果你真的想要,但你可以用它来写3dsmax / maya插件(好吧,理论上可能是这样,但它肯定不容易)) . 我也不认为我能够轻松地将一段Haskell代码插入到游戏引擎中 .

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

附:我不会买“如果你学习另一种语言,你可能会学到一些可能有用的东西”的论点 .

8 回答

  • 41

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

    你学习它是为了学习纯函数式编程,它迫使你以完全不同的方式做很多事情 . 你有了一种新的思维方式 . 无状态编程?编程没有效果?一切都很懒惰?具有类型推断的疯狂类型系统?什么是monad?你的思想会被反复吹嘘,但最终你会从功能性编程中找到新的观点/技术,如果不进行全面的Haskell,那么很难获得 .

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

  • 9

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

    不,这个故事没有幸福的结局:她辍学,与其他人结婚,我很久没见到她了 . 但我认为这个轶事显示了当你最不期望它时,知识是如何有用的 .


    更实际的说法:您可能已经注意到几年前CPU的速度已经达到了顶峰,现在从计算机中获取更多性能的最实用方法是安装多个CPU . 现在碰巧的是,大多数(如果不是全部)您知道的编程语言基本上都是单一任务,并且受Von Neumann bottleneck的约束 . 一个显而易见的解决方案是并行编程,但如果程序的并行部分最终共享状态(即内存),这可能会非常痛苦 - 而且通常就是这种情况 .

    事实证明,函数式编程是一种风格,它允许您主要避免使用共享状态进行并行编程的问题 . 换句话说,以FP风格编写程序相当容易,这些程序是“自然”线程安全的并且适合于并行处理 . 根据语言,编译器和硬件的不同,您甚至可以找到(正如我最近所做的)程序中并行运行的部分程序,而不需要对并行性进行任何显式编码 .

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

  • 78

    我也不认为我能够轻松地将一段Haskell代码插入到游戏引擎中 .

    如果您只想编写3D游戏引擎,那么学习Haskell可能没什么意义 .

    如果你想成为一个能够在多种范式中编程的全面的程序员,而你目前只知道类C语言,那么值得一看 .

    每当你学习一种新的非常不同的语言时,它就会使学习下一种语言变得更容易,因为你不只是记住新的语法,你也在学习不同的编程思维方式 . 如果您尝试使用新语言并且看到一些新功能,则可以更快地理解它,如果您可以将其与您已知语言的其他功能相关联 . 你知道的语言越多,这个新功能就越有可能与你之前见过的东西相似 .

    在工具箱中提供许多工具也很方便 . 一种语言比一种语言更好地解决了一些问题 . 如果您有5种不同类型的语言,那么您可以为每个问题选择最佳语言 . 如果您只知道2或3个非常相似的语言,那么一些问题将很容易解决,但是其他问题可能比使用在特定任务中更好的语言更困难 .

  • 6

    如果您喜欢3D编程,您可能会对由Epic的创始人兼虚幻引擎技术总监Tim Sweeney的题为The Next Mainstream Programming Languages: A Game Developer's Perspective的演讲感兴趣 . 他谈到了这个问题,他显然非常重视哈斯克尔 .

  • 2

    你可以得到几件事,主要是你对事物的思考方式 . 例如,注意到最小语言是什么很有趣 . 如果你通过SICP(并且相同的概念也适用于Haskell),你会注意到你根本不需要循环语法 . 您不需要任何适用于较大结构的预定义函数 . 如果给出一个cons构造函数/解构函数,或者一种定义函数的方法,以及递归函数的能力,你几乎可以定义所需的一切 . 您可以自己定义其他所有内容 - 这是一项有趣的练习 . 这只是冰山一角 .

    例如,在一个更实际的层面上,几周前我正在做OCaml的家庭作业并呻吟“为什么这个$%$%#语言没有 call/cc !?!”当我注意到我的想法时,我的思绪被吹了 - 如果我没有看到如果我没有看看Scheme,Haskell,Ruby那么我就不会错过它 .

    您可以在ICFP比赛中找到许多不错的例子;真正让我惊叹的是this entrythis contest . 他们在Haskell中创建了一种新语言来解决他们的问题 .

  • 1

    学习函数式语言将与您习惯的语言完全不同 . 所以是的,你可能会学到一些有用的东西;)

  • 2

    我会说,如果它's a chore don' t这样做 . 否则开始阅读this,你应该看到10分钟后如果你感到无聊或者你被 grab 并且无法停止阅读它 .

  • 15

    像Haskell这样的函数式语言是一种思考问题的不同方式 . 它们对于学习和教授数据结构和算法非常有用,因为它们可以简化这些问题 .

    如果您使用C语言中的STL,它具有与Haskell和其他语言类似的功能概念,那么在Haskell中具有基础将有助于理解STL的工作原理 .

    如果您使用XSL:T来转换XML,那么它的设计非常实用 .

相关问题