迪克斯特拉谈哈斯克尔

2020-08-17 02:51:33

我写信给你,是因为有传言说,我们的本科课程的入门编程课程正试图用命令式语言Java取代函数式语言Haskell,而且我认为,在这种情况下,预算委员会必须承担责任,以免在错误的层面上做出决定。

你看,这可不是小事。来自州外的同事(仍然!)。我经常在想,我怎么能在德克萨斯州奥斯汀这样的地方生存下来,自动地认为德克萨斯州坚定的保守主义保证了同样坚定的平庸。我通常的回答是“别担心。CS系是一个相当开明的地方,例如,对于入门编程,我们将我们的新生介绍给Haskell“;他们首先的反应几乎是难以置信,然后是羡慕-通常情况下,他们的本科课程还没有从从Pascal到C++或Java的过渡中恢复过来。

在一年级课程中首选函数式编程的一个非常实际的原因是,大多数学生已经对命令式编程有了一定的熟悉。面对函数式编程的新颖性,他们马上就会明白,编程比他们想象的要多得多。他们很快就会发现,函数式编程优雅地接受了用他们高中时代的编程工具很难(或不可能)制定的解决方案。

偏爱的一个根本原因是,函数式程序比命令式程序更容易被理解为数学对象,这样你就可以教会关于程序的严格推理意味着什么。带有“惰性求值”的函数式编程的另一个优点是,它提供了一种不鼓励操作推理的环境。

最后,在Haskell与Java的具体比较中,Haskell虽然不是完美的,但它的质量比Java高出几个数量级,Java一团糟(需要广泛的广告宣传和积极的销售才能获得商业认可)。总体而言,工业界接受公认的差劲设计作为“事实上”的标准,这已经够糟糕的了。就我个人而言,我认为这所大学应该让更健康的替代品继续存在。

不仅是小提琴塑造了小提琴家,我们都被我们训练自己使用的工具所塑造,在这方面,编程语言有一个不寻常的影响:它们塑造了我们的思维习惯。这种情况使得第一种编程语言的选择变得非常重要。人们愿意将编程入门课程作为一种创造一种文化的手段,这种文化可以作为计算科学课程的基础,而不是被迫从大量遗忘开始(如果这是可能的:我们过去的东西永远是这样)。这个选择隐含着对我们的本科生的重大责任,所以不能随便由某件事的主席来做,而必须由预算委员会来做。这不是公务员或政客可以做的事,这里需要政治家。