我在这里看到很多关于函数式编程语言的讨论。为什么要使用它们而不是“传统”的编程语言?它们做得比传统语言好在哪里?它们又有什么劣势?最适合使用函数式编程的应用是什么?
我在这里看到很多关于函数式编程语言的讨论。为什么要使用它们而不是“传统”的编程语言?它们做得比传统语言好在哪里?它们又有什么劣势?最适合使用函数式编程的应用是什么?
正如图形用户界面和"代码作为业务模型"的概念帮助面向对象编程变得更加广泛接受一样,我相信更多地使用不可变性和简单的(大规模)并行将有助于更多的程序员看到函数式方法所提供的好处。但是尽管我们在过去50年左右的数字计算机编程历史中学到了很多东西,我认为我们仍然有很多需要学习的。二十年后,程序员们将惊叹于我们当前正在使用的工具的原始性质,包括现在流行的面向对象和函数式语言。
对我而言,它最大的优势在于其内在的并行性,尤其是现在我们正在从更高的CPU时钟频率向更多的核心方向发展。
我不认为它会成为下一个编程范式并彻底取代面向对象的方法,但我认为我们将达到这样一个点:要么我们需要在一个函数式语言中编写部分代码,要么我们的通用目的语言将增加更多的函数式结构。
我总是对下一个大事件持怀疑态度。很多时候,不管技术是否好,下一个大事件都是历史的纯粹偶然,恰好在正确的时间和地点出现。例如:C ++ ,Tcl/Tk,和Perl。它们都是有缺陷的技术,但因为它们被认为要么解决了当今的问题,要么与根深蒂固的标准几乎相同,所以它们都非常成功。函数式编程确实可能很棒,但这并不意味着它会被采用。
但我可以告诉你为什么人们对函数式编程感到兴奋:许多程序员都有一种“转化体验”,他们发现使用函数式语言可以使他们的生产力提高一倍(或者可能是十倍),同时生成的代码更具有抗变性和更少的错误。这些人认为函数式编程是一种秘密武器;Paul Graham的Beating the Averages就是这种心态的一个很好的例子。哦,还有他的应用程序?电子商务网站应用。
自2006年初以来,函数式编程和并行性也引起了一些关注。由于像Simon Peyton Jones这样的人从至少1984年开始就一直担心并行性问题,所以在函数式语言解决多核问题之前,我不会抱太大希望。但这解释了现在出现的一些额外的关注。
总的来说,美国大学在教授函数式编程方面做得不太好。他们有强烈的支持使用Scheme教授入门编程},{{link2:Haskell也得到了一些支持,但是在教授函数式程序员的高级技术方面却很少。我曾在哈佛大学教过这样的课程,并将在塔夫茨大学再次教授。本杰明·皮尔斯曾在宾夕法尼亚大学教授过这样的课程。我不知道保罗·赫达克在耶鲁大学是否有所作为。相比之下,欧洲大学在这方面做得更好;例如,在丹麦、荷兰、瑞典和英国的重要地方都强调函数式编程。我对澳大利亚的情况了解较少。我没有看到有人提到房间里的大象,所以我认为这是我的责任 :)
JavaScript (JS)是一种函数式语言。随着越来越多的人使用JS进行更高级的操作,特别是利用jQuery,Dojo Toolkit和其他框架的高级功能,函数式编程(FP)将通过Web开发人员的后门引入。
与闭包结合使用,FP使JS代码变得非常轻巧,但仍然易读。
我敢打赌你不知道你在使用函数式编程时使用了以下内容:
一般的企业程序员,比如我所工作的大多数人,不会理解它,而且大多数的工作环境也不允许你用它来编程。
然而这只是一个时间问题。普通的企业程序员会学习当前流行的技术。15年前,他们还不懂面向对象编程。
如果 函数式编程流行起来,那么“普通企业程序员”也会跟随潮流。
它并没有被大学教授(或现在是否有?)
这各大学不太一样。在我的大学里,SML 是学生们首先接触的语言。
我相信MIT教授Lisp作为第一年课程。当然,这两个例子可能不代表全部情况,但我相信大多数大学至少会提供一些函数式编程的选修课程,即使他们不把它作为强制性的课程内容。
大多数应用程序都足够简单,可以通过普通的面向对象方式解决
然而这并不仅是“是否足够简单”的问题。使用函数式编程是否会使解决方案更加简单(或者更易读、更健壮、更优雅或者更高效)?很多事情“可以通过Java来解决”,但是仍需要大量的代码。
总之,需要记住的是,函数式编程支持者已经声称它是下一个大潮流已经好几十年了。也许他们是正确的,但需要注意的是,当他们在5年、10年或15年前做出同样的声明时,其实并不正确。
但他们的优点之一,最近C#朝着函数式编程方向迅速发展,以至于它几乎将一代程序员变成了函数式编程程序员,甚至他们自己都没有注意到。这可能会为函数式编程“革命”铺平道路。也许吧。 ;)
如果一个人无法看到其他艺术形式的价值,他就无法理解自己选择的艺术作品的完美与不足。遵循规则只能使技术发展到一定程度,然后学生和艺术家必须学习更多并寻求进一步发展。因此,研究除策略之外的其他艺术形式是有意义的。
通过观察他人的活动,谁没有学到更多关于自己的东西呢?要学剑,就应该学吉他。要学拳,就应该学商业。仅仅学习剑道会让你心胸狭隘,并阻止你向外扩展。
--宫本武藏,《五轮书》