[探讨]学习函数式编程的理由.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[探讨]学习函数式编程的理由

[探讨]学习函数式编程的理由2011-10-18 09:11?|?3887次阅读?|?来源:dave.fayr?【已有0条评论】发表评论关键词:函数式编程?|?作者:Dave Fayram?|?收藏这篇资讯导读:本文是从《Functional Programming Is Hard,Thats Why Its Good》这篇文章翻译而来。文章内容如下:很奇怪不是,很少有人每天都使用函数式编程语言。如果你用Scala,Haskell,Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python,Ruby,Java或C#等面向对象的编程语言——它们用起来很顺手。不错,你也许会偶然用到一两个“函数式语言特征”,例如“block”,但人们不会去做函数式编程。然而,很多年来,我们一直被教导说函数式编程语言很好很棒。我仍然记得当我第一次阅读ESR的著名的关于学习Lisp语言的论文时的困惑。也许大多数的人对Paul Graham 的《Beating The Averages》这篇文章更加熟悉:使用Lisp开发使我们的开发周期迭代的如此之快,以至于有时当竞争对手在新闻发布会上推出他们的新功能一两天后,我们就能复制出同样的功能。当报道产品发布的新闻记者打电话给我们时,我们的产品已经拥有了同样的功能特征。那些皈依函数式编程的人中,一直常见的考虑是:学习这种新的、函数式的语言“对你有好处”;就像是某些人建议说每天30分钟的健身房活动会“让你的身体健康”一样。但这也同时暗示了这样做的难度和需要的付出。Lisp语言跟Haskell、Ocaml和Scala语言不同,被认为是出了名的难学,可以说是臭名昭著。文雅的人说这是Lisp语言的“深度广度”的体现。不文雅的人说这是“意淫”或“玩弄学术”或简单的“没必要”。我认为,它的难度跟你对它熟不熟悉有关,而且,这种难度是一种重要指标显示:学习这样的一种语言会让你编程更有效率、能力更强。它给你的初次印象不友善我7岁时就开始编程,在漫长无聊的郊区夏季里,在我祖父的计算机上瞎搞一气。我学了BASIC,用它在屏幕上画一个蹦跳的球。我学了Pascal,用它写了一个能通过PC喇叭放音乐的程序。大概10岁时我学了C语言,但遇到了一堵越不过去的墙,直到我上了高中。那就是:指针。即使不算这些该死的指针,我写、读、学习、练习中,同样遭遇无数的失败。我把祖父的硬盘给毁掉了两次(一次属意外),最后弄得不少次要自己重装操作系统。我失败,一遍遍的失败。也许你也有跟我相似的故事,也许是完全不同的一个。但我想,差不多所有学过编程的人都有过遇到困难的经历。我们在学了一些基本知识后,必然会遇到一些公认的概念上的关口,比如“指针”。很多计算机科学教授会把指针描述为他们课程上的过滤网。如果你想成为一名优秀的程序员,你必须要能理解指针。很少人能轻松的掌握它们。大多数人,包括我,则需要不断的练习和参考例子来理解什么是指针、为什么它们很重要。这种艰难的努力过程不是偶然的,是一种几乎普遍的现象。指针是一种非常强大和基础功能的概念。学会它能让你成为一名更好的程序员,能让你的思考更加形象化。即使你使用的语言并不提供指针这样的特征,但跟指针类似的数据结构和概念却随处可见。新奇事物一旦你学会了几种语言后,所有的语言都开始看起来都很相似。知道Python的人学习Ruby可能不会遇到太多的问题,知道Java的人学习C#会感到很熟悉。不错,也有意外的地方。Ruby爱好者在学习Python时会对它的comprehension感到吃惊,Java用户会对C#里的委派摸不着头脑。还是那句话,如果你只瞟一眼,它们都很相似。我可以打保票的说,如果你还不曾有过这样的认识,一旦你学了一种Lisp语言,你会发现所有的Lisp变种都很相似。有人说,大部分人第一次使用Haskell或Ocaml时都完全的不知所措。见鬼了,在Haskell里,连分号都跟别人不一样。这并不是语法的问题;Haskell和ML语言完全基于一种不同的概念、一种新的语言范式。你需要用不同的方式开发应用,不同的方式组织应用,不同的方式扩展应用。很多这样的新概念都具有不可思议的强大力量。Haskell里的Monads是跟指针一样基础且强大的概念(你很可能在不知道它叫什么的情况下就已经使用过它们了)。所以,跟学了Java后再学C#不一样,有志向学习函数式语言的人需要往回走的更远,去学习更加基础的概念后才能接下去学习。就像是完全再学习一次指针。并且,就像是当年我们刚开始学习编程一样,一些很大的概念看起来会让人迷惑茫然,让人沮丧,直到你去攻克(以及失败)它们。吃下你的药丸,找到你的药剂师尽管不好学,但我坚信,学习这些函数式编程语言会在职业上对你有好处。我相信有些人读到这点时会眼睛翻

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档