Дейкстра в своем эссе « О жестокости реального обучения информатике» предлагает следующее предложение для вводного курса по программированию:
С одной стороны, мы учим тому, что похоже на исчисление предикатов, но делаем это совсем не так, как философы. Чтобы обучить начинающего программиста манипулированию неинтерпретируемыми формулами, мы учим его больше как булевой алгебре, знакомя студента со всеми алгебраическими свойствами логических связок. Чтобы еще больше разорвать связи с интуицией, мы переименовываем значения {true, false} логического домена в {black, white}.
С другой стороны, мы учим простой, чистый, императивный язык программирования, с пропуском и множественным назначением в качестве базовых операторов, со структурой блоков для локальных переменных, точкой с запятой в качестве оператора для композиции операторов, хорошей альтернативной конструкцией, хорошей повторение и, если необходимо, вызов процедуры. К этому мы добавляем минимум типов данных, скажем, логические, целые числа, символы и строки. Существенным является то, что для того, что мы вводим, соответствующая семантика определяется соответствующими правилами доказательства.
С самого начала и на протяжении всего курса мы подчеркиваем, что задача программиста состоит не только в том, чтобы записать программу, но и в том, что его основная задача состоит в том, чтобы дать формальное доказательство того, что предлагаемая им программа соответствует в равной степени формальной функциональной спецификации. При разработке доказательств и программ рука об руку студент получает широкие возможности для совершенствования своей маневренности с помощью исчисления предикатов. Наконец, чтобы донести до нас мысль о том, что этот вводный курс по программированию является в первую очередь курсом по формальной математике, мы проследим за тем, чтобы данный язык программирования не был реализован в кампусе, так что студенты защищены от соблазна проверить свои программы ,
Он подчеркивает, что это серьезное предложение, и излагает различные возможные возражения, в том числе то, что его идея «совершенно нереальна» и «слишком сложна».
Но этот змей тоже не взлетит, поскольку постулат оказался неверным: с начала 80-х годов такой вводный курс по программированию успешно читается сотнями первокурсников колледжа каждый год. [Поскольку, по моему опыту, одного этого слова недостаточно, предыдущее предложение следует повторить еще как минимум два раза.]
На какой курс ссылается Дейкстра, и есть ли другая литература, в которой он обсуждается?
Эссе появилось в 1988 году, когда Дейкстра учился в Техасском университете в Остине, что, вероятно, является подсказкой - они хранят архив Дейкстры, но он огромен, и мне особенно интересно услышать от других об этом курсе.
Я не хочу обсуждать, является ли идея Дейкстры хорошей или реалистичной здесь. Я подумал о том, чтобы опубликовать это на cstheory.se или cs.se, но остановился на этом, потому что: а) в сообществе педагогов, скорее всего, найдется кто-то, кто может легко ответить, и б) сам Дейкстра подчеркивает, что его курс "в первую очередь является курсом в формальная математика. " Не стесняйтесь помечать для миграции, если вы не согласны.