Лучшие статьи Дейкстры, чтобы объяснить эту цитату?

Сегодня я наслаждался "Скромный программист" и наткнулся на эту цитату выбора:

Поэтому в настоящее время и, возможно, навсегда, правила второго рода представляют собой элементы дисциплины, требуемые от программиста. Некоторые из правил, которые я имею в виду, настолько ясны, что их можно научить и что никогда не должно быть аргументов в отношении того, нарушает ли данная программа их или нет. Примерами являются требования, при которых ни один цикл не должен записываться без предоставления доказательства для прекращения, и не указывая отношения, инвариантность которых не будет уничтожена выполнением повторяющегося оператора.

Я ищу, какие из книг Dijkstra 1300+ лучше всего описывают в более подробных правилах, таких как он описывал выше.

Ответ 1

Страница 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 на английский:

Как математически программировать

A (четко определенная) программа структурирована точно так же, как (четко определенная) математическая теория. Работа программистов не отличается от работы творческого математика.

Однако существуют небольшие, но важные различия:

  • Существует не так много базовых концепций программирования, и их нетрудно понять (хотя и ошибочно просто); поэтому он идеален для практики развития. (Кроме того, есть факт, что спрос на правильность, программа должна действительно работать!)
  • С большинством математического образования вы узнаете о существующих теоремах, а именно: оснащение ученика конкретным (подробным) набором понятий; программист, однако, должен сам разработать нужную концепцию. Программирование требует абстракций, которые приводят к типу творчества, тогда как то же самое в математике ограничивается применением существующих теорем.
  • Поскольку программы большие и тем не менее должны работать, программисты научатся тщательно и сознательно развиваться. Это именно то, чему надо учить! Учить обширные знания для меня не оправдано.