应用功能编程

时间:2009-07-22 20:58:02

标签: java scala functional-programming

我一直对编程感兴趣,在过去的6年里,我几乎完全使用Java。我刚完成了大学学业,并在公司担任Java开发人员。

这些年来编程一直是业余爱好和过去时间的最爱,但这对我已经习惯了Java的意义上有一点负面影响我从来没有超越它作为一种编程语言。我确实通过学习正则表达式,SQL并尝试扩展我的知识,并研究了一些XML,但我无法用新语言来学习如何正确使用它,因为它们在核心看起来都很相似,我发现每种新语言的学习曲线都很烦人。我觉得我必须经历整个过程才能结束,因为我开始了,因为我觉得其他命令式语言没有什么可以提供给我(我知道这个声明可以开始战斗,这不是我的意图)。

因此,我决定在某一点上探索函数式编程的神奇世界。我开始读一本关于Haskel的书,从学术角度(我主修数学)发现它真的很有趣,但是找不到它的实际应用,让我足够学习语言。

所以现在Java是我这一天的主要部分,因为我得到了代码的支付(我喜欢它,就像我只是一个爱好),我觉得有必要再次拓宽我的视野和再次功能编程似乎是一个好主意。

我想我会从Scala开始,因为我是Java识字者(因为他们可以互相“交谈”,使转换更容易,更可重复使用)所以我的问题是:根据您的经验,学习功能语言“有意义”?是否有任何真实的应用程序,知道这个范例可能派上用场?不仅是个人娱乐,而且这也是行业中的“专业”?

6 个答案:

答案 0 :(得分:8)

在我看来,学习函数式编程不仅是一个好主意,因为它会让你成为一个更好的程序员(当然我认为我同意)但是因为它似乎会在不久的将来变得非常流行。

很多“大师”都说这将是保持摩尔定律生存的唯一方法。计算机时钟速度已达到顶峰,提高处理器速度的唯一方法是添加越来越多的内核。在这种情况下,功能编程变得很方便,因为在那些语言中数据是不可变的,这使得它们很容易进行并行化(它实际上可以自动完成)。

您可能希望查看下一个参考资料

Buff,我希望它不是太无聊,; - )

答案 1 :(得分:7)

学习函数式语言是一个很大的优势,无论您是否曾在日常工作中使用它。请考虑以下事项:

  1. 成功并发编程的最大建议之一是尽可能避免线程对象中的可变状态。功能编程教你如何做到这一点。
  2. 大多数功能程序员一旦克服了非实质性的学习曲线,就会声称他们的技术使他们的工作效率远高于标准命令式语言。他们的代码更无错误,只是其他语言的一小部分。想想当你最终理解正则表达式时你所获得的生产力提升。现在把它放在类固醇上。 那是 FP的感觉。
  3. 功能技术正在迅速进入命令式编程。想想C#和Javascript中的闭包,很快(也许,如果我们幸运的话)使用Java。这两个世界很可能会很快聚集在一起。
  4. 最后,在求职面试中,了解一种功能语言将帮助您从普通的J2EE / .NET克隆中脱颖而出。它标志着你是一个自我启动者,一个训练有素的学习者,一个充满激情的程序员 - 无论你是否真的是这些东西。只是不要再成为斯卡拉的另一个狂热粉丝了,责骂你即将成为老板,因为他错过了最好的编程技巧,因为......你明白了。侮辱未来的雇主永远不会好。
  5. 对我来说,学习Haskell让编程变得比以前更有趣。它也可以为你做同样的事情。祝你好运!

答案 2 :(得分:2)

功能性编程已经在金融领域取得进展。如果你认为金融分析师多年来一直在Excel中“编程”,这实际上是一个功能范例(更准确地说,是功能反应性的),这真的不是那么令人惊讶。

所以,是的,知道函数式编程可以打开几个门,只有OO不能,这样的工作可能非常有趣。

严格地说,作为Java程序员,您将学习日常可以在Java中使用的技术(尽管您需要更好的Collections库)。这些技术可以减少代码中的错误数量,使多线程和多任务更容易,并使代码更接近于实现的业务规则,而不是实现的机制。

现在,还有其他理由特别要学习Scala。但是,上面的那些是我可能想要学习函数式编程的原因。

答案 3 :(得分:1)

答案 4 :(得分:1)

学习一门功能语言绝对有道理。正如埃里克雷蒙德所说,如果你学习了一种功能语言,它将使你成为一个更好的程序员用你选择的语言。

从行业的角度来看,如果你能用Haskell或Objective Caml这样的函数式语言编写好的代码,那么你会突然对极少数的职位有很高的要求。目前尚不清楚是否有任何明智的人会认为这是“专业人士”,但肯定有一些非常有趣的公司只有职能程序员才有空缺。

答案 5 :(得分:1)

是的,它非常有意义,并且可以立即用于您在生产中可能遇到的一些常见任务(即使您使用Java编写它们)。例如,如果您需要编写解析器(例如,用于DSL),您会发现使用功能技术可以实现更清晰,更简洁的代码。