Ale*_*lex 45 haskell programming-languages
我之前接触过命令式语言(C,一些Java),但我会说我没有编程经验.因此:将我视为非程序员,Haskell是否适合作为第一语言?
我对纯数学和CS的兴趣似乎与大多数Haskell教程的意图一致,尽管我可以从根本上认识到命令式编程的当前和未来行业价值,但我发现了函数式编程的潜力(尽管看起来像这样一个范式转变)令人着迷.
我想我的问题可以按如下方式提炼 - 非程序员是否必须理解命令式编程以欣赏和充分利用函数式编程?
一些参考:
C. *_*ann 32
嗯,SICP的存在表明功能语言可以用作介绍材料.然而,Scheme可能比Haskell更平易近人.
Haskell似乎有"难以"学习的声誉,但人们往往会忘记经典命令式编程也很难学习.许多人一开始就挣扎着为变量赋值的概念,而且令人惊讶的程序员实际上从未对指针和间接引用感到满意.
Haskell和抽象数学之间的联系并不像人们有时认为的那么重要,但对于那些对数学感兴趣的人来说,看看类比可能会提供一个有趣的奖励.
Don*_*art 29
至少有一项关于将Haskell教授给初学者程序员的影响的研究:
通过以下摘要:
我们认为,在新生课程中教授纯粹的功能性编程对于课程和推广范式都是有害的.相反,我们需要关注更普遍的目标,即教授编程的基本技术和计算的基本概念.我们支持这一观点,并在Haskell教授大型一年级课程(最多600名学生)的几个学期中获得了经验.这些课程由计算机科学专业的学生和其他学科的学生组成.我们通过每学期后的调查系统地收集学生反馈.本文提供了在第一年课程中使用现代函数式语言的方法,并在此基础上提倡在此环境中使用函数式语言.
所以,是的,您可以使用Haskell,但您应该专注于基本的,通用的技术和基本概念,而不是功能性编程本身.
还有一些畅销书的初级程序员也使它成为一个有吸引力的目标为教授这些基本概念,其中包括:
此外,Haskell已被广泛传授为第一语言. - 但请记住,关键是要关注Haskell中所示的核心概念,而不是教授Haskell本身的大型丰富语言.
dby*_*rne 20
我会反对流行的观点,并说Haskell不是典型的第一次编程人员的第一个编程语言.我不认为像初学者那样像Ruby这样的命令式语言是平易近人的.
其原因在于,人们不会以功能的方式思考世界.当他们看到一辆汽车在街上行驶时,他们会看到同一辆汽车,其状态不断变化.他们没有看到一系列略有不同的不可变车.
如果您查看其他SO问题,您会发现Haskell几乎从未被提及为初学者的好选择.
但是,如果你是一名数学家,或者已经足够了解编程以理解函数式编程的价值,我认为Haskell是一个不错的选择.
总而言之,我认为Haskell非常适合你,但不适合典型的初学者.
编辑:感谢您的深刻见解.欧文认为,人们以多范式的方式思考是非常正确的.这加强了我的信念,即像Ruby这样的多范式语言更容易被接受,并且具有使学生暴露于命令式和功能性思维的额外好处.Haskell绝对不是多范式的.
Chuck提到了Haskell的复杂类型系统,这是另一个重点.虽然我个人更喜欢静态类型语言,但使用动态语言可以让初学者忽略这一部分,直到他们好奇地发现幕后发生的事情为止.Haskell的类型系统虽然优雅,但从第1天开始就在你面前.
Dan*_*kov 13
Eleven reasons to use Haskell as a mathematician
I cannot write it better than that. But to summarize:
To answer your question: you'll have no problem to start with a functional language as a mathematician with no programming experience. Actually it's the better choice, you won't have to repair the brain damage you would get from C/Java/whatever.
You should also check Mathematica. Some people tend to dislike it since it is a commercial closed-source product, but I think it's a pretty good environment for doing mathematics.
Luk*_*keN 12
如果您根本没有任何经验,那么实际上您将更容易在函数式编程中高效工作,尤其是PURE函数式编程.我是一个从命令到功能的移民,我不得不忘记在Haskell中忘记了80%的学习成果.
相比之下,以后更容易从功能切换到命令.