计算机大师Dijkstra谈Haskell和Java

2001年,出生于荷兰的计算机大师、 图灵奖获得者Edsger W. Dijkstra给德州大学预算委员会写信,力劝不要将计算机入门课程改为Java。这封信的PDF版可以从这里下载。不幸的是,学校最终还是用Java课程替换了Haskell。相关联的,麻省理工的计算机程序结构和分析课程(6.01)中的Scheme语言也被Python语言替换掉。

致预算委员会成员

我写这封信给你们是因为有谣言说,大学教学中的计算机入门课程将不再使用函数式编程语言Haskell,而是使用命令式语言Java,鉴于此,我认为预算委员会有责任去阻止这项错误的决定。

你们知道,这不是小事。其它州的同行经常好奇于我如何能在德州奥斯汀这样的地方生存下来,他们都以为德州顽固的保守主义必然造就了同样顽固的平庸。我的回答通常是,“不要担心,教育系统还是一个比较开明的地方,例如在计算机入门课程上,我们教新生Haskell语言”;他们的反应起初通常都是怀疑,然后是嫉妒——大多是因为他们的大学课程无法再从Pascal语言向C++或Java这样的语言的转变中恢复回来。

我偏爱函数式编程的一个非常现实的原因是,对于新生的课程,大多数学生都已经对命令式编程有一定的熟悉。让他们面对新奇的函数式编程,能立即传达一个信息:编程比他们想象的要丰富的多。并且,他们很快就会观察到,对于他们用高中时学到的编程知识很难表达或无法表达的问题,函数式编程能提供优雅的解决方案。

而选择函数式编程的一个最根本的原因是,相比起命令式编程语言,它更容易当成数学对象来使用,在教学中你可以用它精确的解释程序是什么。另外一个优势是函数式编程的“延迟执行(lazy evaluation)”,它提供了一个环境来防止操作性的推理12

最后,在Haskell语言跟Java的具体方面对比中,尽管Haskell不完美,但仍然比Java好几个数量级,Java就是一个大杂烩(它是通过大范围的广告和销售员夸张的宣传才达到它的商业接受)。总得来说,这事非常的糟糕,业界把有目共睹的低劣的设计当作了“事实”标准。我个人的认为,大学里应该让更健康的编程方式存在。

不仅仅是小提琴能塑造小提琴家,我们全都被我们使用的工具塑造,而在编程语言方面,影响是潜移默化的:它们塑造我们思考的习惯。这使得第一种编程语言的选择非常的重要。我们应该把入门课程当成一种工具来创造一种为计算机科学教学服务的文化,而不是去强迫丢掉过去的那些知识(如果非要这样,那我们的过去算是什么,成了永远的遗物)。这种选择担负着对我们的大学生的沉重责任,这也就是为什么这种事不能让某个什么主席来决定,而是应该由预算委员会来决定。这种事情不能让什么公务员或政客办理,这里需要有远见的政治家。

Austin, 12 April 2001

Edsger W. Dijkstra

  1. On the cruelty of really teaching computing science
  2. Real mathematicians don’t prove
分享这篇文章:
[英文原文:Dijkstra on Haskell and Java ]

