我今天早些时候很享受"The Humble Programmer"并且遇到了这个选择引用:
因此,就目前而且可能永远而言,第二类规则本身就是程序员所要求的纪律要素。我想到的一些规则是如此清晰,以至于它们可以被教导,并且永远不需要就某一特定程序是否违反它们进行争论。例如,在没有提供终止证据的情况下也不应写下循环的要求,也没有说明执行可重复语句不会破坏其不变性的关系。
我正在寻找Dijkstra的1300多篇着作中哪一篇最能详细描述,如上所述。
答案 0 :(得分:7)
第5页至第18页:http://userweb.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDF
中。第3页到最后:http://userweb.cs.utexas.edu/users/EWD/ewd04xx/EWD473.PDF
结束第5页到结束:http://userweb.cs.utexas.edu/users/EWD/ewd06xx/EWD641.PDF
全部:http://userweb.cs.utexas.edu/users/EWD/transcriptions/EWD02xx/EWD261.html (荷兰语,翻译=以下)
注意:Dijkstra将他的页面编号从0开始。给定的页码从1开始,即PDF页码,而不是书面页码。
我用英语翻译EWD261 :
如何以数学方式编程
(明确定义的)程序的结构就像(明确定义的)数学理论。程序员的工作与创造性数学家的工作没有什么不同。
虽然存在一些但很重要的差异:
- 没有太多基本的编程概念,也不难理解(虽然误导性很简单);这就是为什么它是开发实践的理想选择。 (除此之外,还有一个事实是需要正确性,程序应该真的有效!)
- 在大多数数学教育中,人们学习现有的定理,即。为学生配备一套特定的(详细的)概念;然而,程序员必须自己开发所需的概念。编程需要抽象导致一种创造力,而数学中的相同仅限于应用现有定理。
- 因为程序很大而且必须工作,程序员才会学会如何谨慎而有意识地进行开发。这正是人们应该教的!对我而言,教授广泛的知识是不合理的。
醇>