首页 文章

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

提问于
浏览
45

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

我对纯数学和CS的兴趣似乎与大多数Haskell教程的意图一致,尽管我可以从根本上认识到命令式编程的当前和未来行业 Value ,但我发现了函数式编程的潜力(尽管看起来像这样一个范式转变)令人着迷 .

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

一些参考:

11 回答

  • 20

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

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

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

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

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

    EDIT: 感谢您的深刻见解 . 欧文认为,人们以多范式的方式思考是非常正确的 . 这加强了我的信念,即像Ruby这样的多范式语言更容易被接受,并且具有使学生暴露于命令式和功能性思维的额外好处 . Haskell绝对不是多范式的 .

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

  • 3

    那么,SICP的存在表明功能语言可以用作介绍材料 . 然而,Scheme可能比Haskell更平易近人 .

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

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

  • 32

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

    通过以下摘要:

    我们认为,在新生课程中教授纯粹的功能性编程对课程和推广范式都是有害的 . 相反,我们需要关注更普遍的目标,即教授编程的基本技术和计算的基本概念 . 我们支持这一观点,并在Haskell教授大型一年级课程(最多600名学生)的几个学期中获得了经验 . 这些课程由计算机科学专业的学生和其他学科的学生组成 . 我们通过每学期后的调查系统地收集学生反馈 . 本文提供了在第一年课程中使用现代函数式语言的方法,并在此基础上提倡在此环境中使用函数式语言 .

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

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

    • "Programming in Haskell"

    • "The Craft of Functional Programming"

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

  • 3

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

    • Haskell是声明性的,数学是最终的声明性语言,这意味着用Haskell编写的代码与你作为数学语句编写的代码非常相似 .

    • Haskell是高级的,无需了解有关缓存,内存管理和所有其他硬件的详细信息 . 这也意味着短程序总是好的 .

    • Haskell非常适合符号计算,代数,逻辑......

    • Haskell很漂亮:)

    要回答你的问题:你是更好的选择,你将不必修复你从C / Java /中得到的大脑伤害 .
    您还应该检查Mathematica . 有些人往往不喜欢它,因为它是商业的闭源产品,但我认为这是一个非常好的数学环境 .

  • 1

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

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

  • 0

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

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

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

  • 13

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

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

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

  • 4

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

  • 12

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

  • 1

    没有 .

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

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

  • 29

    没有必要解决这个问题,我想补充一下:如果你找到了haskell的话坚持不懈,不要气馁 .

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

相关问题