关于 Dijkstra 的论文

发布于 2024-09-13 09:53:36 字数 288 浏览 4 评论 0原文

我正在阅读工作中的程序员

我在唐纳德·高德纳 (Donald Knuth) 的采访中看到了这一段。

Seibel:我采访过的很多人在刚开始工作时似乎都可以直接访问机器。然而,Dijkstra 有一篇论文,我相信你很熟悉,他基本上说我们不应该让计算机科学专业的学生在训练的头几年接触机器;他们应该把所有的时间都花在操作符号上。

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

I am reading Coders at Work.

I came across this paragraph in Donald Knuth's interview.

Seibel: It seems a lot of the people I’ve talked to had direct access to a machine when they were starting out. Yet Dijkstra has a paper I’m sure you’re familiar with, where he basically says we shouldn’t let computer-science students touch a machine for the first few years of their training; they should spend all their time manipulating symbols.

I want link to that paper. Which one paper is that? (He wrote too many :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

要走就滚别墨迹 2024-09-20 09:53:36

也许这个

摘录,从接近尾声开始:

在我们分开之前,我想邀请您考虑以下方式,在入门编程课程中充分体现计算的激进新颖性。

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

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

从一开始,在整个课程中,我们都强调程序员的任务不仅仅是写出一个程序,他的主要任务是给出一个形式证明,证明他提出的程序满足同样形式化的功能规格。在同时设计证明和程序时,学生有充足的机会通过谓词演算来完善其操作敏捷性。最后,为了传达这样的信息:这门入门编程课程主要是一门形式数学课程,我们确保相关编程语言尚未在校园内实施,以保护学生免受测试其程序的诱惑。 。我为新生开设入门编程课程的提案就到此结束。

Maybe this one?

Excerpt, from near the end:

Before we part, I would like to invite you to consider the following way of doing justice to computing's radical novelty in an introductory programming course.

On the one hand, we teach what looks like the predicate calculus, but we do it very differently from the philosophers. In order to train the novice programmer in the manipulation of uninterpreted formulae, we teach it more as boolean algebra, familiarizing the student with all algebraic properties of the logical connectives. To further sever the links to intuition, we rename the values {true, false} of the boolean domain as {black, white}.

On the other hand, we teach a simple, clean, imperative programming language, with a skip and a multiple assignment as basic statements, with a block structure for local variables, the semicolon as operator for statement composition, a nice alternative construct, a nice repetition and, if so desired, a procedure call. To this we add a minimum of data types, say booleans, integers, characters and strings. The essential thing is that, for whatever we introduce, the corresponding semantics is defined by the proof rules that go with it.

Right from the beginning, and all through the course, we stress that the programmer's task is not just to write down a program, but that his main task is to give a formal proof that the program he proposes meets the equally formal functional specification. While designing proofs and programs hand in hand, the student gets ample opportunity to perfect his manipulative agility with the predicate calculus. Finally, in order to drive home the message that this introductory programming course is primarily a course in formal mathematics, we see to it that the programming language in question has not been implemented on campus so that students are protected from the temptation to test their programs. And this concludes the sketch of my proposal for an introductory programming course for freshmen.

后来的我们 2024-09-20 09:53:36

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

I found a manuscript of Dijkstra's "Cruelty" lecture.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文