Dijkstra, em seu ensaio Sobre a crueldade de realmente ensinar ciência da computação , faz a seguinte proposta para um curso introdutório de programação:
Por um lado, ensinamos o que parece ser o cálculo predicado, mas o fazemos de maneira muito diferente dos filósofos. Para treinar o programador iniciante na manipulação de fórmulas não interpretadas, o ensinamos mais como álgebra booleana, familiarizando o aluno com todas as propriedades algébricas dos conectivos lógicos. Para separar ainda mais os links para a intuição, renomeamos os valores {true, false} do domínio booleano como {black, white}.
Por outro lado, ensinamos uma linguagem de programação simples, limpa e imperativa, com um salto e uma atribuição múltipla como instruções básicas, com uma estrutura de blocos para variáveis locais, o ponto-e-vírgula como operador para composição de instruções, uma construção alternativa agradável, uma construção alternativa agradável, repetição e, se desejado, uma chamada de procedimento. Para isso, adicionamos um mínimo de tipos de dados, como booleanos, números inteiros, caracteres e seqüências de caracteres. O essencial é que, para o que for apresentado, a semântica correspondente é definida pelas regras de prova que a acompanham.
Desde o início, e durante todo o curso, enfatizamos que a tarefa do programador não é apenas escrever um programa, mas que sua principal tarefa é fornecer uma prova formal de que o programa que ele propõe atende às especificações funcionais igualmente formais. Ao projetar provas e programas de mãos dadas, o aluno tem ampla oportunidade de aperfeiçoar sua agilidade manipuladora com o cálculo predicado. Finalmente, para levar para casa a mensagem de que este curso introdutório de programação é principalmente um curso de matemática formal, observamos que a linguagem de programação em questão não foi implementada no campus para que os alunos sejam protegidos da tentação de testar seus programas. .
Ele enfatiza que essa é uma proposta séria e descreve várias objeções possíveis, incluindo que sua ideia é "totalmente irrealista" e "muito difícil".
Mas essa pipa também não voa, pois o postulado está errado: desde o início dos anos 80, um curso de programação introdutório foi dado com sucesso a centenas de calouros da faculdade a cada ano. [Porque, na minha experiência, dizer isso uma vez não é suficiente, a frase anterior deve ser repetida pelo menos mais duas vezes.]
A qual curso Dijkstra está se referindo e há alguma outra literatura disponível que discuta isso?
O ensaio apareceu em 1988, quando Dijkstra estava na Universidade do Texas em Austin, o que provavelmente é uma pista - eles hospedam o arquivo Dijkstra, mas é enorme, e estou particularmente interessado em ouvir outras pessoas sobre esse curso.
Não quero discutir se a ideia de Dijkstra é boa ou realista aqui. Eu considerei postar isso em cstheory.se ou cs.se, mas resolvi aqui porque a) uma comunidade de educadores pode ter mais chances de ter alguém que possa responder facilmente eb) o próprio Dijkstra enfatiza que seu curso é "principalmente um curso em matemática formal ". Sinta-se à vontade para sinalizar a migração se não concordar.