迪克斯特拉(Dijkstra)在他的论文《关于真正教授计算科学的残酷性》中,提出了有关编程入门课程的以下建议:
一方面,我们教看起来像谓词演算的事物,但与哲学家却截然不同。为了训练新手程序员如何使用未解释的公式,我们将其更多地讲授布尔代数,使学生熟悉逻辑连接词的所有代数性质。为了进一步切断与直觉的联系,我们将布尔域的值{true,false}重命名为{black,white}。
另一方面,我们讲授一种简单,干净,命令式的编程语言,以跳过和多重赋值作为基本语句,具有局部变量的块结构,以分号作为语句组合的运算符,一种不错的替代构造,一种不错的方法。重复,以及(如果需要)过程调用。为此,我们添加了最少的数据类型,例如布尔值,整数,字符和字符串。至关重要的是,无论我们引入什么内容,相应的语义都是由附带的证明规则定义的。
从一开始,贯穿整个过程,我们强调程序员的任务不仅是编写程序,而且他的主要任务是提供形式证明,证明他提出的程序符合同样正式的功能规范。在设计证明和程序的同时,学生有充分的机会利用谓词演算来完善自己的操作敏捷性。最后,为了向人们传达这种入门编程课程主要是形式数学课程的信息,我们发现有问题的编程语言尚未在校园内实施,因此可以保护学生免受测试其程序的诱惑。
他强调这是一个认真的建议,并概述了各种可能的反对意见,包括他的想法“完全不现实”和“太难了”。
但事实证明,那只风筝不会放飞,因为事实证明是错误的:自80年代初以来,每年都有数百位大学新生成功地参加了这样的入门编程课程。[因为根据我的经验,说这一次是不够的,所以前一句话至少应再重复两次。]
Dijkstra指的是哪门课程,并且还有其他文献可以讨论吗?
这篇论文发表于1988年,当时Dijkstra在德克萨斯大学奥斯汀分校的时候,这可能是一个线索-他们托管Dijkstra档案,但馆藏很大,我特别想听听其他人对这门课程的兴趣。
我不想在这里讨论Dijkstra的想法是好的还是现实的。我考虑过将此内容发布在cstheory.se或cs.se上,但因为在这里定居下来,是因为a)一个教育工作者社区可能更容易有人可以轻松回答,并且b)Dijkstra本人强调他的课程“主要是形式数学。” 如果您不同意,请随时举报迁移。