我读过一些问题,比如Scala和Haskell讨论两种语言的优点或要学习哪些,但我已经知道我想学习Scala。我是uni的Java程序员,现在主要使用PHP。
我想学习Scala,因为它看起来像个人项目的Java改进,我也想学习一种函数式语言来提高我作为程序员的知识。
我想知道将Haskell作为函数式编程的介绍是否是一个好主意,因为它纯粹是函数式的,所以我要正确地学习它而不是偶然使用Scala中的一些函数而不知道为什么?
我也喜欢将Haskell用于个人项目等,因为它看起来很棒,但我并没有真正看到它的许多真实应用,似乎更多地用于学术事物,因此想要学习它以获得功能性的理解然后转到Scala。
答案 0 :(得分:85)
作为一名来自Java的人,并且Scala是Haskell的门户药物,我碰巧认为这是一个好主意(首先学习Haskell)!
Haskell在概念上是一种比Scala简单得多的语言,如果你的目标是学习如何在功能上进行编程,那么如果你从Haskell开始,你就会情不自禁。根据设计,Scala支持一种编码的“遗留模式”,如果你不愿意,你不需要过多地改变你的Java(或PHP)习惯。我认为这是一个战略决策 - 而且是一个好的决定! - 意味着增加在硬壳Java坚定者中的采用。
但那不是你!你实际上感兴趣在学习新东西时...所以为什么不全力以赴?在纯粹的环境中学习函数式编程,没有杂乱和回归旧习惯的诱惑,将使你脑中的概念明确化。
然后通过各种方式返回Scala并了解它与Haskell的区别;它在某些方面都较弱,而在其他方面则更强,但你会更好地了解这些差异。
答案 1 :(得分:17)
我不会这样做。如果你直接去Scala(你的最终目标),你可以节省时间。无论如何你都会学习函数式编程,但是由于Scala“不那么纯粹”,你将能够开始在Scala中编写程序,使用类似Java的结构,这将使转换变得更简单。
即使你进入Haskell,你的第一个程序将比以后的程序具有更少的“功能质量”,因为只有练习可以改善这一点。启动Scala你的第一个程序将是“质量较差”,因为你的第一个Java或PHP程序,但通过练习,你将得到改善。花时间在不相关的任务上,希望它们可以提供帮助,这可能会导致你浪费时间。
专注于你的目标。如果那是Scala,那就去吧。
更新:我认为this可能与问题有关。它提出了生产力(提供软件)与寻求“纯粹知识”的观点。
答案 2 :(得分:17)
我从Java背景来到Scala。最初我只关注Scala作为更好的Java。随着时间的推移,我开始在Scala中使用越来越多的功能概念。最终,我觉得我需要对函数式编程有更纯粹的理解。就在这时,我离开了,学习了Haskell。
当我回到Scala时,我发现使用功能样式更容易,而且我之前努力解决的一些概念更有意义。
你不必学习Haskell成为一名优秀的Scala开发人员,但我认为一旦你在Scala达到一定程度,对函数式编程概念有了更深入的了解,这确实有帮助。
答案 3 :(得分:7)
直接从Scala开始而没有首先使用任何纯函数式编程语言的风险是,您可能会经常被程序解决方案所吸引。
我不会尝试Haskell作为函数式编程的介绍:不是说它特别难 - 它的语法非常简洁 - 但它绝对是非常奇特的(即使在函数式编程的特殊世界中)我认为你应该尝试使用一种语言,您可以更轻松地移植到Scala,例如Racket或plain Scheme。
为了更好地理解我的意思,请查看Haskell,Scala和Scheme中的列表推导。
答案 4 :(得分:4)
我首先学习了Haskell,然后学习了Scala并且从未后悔过。如果你先学习Haskell,你将会对FP有更深入的了解。您对FP背后的概念及其重要性的理解将会深入人心。大部分Scala都来自Haskell(恕我直言)。当你拥有Haskell背景时,它会更有意义。不要回避!你的努力将得到回报。
答案 5 :(得分:0)
对我来说,我想学习Scala和函数式编程;而且,简单来说,我正在学习Scala。我的学习材料是Programming Scala。在我阅读了关于syntx和stuff的早期章节后,我跳过了关于OO内容的章节,并跳到了第8章,其中涵盖了函数式编程的内容。在那里,我让自己与FP斗争。
我读了this scala代码,它以FP方式编写并分析it。您想学习Scala“......对个人项目的Java改进。”和Haskell for FP intro。因此,首先,您希望通过Java项目提高效率,然后将FP视为副作用。为了提高工作效率,您必须掌握语言。学习和掌握语言有很多东西,掌握语言的唯一方法就是必须用该语言编写代码。当您学习/使用Scala时,即使您愿意,也无法避免FP正确。我一直在阅读Scala博客(也是这本书),作者总是在FP概念方面不遗余力地做解释。您不必担心不通过Scala路线来抓住FP。是的,当您学习Scala时,您可以从Haskell中获取灵感,如this。或者正如上面的Chris Turner指出的那样,当您已经使用Scala生产时,可以深入研究更多FP。
你想去A点,为什么不直接去A点?如果你经过B点(Haskell)的路线,你将不得不将你的工作效率推迟Pere Villega。