7

我正在阅读Coders at Work

我在 Donald Knuth 的采访中看到了这一段。

Seibel:似乎很多与我交谈过的人在刚开始时都可以直接使用机器。然而Dijkstra 有一篇我相信你很熟悉的论文,他基本上说我们不应该让计算机科学专业的学生在最初几年的培训中接触机器。他们应该把所有的时间都花在操纵符号上。

我想要那篇论文的链接。那是哪一张纸?(他写的太多了:-)

4

2 回答 2

7

也许这个

摘录,从接近尾声:

在我们分开之前,我想邀请您在介绍性编程课程中考虑以下方法来公正地对待计算的激进新颖性。

一方面,我们教的是谓词演算,但我们的做法与哲学家大不相同。为了训练新手程序员操作未解释的公式,我们将其更多地作为布尔代数来教,让学生熟悉逻辑连接词的所有代数性质。为了进一步切断与直觉的联系,我们将布尔域的值 {true, false} 重命名为 {black, white}。

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

从一开始,一直到整个课程,我们都强调程序员的任务不仅仅是写一个程序,而是他的主要任务是给出一个正式的证明,证明他提出的程序符合同样正式的功能规范。在携手设计证明和程序的同时,学生有充足的机会通过谓词演算来完善他的操作敏捷性。最后,为了让人们明白这个介绍性编程课程主要是一门形式数学课程的信息,我们确保所讨论的编程语言尚未在校园内实施,以保护学生免受测试他们程序的诱惑. 至此,我为新生开设的入门编程课程的建议草图到此结束。

于 2010-08-09T06:17:04.230 回答
5

我找到了Dijkstra 的“残酷”讲座的手稿

于 2011-02-11T17:39:21.857 回答