21 Responses to 计算机大师Dijkstra谈Haskell和Java

  1. Adam says:

    又是语言之争,有意思吗,无聊到这种地步了吗,你是大师又如何,大师放的屁都是香的

    • 我其实想说两句 says:

      这不是程序语言之争。
      你了解Dijkstra的学术思想么?
      你读过写过scheme么?

      对于一个计算机专业的学生,理解究竟什么是程序语言,怎样的程序语言是完备的,程序语言中如何有效推导,是非常有意义的事情。而这些内容,通过函数式语言是最自然不过的 事情了,比如通过scheme,你可以看到你以前从来没有看到过的递归的本质。

      MIT是计算机科学的重镇,Dijkstra认为他的学生不应该满足于学几种模式,然后去找个工作,他们应该是有所突破的一批人。
      MIT是计算机科学的重镇,Dijkstra认为他的学生不应该满足于学几种模式,然后去找个工作,他们应该是有所突破的一批人。

    • tulayang says:

      说出这话,都能证明你有多蠢!

      看看托瓦兹是怎么批评C++和面向对象的,这些人都是做工业设计代码的,是底层操作系统,航天系统,人工智能的代码,岂是你这种java粉所能想象的

  2. 我其实想说两句 says:

    顺便说一句,我平时工作使用的就是Java语言,经过Java可能没有Dijkstra说得这么不堪。但从语言本身上讲,“尽管Haskell不完美,但仍然比Java好几个数量级”,这种说法是站得住脚的,不过大学,不就是要学习语言么?
    类似Java这种东西完全可以去自学,学习门槛太低了。
    当然Java的流行也并非广告人员的功劳,而是在JVM为基础的生态上,进行开发是非常便利和高效的。

    • aa says:

      不要把JAVA和JVM混为一谈 他没说JVM不行,说的是JAVA不行.语言优美和抽象层次和VM无任何关系.使用py和ruby的愤恨JAVA,并没有拒绝Jruby和Jython.
      使用JVM的新兴语言是大趋势,JAVA不会.

  3. dohkoos says:

    用过Ruby后就真的真的不想用什么狗屎Java了。不过在工业领域,Ruby真的差了Java几个量级,Twitter为啥要切到Java。

  4. 看了评论表示无语才来发言 says:

    评论是越来越没思想了,看见大师就各种捧,还得硬说自己和大师一个想法,好像和大师一个思想才是真理?不一样的都是学习不够透彻?

    从历史来说,大师那言论是2001年的事情了,2014还来还来争论什么呢?十几年了,历史已经证明,查查两种语言的发展自然会有结论,虽然java也落后的开始学习C#了,但是C#也确实从java这里为原型的,同样的还有一系列编程语言。编程语言搜索次数也是java多过Haskell。何况大师2002年就去世了,再算算年龄,都70多了,习惯结构设计本来就不习惯面向对象,就像习惯C系编程语言去看object-C的感觉。。又是老人家了,还得没事和癌症抗争。。还能继续为了程序而努力已经很不错了。

    从背景来说,大师的简介,Dijkstra被西方学术界称为“结构程序设计之父”和“先知先觉”(Oracle)。。不用解释,大师明显在疼爱自家孩子。
    再看看语言历史和背景,Haskell是1990年在Miranda的基础上发展出来的。java是1995年才问世,从发展时间差来举个夸张的例子,多少人觉得用go来替代php会更好呢?

    最搞笑的是”好几个数量级”,能科普下,有什么组织设定了这个数量级?用什么标准来定义编程语言的数量级?有多少级??有等级排行表嘛?

    个人一直认为编程语言是工具,是一种需要各种辅助工具的工具。。程序员就是要学会这些工具的特性和缺陷然后合理利用它们去服务更多使用者的工人。就像屠龙宝刀随好,但是我的顾客只是需要能剪指甲,掏耳朵这样类似瑞士军刀的工具。

    • 说说 says:

      这就叫妄自菲薄,愚昧,就是java之父和他辩论,也得跪着,你和java之父差多少个数量级,对大师得失的评论,自有历史见证,恐怕轮不到你这粒外太空的灰尘对大师的评论评头论足吧。
      世界就是树立权威,打到权威的过程,怎么打到权威,岂能轮到了你这种小瘪三

    • tulayang says:

      java作者在他眼里真的微不足道

    • blindingdark says:

      “Haskell 明显在疼爱自家孩子。”
      然而任何语言都需要结构化,而且 Haskell 算是纯函数式编程语言。
      不知道你怎么得出的“疼爱自家孩子”的结论。

  5. TimePower says:

    java那一大堆闲的蛋疼的框架~已经脱离了程序语言的本质~~~

  6. weakish says:

    > 它更容易当成数学对象来使用

    教学对象

发表评论

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