我之前接触过命令式语言(C,一些Java),但我会说我在编程中没有 experience . 因此:将我视为非程序员,Haskell是否适合作为第一语言?
我对纯数学和CS的兴趣似乎与大多数Haskell教程的意图一致,尽管我可以从根本上认识到命令式编程的当前和未来行业 Value ,但我发现了函数式编程的潜力(尽管看起来像这样一个范式转变)令人着迷 .
我想我的问题可以按如下方式提炼 - 非程序员是否必须理解命令式编程以欣赏和充分利用函数式编程?
一些参考:
Are there any studies on whether functional/declarative or imperative programming is easier to learn as a first language?
Which programming languages have helped you to understand programming better?
我会反对流行的观点,并说Haskell不是典型的第一次编程人员的第一个编程语言 . 我不认为像初学者那样像Ruby这样的命令式语言是平易近人的 .
其原因在于,人们不会以功能的方式思考世界 . 当他们看到一辆汽车在街上行驶时,他们会看到同一辆汽车,其状态不断变化 . 他们没有看到一系列略有不同的不可变车 .
如果你查看other SO questions,你会发现Haskell几乎从未被提及为初学者的好选择 .
但是,如果你是一名数学家,或者已经足够了解编程以理解函数式编程的 Value ,我认为Haskell是一个不错的选择 .
总而言之,我认为Haskell非常适合你,但不适合典型的初学者 .
EDIT: 感谢您的深刻见解 . 欧文认为,人们以多范式的方式思考是非常正确的 . 这加强了我的信念,即像Ruby这样的多范式语言更容易被接受,并且具有使学生暴露于命令式和功能性思维的额外好处 . Haskell绝对不是多范式的 .
Chuck提到了Haskell的复杂类型系统,这是另一个重点 . 虽然我个人更喜欢静态类型语言,但使用动态语言可以让初学者忽略这一部分,直到他们好奇地发现幕后发生的事情为止 . Haskell的类型系统虽然优雅,但从第1天开始就在你面前 .
那么,SICP的存在表明功能语言可以用作介绍材料 . 然而,Scheme可能比Haskell更平易近人 .
Haskell似乎因为学习而闻名,但人们往往会忘记经典命令式编程也难以学习 . 许多人一开始就挣扎着为变量赋值的概念,而且令人惊讶的程序员实际上从未对指针和间接引用感到满意 .
Haskell和抽象数学之间的联系并不像人们有时认为的那么重要,但对于那些对数学感兴趣的人来说,看看类比可能会提供一个有趣的奖励 .
至少有一项关于将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本身的大型丰富语言 .
Eleven reasons to use Haskell as a mathematician我不能写得比这更好 . 但总结一下:
Haskell是声明性的,数学是最终的声明性语言,这意味着用Haskell编写的代码与你作为数学语句编写的代码非常相似 .
Haskell是高级的,无需了解有关缓存,内存管理和所有其他硬件的详细信息 . 这也意味着短程序总是好的 .
Haskell非常适合符号计算,代数,逻辑......
Haskell很漂亮:)
要回答你的问题:你是更好的选择,你将不必修复你从C / Java /中得到的大脑伤害 .您还应该检查Mathematica . 有些人往往不喜欢它,因为它是商业的闭源产品,但我认为这是一个非常好的数学环境 .
如果您根本没有任何经验,那么实际上您将更容易在函数式编程中高效工作,尤其是PURE函数式编程 . 我是一个从命令到功能的移民,我不得不忘记在Haskell中忘记了80%的学习成果 .
相比之下,以后更容易从功能切换到命令 .
一方面,我认为Haskell作为第一语言很好,但我想,对于任何对编程非常感兴趣的人,它应该与C并行或C(或汇编)并行学习 . C必须了解底层发生的事情,这样做的成本是多少,最后还要了解更高层次的抽象和自动资源管理的有用性 . 我认为,当接触到C(作为低级命令语言)和Haskell(作为高级函数语言)时,大多数学生会发现Haskell既实用又富有表现力 .
另一方面,我认为编程是一种工艺 . 这是一项实践活动,学习创造新的,有用的或有趣的东西是很重要的 . 所以你需要完成任务 . 最简单的方法是使用一种可以解决问题的工具的语言,即用于数据格式的库,用于解决问题的算法 . 在这一点上,Python(或Ruby)可能是一个更好的选择,因为Hackage在许多领域仍然落后于PyPI(比如说,你需要教多少天来操纵图像,或者在Haskell中绘制图表? ) .
因此,我认为有必要接触低级命令式编程(对于OOP,可能不是) . 然后你就可以理解Haskell的 Value 了 . 但是为了完成工作并快速提高工作效率,Python对于初学者来说是更好的选择 . Haskell需要几个星期才能成为你的工具 .
我会说它适合作为第一语言,并且首先学习命令式语言可能只会干扰学习过程(因为它首先需要大量的学习) .
作为一个警告,我想补充说,具有数学背景的人可能最好地理解功能语言原则,因为概念是抽象的数学原理 .
我知道很多学校都把它作为第一种语言教授,但不是第一语言 .
是的 . 真实世界Haskell是进入它的好方法http://book.realworldhaskell.org/
我会毫不犹豫地说“是”,除了在学习中,如果你选择一种更强制性的语言来开始编程,那么找一个人作为导师或导师将是一项不那么艰巨的任务 . 我建议使用R或Python(使用NumPy和SciPy)吗?
没有 .
haskell98程序很容易被清楚地理解 . LYAH对于没有经验的人来说是一个很好的教程,但是试图阻止学习者绊倒扩展x,y z是非常棘手的 . 很快他们开始探索并被高级编程/数学概念所淹没,这些概念更难以理解,但需要被理解为阅读其他代码 .
如果每一段haskell都是用haskell'98 / '10写的,我可能会说是的 .
没有必要解决这个问题,我想补充一下:如果你找到了haskell的话坚持不懈,不要气馁 .
还有其他编程语言,甚至功能语言都是后期绑定的 .
11 回答
我会反对流行的观点,并说Haskell不是典型的第一次编程人员的第一个编程语言 . 我不认为像初学者那样像Ruby这样的命令式语言是平易近人的 .
其原因在于,人们不会以功能的方式思考世界 . 当他们看到一辆汽车在街上行驶时,他们会看到同一辆汽车,其状态不断变化 . 他们没有看到一系列略有不同的不可变车 .
如果你查看other SO questions,你会发现Haskell几乎从未被提及为初学者的好选择 .
但是,如果你是一名数学家,或者已经足够了解编程以理解函数式编程的 Value ,我认为Haskell是一个不错的选择 .
总而言之,我认为Haskell非常适合你,但不适合典型的初学者 .
EDIT: 感谢您的深刻见解 . 欧文认为,人们以多范式的方式思考是非常正确的 . 这加强了我的信念,即像Ruby这样的多范式语言更容易被接受,并且具有使学生暴露于命令式和功能性思维的额外好处 . Haskell绝对不是多范式的 .
Chuck提到了Haskell的复杂类型系统,这是另一个重点 . 虽然我个人更喜欢静态类型语言,但使用动态语言可以让初学者忽略这一部分,直到他们好奇地发现幕后发生的事情为止 . Haskell的类型系统虽然优雅,但从第1天开始就在你面前 .
那么,SICP的存在表明功能语言可以用作介绍材料 . 然而,Scheme可能比Haskell更平易近人 .
Haskell似乎因为学习而闻名,但人们往往会忘记经典命令式编程也难以学习 . 许多人一开始就挣扎着为变量赋值的概念,而且令人惊讶的程序员实际上从未对指针和间接引用感到满意 .
Haskell和抽象数学之间的联系并不像人们有时认为的那么重要,但对于那些对数学感兴趣的人来说,看看类比可能会提供一个有趣的奖励 .
至少有一项关于将Haskell教授给初学者程序员的影响的研究:
通过以下摘要:
所以,是的,您可以使用Haskell,但您应该专注于基本的,通用的技术和基本概念,而不是功能性编程本身 .
有初学者程序员的a number of popular books也使它成为教授这些的有吸引力的目标基本概念,包括:
"Programming in Haskell"
"The Craft of Functional Programming"
另外,Haskell已经widely taught as a first language. - 但请记住,关键是要关注Haskell中所示的核心概念,而不是教授Haskell本身的大型丰富语言 .
Eleven reasons to use Haskell as a mathematician
我不能写得比这更好 . 但总结一下:
Haskell是声明性的,数学是最终的声明性语言,这意味着用Haskell编写的代码与你作为数学语句编写的代码非常相似 .
Haskell是高级的,无需了解有关缓存,内存管理和所有其他硬件的详细信息 . 这也意味着短程序总是好的 .
Haskell非常适合符号计算,代数,逻辑......
Haskell很漂亮:)
要回答你的问题:你是更好的选择,你将不必修复你从C / Java /中得到的大脑伤害 .
您还应该检查Mathematica . 有些人往往不喜欢它,因为它是商业的闭源产品,但我认为这是一个非常好的数学环境 .
如果您根本没有任何经验,那么实际上您将更容易在函数式编程中高效工作,尤其是PURE函数式编程 . 我是一个从命令到功能的移民,我不得不忘记在Haskell中忘记了80%的学习成果 .
相比之下,以后更容易从功能切换到命令 .
一方面,我认为Haskell作为第一语言很好,但我想,对于任何对编程非常感兴趣的人,它应该与C并行或C(或汇编)并行学习 . C必须了解底层发生的事情,这样做的成本是多少,最后还要了解更高层次的抽象和自动资源管理的有用性 . 我认为,当接触到C(作为低级命令语言)和Haskell(作为高级函数语言)时,大多数学生会发现Haskell既实用又富有表现力 .
另一方面,我认为编程是一种工艺 . 这是一项实践活动,学习创造新的,有用的或有趣的东西是很重要的 . 所以你需要完成任务 . 最简单的方法是使用一种可以解决问题的工具的语言,即用于数据格式的库,用于解决问题的算法 . 在这一点上,Python(或Ruby)可能是一个更好的选择,因为Hackage在许多领域仍然落后于PyPI(比如说,你需要教多少天来操纵图像,或者在Haskell中绘制图表? ) .
因此,我认为有必要接触低级命令式编程(对于OOP,可能不是) . 然后你就可以理解Haskell的 Value 了 . 但是为了完成工作并快速提高工作效率,Python对于初学者来说是更好的选择 . Haskell需要几个星期才能成为你的工具 .
我会说它适合作为第一语言,并且首先学习命令式语言可能只会干扰学习过程(因为它首先需要大量的学习) .
作为一个警告,我想补充说,具有数学背景的人可能最好地理解功能语言原则,因为概念是抽象的数学原理 .
我知道很多学校都把它作为第一种语言教授,但不是第一语言 .
是的 . 真实世界Haskell是进入它的好方法http://book.realworldhaskell.org/
我会毫不犹豫地说“是”,除了在学习中,如果你选择一种更强制性的语言来开始编程,那么找一个人作为导师或导师将是一项不那么艰巨的任务 . 我建议使用R或Python(使用NumPy和SciPy)吗?
没有 .
haskell98程序很容易被清楚地理解 . LYAH对于没有经验的人来说是一个很好的教程,但是试图阻止学习者绊倒扩展x,y z是非常棘手的 . 很快他们开始探索并被高级编程/数学概念所淹没,这些概念更难以理解,但需要被理解为阅读其他代码 .
如果每一段haskell都是用haskell'98 / '10写的,我可能会说是的 .
没有必要解决这个问题,我想补充一下:如果你找到了haskell的话坚持不懈,不要气馁 .
还有其他编程语言,甚至功能语言都是后期绑定的 .