48

这些天来,我正在认真研究函数式编程。

虽然我对 Haskell 及其似乎提供的可能性感到非常兴奋,但我现在也可以看到我需要一段时间来学习。在一个关于如何学习 Haskell的 SO 问题中,一个答案指出实际上“掌握”它需要几个月甚至几年的时间。

现在,我知道 C、PHP、一些面向对象的东西等等。听说 Haskell 在“现实世界”中并没有太多使用,我会更好地提高我所知道的常规语言的技能吗?Haskell 值得奋斗吗?

在这个关于为什么人们认为函数式编程会流行的问题中,结论似乎是函数式编程会“流行”。但是程序编程肯定会保持领先,对吧?

编辑:keparo 很好地澄清了我的问题:与过程语言相反,学习 Haskell 和函数式编程范式对我来说是否有价值?

4

13 回答 13

56

Haskell 并不像人们想学习的那么难。Haskell 为您打开了一个您从未知道存在的新世界。它与学习任何其他语言一样有价值。你可能找不到要求你进行 Haskell 编程的工作,但这真的意味着一门语言没有价值吗?

Haskell 会教你很多新东西,它会告诉你如何用你/do/ 使用的语言更好地编程。你可以在业余时间用它来做你自己的个人项目。

如果您将“真实世界”定义为“现金生成器”,Haskell 在“真实世界”中的使用并不多。因此,如果这是您的目标,那么您可能需要重新考虑目标:p

另外,我不太喜欢选择的“如何学习haskell”答案的那一部分。掌握任何语言都需要几个月到几年的时间,而不仅仅是 Haskell。取决于您如何定义“主人”。我可以以相当高的效率使用 Haskell,而且我才学习了一个月,甚至一直在慢慢学习它。

于 2009-06-22T04:56:34.570 回答
20

如果不出意外,学习 Haskell 提供的思维方式改变将在您不得不重新使用那些仍在工作场所使用的程序语言时为您提供帮助。

函数式范式开始进入各种主流应用程序和语言——甚至 C++ 也将在 C++0x 中添加一个(残缺的)lambda。

您可能还想查看一些混合语言,例如 Scala 或 OCaml。Scala 被用于 Twitter,OCaml 被用于 Jane's Street 的金融交易平台。

于 2009-06-21T19:37:35.847 回答
11

我学习 Haskell 是因为它是迄今为止我在 Scala、Clojure、OCaml 和 Scheme 中尝试过的最好的函数式语言,但我并没有认真期望将它用于工作。

事实证明,它非常适合那些对团队来说太小并且在 Java 中太耗时的零工。到目前为止,我已经将它用于临时数据迁移,即将 CSV 导出到另一种格式,XML 的批量转换(HXT 比 XSLT 更简洁和更强大),从互联网上抓取屏幕和软件项目估计,包括建模风险使用概率单子并使用回溯生成最佳甘特图。这都是需要做的真正的工作,我什至不会费心去尝试用 Java 做,因为这将是一个多天的工作。

我现在使用它而不是 Excel 来处理任何模糊的数学问题,因为在文本编辑器中在 haskell 源中创建值列表比将它们输入 Excel 更费力。一旦进入haskell,我就可以做各种Excel不能做的魔术,比如回溯、概率分布等。如果我需要一个图表,那么我将这些值作为 CSV(2 行代码)输出并将它们加载到 Excel 中。

唯一的缺点是需要几个月的时间才能精通,但值得付出努力恕我直言。

于 2011-02-14T22:07:38.893 回答
10

您可能不应该期望在任何地方使用 Haskell 的频率几乎与专业环境中的 C 家族语言一样频繁。如果问题是学习 Haskell 和函数式编程范式对您是否有价值,答案是肯定的。您可以将您对编程的丰富理解应用到您的所有工作中。

于 2009-06-21T19:34:55.213 回答
7

与过程语言相反,学习 Haskell 和函数式编程范式对我来说有价值吗?

如果拥有扩展的技能组合很有价值,那么:是的。

您可能会获得一个优势:并行和并发编程。过去的过程语言往往没有明确的副作用概念,因此很难在其中编写并行程序。函数式语言(特别是像 Haskell 那样限制副作用的语言)对于高效的并行编程有很多话要说。

掌握这项技能不会有什么坏处。

于 2009-06-21T20:37:35.523 回答
6

与过程语言相反,学习 Haskell 和函数式编程范式对我来说有价值吗?

除非你想痛苦,否则不会。Luke Plant 在《为什么学习 Haskell/Python 会让你成为更差的程序员》中说:

