面向对象编程已死

面向对象编程已死

那好吧,也许是没死,但卡内基.梅隆大学的Robert Harper教授却说(Teaching FP to freshmen)面向对象编程和设计“不适合做为现代计算机科学教学课程”,详细的内容引用如下:

“面向对象编程应该完全的从基础课程中删除掉,因为它既是反模块化,又是反并行的,这是它的非常固有的特征,所以它不适合作为一种现代的计算机科学课程。”


估计你们也意料到了,评论里出现了一些反对意见。当我把这篇文章地址贴到Facebook上后,在很短的时间里出现了16条评论,几乎都是反对的。有一个做招聘工作的人回复道“我已经疲倦了面试那些只知道Haskell语言却不会使用C里的strlen()函数的实习生。”但是,就像Robert Harper教授在对一条评论的回复中说的,“在卡耐基,我们的目标是教育学生,而不是培训学生”。这究竟是在说什么呢?难道是学院派和行业派的冲突吗?学院派通常认为“对于学生来说,他们有很多的机会去学习那些陈旧的编程方法,他们可以在日后的工作实践中按需学习那些知识”,与此同时,招聘经理们却痛恨这种现状,就像一位副总裁告诉我的,要想把一个从不错的大学里的应届毕业生培养成一个完全能工作的软件开发人员,平均所需时间是一年半。这就不奇怪为什么许多公司不喜欢要刚毕业的学生了。

我曾经历过各种编程模式的兴衰。我最初做行业编程(以及学术编程)时采用的是结构化编程模式。这种编程模式当时被认为是一个巨大的进步,但需要人们在思考和设计程序时做一些改变。后来我又经过了很长的、缓慢的、诸多痛苦的过程转变到了面向对象编程模式。我们曾经经过函数式编程的年代吗?也许吧。也许它跟其它的编程模式共存不冲突。

我们如今有了新的需求。正像当初的结构化模式和后来的面向对象模式是来满足大型程序和巨型团队的要求,如今的因为要求处理更多的数据的趋势而出现的关键问题就是并行性(parallelism)。基于这个背景出现的微软的F#语言的目标就是并行性——为了更好的在多处理器的电脑上并行工作。很显然,我们不停的向前发展是为了更好的利用最新的硬件。但是,这就可以说面向对象成为选修、我们的学生就可以等到毕业后再学习这些知识吗?我还没有被说服。

即使是在面向对象热潮达到顶峰的时候,我就坚称,并不是任何东西都可以成为对象,各种模式的混合使用在过去,在将来,都是正确之道。即使现在函数式编程正趋于流行、使用量增加的情况下仍然会是这种情况。那些古老的编程模式会完全的消失吗?我不这么认为。以后大家都不用对象了吗?不可能的。我想,那些大学,特别是声称“提供教育而培训”的大学其实是对学生的一种伤害,他们没有看到当今这个领域的真实情况。不祥之兆不断显现,函数式编程日显重要。但忽略面向对象编程不会给任何人带来好处。只是我的个人意见。

[英文原文:Object Oriented Programming is Dead ]
分享这篇文章:

18 Responses to 面向对象编程已死

  1. rexfire says:

    完全不知到你在说神马~

  2. Sweet says:

    他想说,没有什么技术有死与不死之分,只有适合和不适合。

    • Ricol says:

      真他妈会忽悠,以前从面向过程转面向对象的时候,大家都说面向对象如何如何好,什么对真实世界的最直观的模拟,现在又说它怎么不好了。什么都可以过时,“忽悠是这个世界永恒的主题”这句话永远都不会过时。

  3. Levi says:

    有点标题党的意思.

  4. 傲世狂少 says:

    这么长时间没新文章了啊

    • 路人β says:

      其实现在开发web应用,除去使用的框架,开发过程中有谁真正用到了面向对象的设计模式(一个类具有属性和行为),面向对象也只不过是提供了class,让开发者更好的定义,使用数据结构,至少我做到现在,定义的类都是只有属性,getter,setter等方法(pojo类),还有顶多用了些多态和继承,但是现代支持函数式编程的语言,也可以使用多态,继承,定义类类型数据结构

  5. aqee says:

    楼上真可爱!

  6. mic_x says:

    我个人的语言学习历程:basic -> c -> java,现在java是我的工作语言。
    在同事的推荐下,看了《计算机程序的构造和解释》,发现lisp语言是如此的优美,并从中了解了程序的本质。
    个人认为,作为语言的学习,java这类高层语言并不适合,因为它屏蔽了很多底层的细节(内存模型等),相反学习c甚至是lisp更有助于对程序本质的了解。而且从c或者lisp转到java语言非常容易,这里说的java语言只是指语法本身。如果要学习面向对象,设计模式,那应该是更深层次的学习了。。。

  7. UncleJan says:

    其实每种类型的语言都有适合它的舞台,作者应该想说,我们不能完全依赖某一种语言,而是根据情况选择不同的语言。

  8. shaojing says:

    作者已经说得很明确了,OOP是反模块化和反并行的,只有函数式才能救我们。

  9. 349516385 对这篇文章的反应是垃圾
  10. shady 对这篇文章的反应是飘过~
  11. wxmurphy says:

    能解决问题是关键,没有什么死不死的,想太多反而容易陷入困境…

  12. mazw 对这篇文章的反应是标题党
  13. www.09-29.com says:

    有个百度贴吧【php面向过程原生开发】吧。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据