那好吧,也许是没死,但卡内基.梅隆大学的Robert Harper教授却说(Teaching FP to freshmen)面向对象编程和设计“不适合做为现代计算机科学教学课程”,详细的内容引用如下:
“面向对象编程应该完全的从基础课程中删除掉,因为它既是反模块化,又是反并行的,这是它的非常固有的特征,所以它不适合作为一种现代的计算机科学课程。”
估计你们也意料到了,评论里出现了一些反对意见。当我把这篇文章地址贴到Facebook上后,在很短的时间里出现了16条评论,几乎都是反对的。有一个做招聘工作的人回复道“我已经疲倦了面试那些只知道Haskell语言却不会使用C里的strlen()函数的实习生。”但是,就像Robert Harper教授在对一条评论的回复中说的,“在卡耐基,我们的目标是教育学生,而不是培训学生”。这究竟是在说什么呢?难道是学院派和行业派的冲突吗?学院派通常认为“对于学生来说,他们有很多的机会去学习那些陈旧的编程方法,他们可以在日后的工作实践中按需学习那些知识”,与此同时,招聘经理们却痛恨这种现状,就像一位副总裁告诉我的,要想把一个从不错的大学里的应届毕业生培养成一个完全能工作的软件开发人员,平均所需时间是一年半。这就不奇怪为什么许多公司不喜欢要刚毕业的学生了。
我曾经历过各种编程模式的兴衰。我最初做行业编程(以及学术编程)时采用的是结构化编程模式。这种编程模式当时被认为是一个巨大的进步,但需要人们在思考和设计程序时做一些改变。后来我又经过了很长的、缓慢的、诸多痛苦的过程转变到了面向对象编程模式。我们曾经经过函数式编程的年代吗?也许吧。也许它跟其它的编程模式共存不冲突。
我们如今有了新的需求。正像当初的结构化模式和后来的面向对象模式是来满足大型程序和巨型团队的要求,如今的因为要求处理更多的数据的趋势而出现的关键问题就是并行性(parallelism)。基于这个背景出现的微软的F#语言的目标就是并行性——为了更好的在多处理器的电脑上并行工作。很显然,我们不停的向前发展是为了更好的利用最新的硬件。但是,这就可以说面向对象成为选修、我们的学生就可以等到毕业后再学习这些知识吗?我还没有被说服。
即使是在面向对象热潮达到顶峰的时候,我就坚称,并不是任何东西都可以成为对象,各种模式的混合使用在过去,在将来,都是正确之道。即使现在函数式编程正趋于流行、使用量增加的情况下仍然会是这种情况。那些古老的编程模式会完全的消失吗?我不这么认为。以后大家都不用对象了吗?不可能的。我想,那些大学,特别是声称“提供教育而培训”的大学其实是对学生的一种伤害,他们没有看到当今这个领域的真实情况。不祥之兆不断显现,函数式编程日显重要。但忽略面向对象编程不会给任何人带来好处。只是我的个人意见。