所以,学习 Python 和 Haskell 让我士气低落,并鼓励我编写奇怪且难以理解的代码......

(这不完全是个玩笑。)

于 2009-06-24T19:15:03.400 回答
5

我可以看到,如果函数式编程很容易被非函数式代码使用,那么它在生产环境中可能是一个加分项。我猜当他们想出 F# 时,MS 也能看到这一点。

由于它们都编译为 IL,因此您可以处理需要函数式方法的问题,并在您的程序代码中非常轻松地使用这些解决方案。

这样,功能代码可以轻松地在生产环境中一次找到它的方式

因此,由于 MS 的用户群如此之大,我的猜测是,如果 F# 在不久的将来不会流行起来,那么 Haskell 也不会。

于 2009-06-21T19:40:22.253 回答
4

我觉得奋斗是值得的。它将帮助您了解问题是如何解决的,而不仅仅是计算机是如何工作的。

也许一个特殊的问题是 Haskell 本身——作为一种纯粹的函数式语言,它有点“硬核”,另一方面甚至可能使事情复杂化。

相反,函数式编程可能以非常实用的方式非常有用 - 由于这个原因,许多 OO/命令式语言现在已经包含函数元素(Linq、匿名函数、只读值、函数指针/委托、类型推断):您可以专注于应该这样做,这样您就可以用更少的代码表达更多内容(即更不容易出错)。

Scala 或 F# 等非纯函数式语言(标准函数式语言)可以轻松集成到现有的 Java 或 .NET 项目中,因此您可以在需要时结合两种范式的优势。有关函数式语言的典型优势,请参阅此线程。想想极其强大的解析(Monadic 解析器组合器 / Parsec)或函数式语言可能的并发编程,你就会看到它们有多么有用。

于 2009-06-24T19:30:28.983 回答
2

无论您目前碰巧使用哪种语言,拓宽您的视野都可以帮助您成为一名更好的程序员。例如,在编写 Lisp 宏之后,您将永远不会以同样的方式看待编程。在你开始用 Haskell 术语思考之后,你会发现自己在编写函数并希望使用不太高级的语言来实现闭包。

从 C# 中的优点(如 lambda、类型推断、闭包等)来看学习 Haskell 将使您在未来主流语言的前沿领先一步。

于 2009-06-21T19:37:16.270 回答
2

有些人喜欢用 Haskell 编程。如果你可以选择你的环境,并且享受是一个考虑因素,那么也许你应该加入。

许多程序员无法选择他们的工具,享受不是他们选择的因素。他们中的许多人开始在他们的工作场所使用 C/Java/etc 作为“核心项目源”,但随后也选择或需要将 Python 用于“脚本”,例如带有 SCons 的构建脚本,其他生成 Java/etc 的脚本代码、测试系统、概念证明等。在其他地方,Python 也被用于“核心项目”。

8 年后,它将是 Haskell,而不是 Python,它将“向你走来”。但你可以早点来。

于 2009-06-21T19:49:59.113 回答
1

您可以结合使用函数式编程并对语言保持务实。

所有现代脚本语言如 JavaScript 或 Lua 都允许使用函数式范例。

于 2009-06-30T11:27:43.793 回答
1

功能概念正在变得强大。请注意围绕 Ruby 的一系列活动和兴趣。最近,我还注意到除了浏览器脚本语言之外,对 JavaScript 更感兴趣了。您现在就可以通过潜入来领先于游戏,尽管所投入的时间可能不会在今年或明年得到回报。

这取决于您的总体游戏计划。您是否将编程本身作为目的或作为达到目的的手段?如果是前者,请与 Haskell 一起疯狂。如果是后者,请坚持使用主流的“可使用”语言。等待 Haskell 起飞然后突袭。

于 2009-07-05T20:38:26.553 回答
0

为什么程序化而不是面向对象,除了 C 之外,多年来没有看到程序化被使用。

从商业上讲。我会选择 Java 或 C#。他们都支付高薪并不重要,并且技能可以与其他志同道合的语言(如 python、Ruby 和 JavaScript)互换。

Haskell 值得花时间和精力,虽然它非常学术,但一些银行使用它,尽管欧洲和英国的许多银行正在将代码库转移到 F#。

我认为 FOP 在商业上不会以极快的速度发展。但是这些技术肯定会出现在主要的语言中。尤其是多核芯片设计并使代码在它们上并行运行。

于 2010-10-25T02:29:28.930 回答