45

我已经阅读了一些问题,例如 Scala vs Haskell 讨论两种语言的优点或学习哪种语言,但我已经知道我想学习 Scala。我是 uni 的 Java 程序员,现在主要使用 PHP。

我想学习 Scala,因为它看起来像是对个人项目的 Java 的改进,而且我还想学习一种函数式语言来提高我作为程序员的知识。

我想知道学习 Haskell 作为函数式编程的介绍是否是一个好主意,因为它纯粹是函数式的,所以我会正确地学习它,而不是在不知道为什么的情况下在 Scala 中随意使用一些函数式编程?

我也想将 Haskell 用于个人项目等,因为它看起来很棒,但我并没有真正看到它在现实世界中的许多应用,似乎更多地用于学术研究,因此想要学习它以获得功能理解然后继续到斯卡拉。

4

6 回答 6

86

作为一个来自 Java 的人,对于他来说 Scala 是 Haskell 的入门药物,我碰巧认为这是一个好主意(首先学习 Haskell)!

Haskell 从概念上讲是一种比 Scala 简单得多的语言,如果您的目标是学习如何进行函数式编程,那么如果您从 Haskell 开始,您就会情不自禁地这样做。按照设计,Scala 支持一种“传统模式”的编码,如果您不想这样做,您实际上不必过多地改变您的 Java(或 PHP)习惯。我认为这是一个战略决策——而且是一个很好的决策!——旨在提高顽固的 Java 拥护者的采用率。

但那不是你!您实际上学习新事物很感兴趣……那么为什么不全力以赴呢?在纯粹的环境中学习函数式编程,没有混乱和回归旧习惯的诱惑,将在你的大脑中具体化概念。

然后一定要回到 Scala 并了解它与 Haskell 的不同之处;它在某些方面更弱,在其他方面更强大,但是您将在更好的基础上欣赏这些差异。

于 2011-09-29T08:38:58.813 回答
17

我不会那样做的。如果您直接使用 Scala(您的最终目标),您可以节省时间。无论如何,您将学习函数式编程,但由于 Scala“不那么纯粹”,您将能够使用一些类似 Java 的结构开始在 Scala 中编写程序,这将使过渡更简单。

即使您进入 Haskell,您的第一个程序的“功能质量”也将低于后来的程序,因为只有实践才能改善这一点。启动 Scala,您的第一个程序将像您在 Java 或 PHP 中的第一个程序一样“质量较差”,但通过练习,您会有所改进。花时间在不相关的任务上,希望他们能有所帮助,这可能会导致你浪费时间。

专注于你的目标。如果那是 Scala,那就去吧。

更新:我相信可能与问题有关。它提出了关于生产力(交付软件)与寻求“纯知识”的观点。

于 2011-09-29T08:23:02.517 回答
17

我是从 Java 背景来到 Scala 的。最初,我只是将 Scala 视为更好的 Java。随着时间的推移,我开始在 Scala 中使用越来越多的函数式概念。最终,我觉得我需要对函数式编程有更纯粹的理解。正是在这一点上,我离开并学习了 Haskell。

当我回到 Scala 时,我发现使用函数式风格要容易得多,而且我之前苦苦挣扎的一些概念也变得更有意义了。

您不必学习 Haskell 即可成为优秀的 Scala 开发人员,但我认为,一旦您在 Scala 中达到一定水平,对函数式编程概念有更深入的理解确实会有所帮助。

于 2011-09-29T08:46:12.913 回答
7

直接从 Scala 开始,而不首先使用任何纯函数式编程语言的风险在于,您可能会过于频繁地被过程解决方案所吸引。

不过,我不会尝试将 Haskell 作为函数式编程的介绍:并不是说它特别难——它的语法非常简洁——但它绝对是非常奇特的(即使在函数式编程的奇特世界中),我认为你应该尝试使用您可以更轻松地将语言移植到 Scala,例如 Racket 或普通 Scheme。

为了更好地理解我的意思,请查看 Haskell、Scala 和 Scheme 中的列表推导。

于 2011-09-29T09:14:11.663 回答
4

I learned Haskell first and then Scala and never regretted. You will gain a much deeper appreciation of FP if you learn Haskell first. Your understanding of the concepts behind FP and why they are important will be seared in. Much of Scala is taken from Haskell (IMHO). It will make more sense when you have the Haskell background. Don't shy away! Your efforts will be rewarded.

于 2011-10-06T03:12:55.653 回答
0

For me, I want to learn Scala and functional programming; and, thus simply, I am learning Scala. My study material is Programming Scala. After I have read the early chapter on syntx and stuff, I have skipped chapter covering OO stuff and jumped to Chapter 8 which cover the functional programming stuff. There I let myself struggle with FP.

I read this scala code, which is written in FP way and analyze it. You want to learn Scala for "...an improvement on Java for personal projects." and Haskell for FP intro. So, it seems that first of all, you want to be productive with your java project and then grasp FP as a side effect. To be productive, you have to master the language. There are much to learn and master the language and the only way to master the language is that you have to write the code in that language. As you learn/use Scala, you can't avoid FP out right even if you want to. I have been reading the Scala blogs(the book too) and the authors always go out of their way to do explanation when it comes to FP concept. You don't have to worry about not grasping FP by going Scala route. Yes, you can draw inspiration from Haskell like this when you are learning Scala. Or as Chris Turner above have pointed out, you can delve into more FP when you are already productive with Scala.

You wanna go to point A, why not go to point A directly? If you go via the route of point B (Haskell), you will have to postpone your productivity as Pere Villega mentioned.

于 2011-11-08T23:16:08.693 回答