关于“论真正教计算机科学的残酷”


33

迪克斯特拉(Dijkstra)在他的论文《关于真正教授计算科学的残酷性》中,提出了有关编程入门课程的以下建议:

一方面,我们教看起来像谓词演算的事物,但与哲学家却截然不同。为了训练新手程序员如何使用未解释的公式,我们将其更多地讲授布尔代数,使学生熟悉逻辑连接词的所有代数性质。为了进一步切断与直觉的联系,我们将布尔域的值{true,false}重命名为{black,white}。

另一方面,我们讲授一种简单,干净,命令式的编程语言,以跳过和多重赋值作为基本语句,具有局部变量的块结构,以分号作为语句组合的运算符,一种不错的替代构造,一种不错的方法。重复,以及(如果需要)过程调用。为此,我们添加了最少的数据类型,例如布尔值,整数,字符和字符串。至关重要的是,无论我们引入什么内容,相应的语义都是由附带的证明规则定义的。

从一开始,贯穿整个过程,我们强调程序员的任务不仅是编写程序,而且他的主要任务是提供形式证明,证明他提出的程序符合同样正式的功能规范。在设计证明和程序的同时,学生有充分的机会利用谓词演算来完善自己的操作敏捷性。最后,为了向人们传达这种入门编程课程主要是形式数学课程的信息,我们发现有问题的编程语言尚未在校园内实施,因此可以保护学生免受测试其程序的诱惑。

他强调这是一个认真的建议,并概述了各种可能的反对意见,包括他的想法“完全不现实”和“太难了”。

但事实证明,那只风筝不会放飞,因为事实证明是错误的:自80年代初以来,每年都有数百位大学新生成功地参加了这样的入门编程课程。[因为根据我的经验,说这一次是不够的,所以前一句话至少应再重复两次。]

Dijkstra指的是哪门课程,并且还有其他文献可以讨论吗?

这篇论文发表于1988年,当时Dijkstra在德克萨斯大学奥斯汀分校的时候,这可能是一个线索-他们托管Dijkstra档案,但馆藏很大,我特别想听听其他人对这门课程的兴趣。

我不想在这里讨论Dijkstra的想法是好的还是现实的。我考虑过将此内容发布在cstheory.se或cs.se上,但因为在这里定居下来,是因为a)一个教育工作者社区可能更容易有人可以轻松回答,并且b)Dijkstra本人强调他的课程“主要是形式数学。” 如果您不同意,请随时举报迁移。


2
我敢肯定,迪克斯特拉(Dijkstra)正在批评一种特殊的数学教学方式(一种从公理中构建出Bourbaki风格的东西),这是讽刺性的。但是,我没有证据支持这一点(因此请评论而不是回答)。

大声笑“我们发现有问题的编程语言尚未在校园内实施,因此可以保护学生免受测试程序的诱惑。” 似乎他指的是他本人所教/概念化的课程?让我想起“没有计算机的CS教学”
vzn

4
@LoopSpace我不认为Dijkstra以强大的见解而臭名昭著,而且他绝对是CS的数学方面。
拉斐尔

1
您是否检查过他本人开设的课程?诸如此类的非特定引用可能表明了他的经验。
拉斐尔

4
这显然不是讽刺。迪克斯特拉(Dijkstra)总体上是这里专门引用的思想的拥护者/倡导者。btw 重复
vzn

Answers:


18

这几乎就是Dijkstra及其同事设计和实施的TU Eindhoven的计算机科学教育的样子,从1980年代开始到直到1990年代中期Dijkstra的影响力开始减弱。

我从1982年开始在奈梅亨大学学习CS;一位同学在埃因霍温理工大学也做了同样的事情。每年春天,我们的旧中学都会有一天,以前的学生向当前的学生介绍他们选择的学习领域,我们俩都在那里介绍CS,因此我们比较了自己的经历。他们有很大的不同。在奈梅亨,我们获得了使用实际编程语言的实际经验,并在实际计算机(准确地说是VM / CMS虚拟机)上运行分配程序。在埃因霍温,情况并非如此。我的前同学告诉我,第一年他们不允许触摸电脑。在艾恩德霍芬(Eindhoven),编程意味着要学会从数学上定义的问题定义中以数学方式构建可证明正确的算法。在纸上。

迪克斯特拉离开后,这种态度有所放松,但即使在1990年代初,编号为1到9,跨越数年的名为Programmeren(编程)的课程仍然包括相同的活动,尤其是其中一个主要障碍是学生们。我从来没有参加过这些课程,但是我怀疑是否涉及计算机的使用。

如果您想知道,今天埃因霍温TU的计算机科学教育大为不同。


很好的答案,我几乎对这个问题失去了希望,但听起来您已经明白了。您知道我在哪里可以找到有关TU Eindhoven 80s CS课程的更多信息吗?
马修塔楼

不确定。我也不确定我的答案是否是最好的-当时我不在那儿。
reinierpost

1
我拥有1982年8月发行的Programmeren 1 en 2教学大纲的副本,该大纲摘自Dijkstra的笔迹。埃因霍温大学图书馆在线进行扫描。1984年,Dijkstra和Feijen将此书发展成一本书,并于1988年以英文发行:《一种编程方法》
reinierpost

您是否有指向在线版本@reinierpost的链接?
adrianN


2

看看“ Edsger W. Dijkstra的编程方法,WHJ Feijen,Joke Sterringa”。它包含引文中提到的材料。令人愉快的阅读。


这本文献是否在讨论课程的内容,例如Dijkstra所建议的课程?如果是这样,请提供您提供的来源的摘要/介绍。如果不是,您确定这可以回答问题吗?
离散蜥蜴

@Discretelizard:这是课程。
伊夫·戴乌斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.