王垠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为何物)的同学,阅读此文及其相关讨论可能有些费劲。但王垠文章最后的一段话值得所有搞技术的同学思考:
|
|