哈斯克尔与现实世界中的程序编程
这些天,我正在认真研究函数式编程。
虽然我对Haskell和它似乎提供的可能性感到非常兴奋,但是现在我也可以看到,这将花费我一些时间来学习。 在一个关于如何学习Haskell的SO问题上,一个答案指出,如果不是几年,实际上“掌握”它将需要几个月的时间。
现在,我知道C,PHP,一些面向对象的东西等等。有人告诉我,Haskell在“现实世界”中并没有太多的用处,那么我能更好地提高我所熟悉的常规语言的技能吗? 哈斯克尔是值得的斗争?
在这个问题上, 为什么人们认为函数式编程会抓住结论似乎是函数式编程会“赶上”。 但是程序编程肯定会保持在最前面,对吧?
编辑:keparo很好地澄清我的问题: 与程序语言相反,研究Haskell和函数式编程范例会有价值吗?
哈斯克尔并不像人们喜欢学习那么难。 哈斯克尔开辟了一个你从来不知道的新世界。 学习和其他语言一样有价值。 你可能找不到一份要求你做Haskell编程的工作,但这是否意味着一种语言并不重要?
Haskell会教会你很多新的东西,它会告诉你如何用你/你所使用的语言更好地编程。 你可以在空闲时间做你自己的个人项目。
如果将“真实世界”定义为“现金生成器”,那么Haskell在“现实世界”中的用处就不大。 所以如果这是你的目标,那么你可能不得不重新思考目标
另外,我不太喜欢select“如何学习haskell”的答案。 掌握任何语言需要几个月甚至几年的时间,而不仅仅是Haskell。 取决于你如何定义“主”。 我可以用Haskell来达到相当高的效率,而且我只学了一个月,而且我一直在慢慢地学习。
如果没有别的办法,那么学习Haskell提供的思维方式的改变将帮助你,当你不得不回头使用仍然在工作中使用的程序语言时。
function范式正在开始进入各种主stream应用程序和语言 – 即使C ++将在C ++ 0x中添加(残缺)lambda。
你也可能想看看一些混合语言,如Scala或OCaml。 在Twitter上使用Scala,在Jane's Street使用OCaml在金融交易平台上使用。
您可能不应该指望在专业环境中使用Haskell几乎和C族语言一样多。 如果问题是研究Haskell和函数式编程范例是否有价值,答案是肯定的。 您可以将您丰富的编程理解应用于您的所有工作。
我学习了Haskell,因为它是迄今为止我尝试过的最好的函数式语言,Scala,Clojure,OCaml和Scheme,但是我并没有真正期望将它用于工作。
事实certificate,对于那些对于一个团队而言太小的零星工作来说,这是非常完美的,而且在Java中太耗时。 到目前为止,我已经使用它进行临时数据迁移,即将CSV导出转换为另一种格式,XML的批量转换(HXT比XSLT更简洁和更强大),屏幕截图和软件项目估计,包括build模风险使用概率monad并使用回溯生成最优的甘特图。 这是所有需要做的真正的工作,我甚至不打算在Java中尝试做,因为这将是一个为期多天的工作。
我现在使用它来代替Excel,因为在文本编辑器中创buildhaskell源代码中的值的列表要比在Excel中inputHaskell源代码中的代码多一点。 一旦进入haskell,我就可以做各种各样的魔法,比如回溯,概率分布等Excel不能做的事情。 如果我需要一个graphics,那么我将这些值作为CSV(2行代码)吐出并加载到Excel中。
唯一的缺点是,它需要几个月才能熟练,但值得努力恕我直言。
与程序语言不同,研究Haskell和函数式编程范例对我来说是否有价值?
如果扩展的技能是有价值的,那么:是的。
你可能会select一个好处:并行和并发编程。 过去的程序语言往往没有明确的副作用概念,因此编写并行程序很难做到正确。 函数式语言(特别是像Haskell那样限制副作用的语言)对于高效并行编程有很多话要说。
把你的袖子上的技能不能伤害。
我可以看到,如果函数式编程非常容易使用,那么函数式编程在生产环境中可以是一个优点。 MS也可以看到,当他们想出F#我想。
既然它们都编译为IL,那么可以处理要求function方法function的问题,并在程序代码中很容易地使用这些解决scheme。
通过这种方式,function性代码可以轻松地在一个生产环境中轻松find
因此,由于MS的用户群是那么大,我的猜测是,如果F#不会在不久的将来赶上,Haskell也不会。
我认为这是值得的斗争。 这将有助于你理解问题是如何解决的,而不仅仅是计算机如何工作。
也许Haskell本身就是一个特别的问题 – 作为一个纯粹的函数式语言,它有点“硬核”,可能会使事情变得复杂。
函数式编程可能非常实用 – 现在很多OO /命令式语言已经包含了一些function元素(Linq,匿名函数,只读值,函数指针/代表,types推理):您可以专注于什么应该这样做,它允许你用更less的代码expression更多(这更不容易出错)。
像Scala或F#这样的非纯function语言(标准function语言)可以很容易地集成到现有的Java或.NET项目中,所以您可以将它们所需的范例结合起来。 有关函数式语言的典型优点,请参阅此主题 。 只要想想function强大的parsing(Monadicparsing器组合器/ Parsec)或并发编程,你可以看到它们是多么有用。
与程序语言不同,研究Haskell和函数式编程范例对我来说是否有价值?
除非你想要悲惨。 Luke Plant说, 为什么学习Haskell / Python会让你成为一个糟糕的程序员 :
所以,学习Python和Haskell已经使我感到士气低落,并且鼓励我编写奇怪而难以理解的代码。
(这不完全是一个笑话。)
无论您现在使用哪种语言,拓宽视野都可以帮助您成为更好的程序员。 例如,在编写Lispmacros之后,您将永远不会以同样的方式来看待编程。 当你开始用Haskell的话来思考的时候,你会发现自己编写函数,并希望用较低级的语言来closures它。
从C#中的好吃的东西,例如lambdaexpression式,types推断,闭包等等 ,学习Haskell将会为您在主stream语言的未来尖端提供支持。
有些人喜欢Haskell编程。 如果你可以select你的环境,享受是一个考虑,那么也许你应该跳进去。
许多程序员不能select他们的工具,享受不是他们select的因素。 他们中的许多人在他们的工作场所使用C / Java / etc作为“核心项目源”,但是随后也select或需要使用Python作为“脚本”,比如带有SCons的生成脚本,生成Java的其他脚本等代码,testing系统,概念certificate等。而在其他地方,Python也被用在“核心项目”中。
8年后,Haskell将会是“来到你身边”,而不是Python。 但你可以早点来。
你可以结合使用函数式编程和语言实用。
所有现代脚本语言是JavaScript或Lua都允许使用function范例。
function概念正在强大。 注意Ruby的活动和兴趣。 最近,我还注意到了对JavaScript的兴趣,而不仅仅是浏览器脚本语言。 尽pipe现在投入的时间可能不会在今年或者下一个时间里得到回报,但您现在可以通过跳水来领先。
这取决于你的一般游戏计划。 您是否将编程作为本身的目的或作为达到目的的手段? 如果是前者,就跟Haskell一起干吧。 如果后者坚持主stream的“可雇用”语言。 等待Haskell起飞,然后扑面而来。
为什么程序化,而不是面向对象,没有看到程序正在使用多年,除了C.
商业上讲。 我会去与Java或C#。 其实他们都付出了很高的代价,并且这些技能可以和其他像Python,Ruby和JavaScript这样的语言交换。
Haskell是值得的时间和努力,虽然它是非常学术,一些银行使用它,虽然在欧洲和英国的许多人正在移动到F#的代码基地。
我不认为FOP会在商业上以很快的速度发展。 但是这些技巧绝对是在主要语言中出现的。 特别是在多核芯片devise和代码并行运行的情况下。