分享

王垠:面向对象编程和函数式编程的问题出在哪里?

 ErrStr 2015-03-21

转自:http://geek.csdn.net/news/detail/3603

王垠11月9日在自己的英文博客上发表了一篇文章“What's wrong with Object-Oriented Programming and Functional Programming”(无法直接访问),阐述了他对面向对象编程和函数式编程的看法,在Hacker News上引起很多讨论,一度排到了榜首。

感谢外刊IT评论的翻译。如果谁能把Hacker News上主要的反对意见也翻译出来,就更完美了。

之前他的中文博客有一篇中文文章“对函数式语言的误解”,其实讲的意思类似,可能还深入一些,无需梯子,可以直接阅读。

此文他虽然将面向对象和函数式并列,看上去似乎各打五十大板,但对面向对象的批评比较简单,就是面向对象总是要实现万事万物皆对象的理念,所以对函数的实现比较致命,函数无法作为数据来传递,所以需要各种各样的设计模式来弥补。

文章的重点其实是批评纯函数式语言。所以主要的反对意见来自Haskell阵营。

刚才找梯子去查看了一下王垠的博客,发现他已经把原文删掉,而是在原文URL上贴了一篇回应Haskell阵营批评的文字Reflections on “What’s Wrong with OOP and FP”。他将原文中关于面向对象的批评部分去掉,另外发表了一篇新的文章“Purely Functional Languages and Monads”

回应文字中的主要观点是,这些Haskell狂热同学的批评都不在点上,因为与已经从事函数式语言实现相关工作较多的王垠相比,他们更多是使用者,对函数式语言的理解太浅了。事实上,王垠当年和他们一样,也是Haskell的铁杆粉丝,信仰monad和纯函数式语言能够拯救世界,而且为此付出惨痛代价。他甚至因此与自己在康奈尔大学的教授争论,并最终离开了康奈尔……(相关故事请读王垠之前的博客文章。)

王垠之后转投到印第安纳大学Amr Sabry的门下,有机会与Dan Friedman(The Little Schemer系列经典书的作者)和Kent Dybvig等最好的函数式语言学者交流。他认为,这些人对函数式语言的理解比Haskell的创造者们(我猜应该以Simon Peyton Jones为首)还要深。比如lazy evaluation其实是Friedman 1976年发明的,他在类型系统上的造诣颇深,但在Scheme的设计里,并没有这些东西。

王垠评论说,函数式语言的程序员不要老是觉得自己掌握了真理,有什么魔法,其实没有。正如他在Cornell的教授所说,任何编程语言中都没有什么魔法或者万灵丹药,使其使用者成为好的程序员。

他还认为,相比之下面向对象的程序员现在越来越不那么热衷于门派之争,至少他们忙于解决现实问题,而非语言自己的困难。

对函数式语言不熟悉(比如不知道monad为何物)的同学,阅读此文及其相关讨论可能有些费劲。但王垠文章最后的一段话值得所有搞技术的同学思考:

无论任何事情,当走向极端时都是有害的。极端化时,面向对象编程和函数式编程都试图把整个世界装入它们的特有模型中,但这个世界是在完全不依赖我们的大脑思考的情况下运转的。如果以为你有一个锤子,就把所有东西都当成钉子,这明显是不对的。只有通过认清我们的真实世界,才能摆脱信仰对我们的束缚。

不要让世界适应你的模型。让你的模型适应世界。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多