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.
fonte
Respostas:
Isso é basicamente o que era a educação em Ciência da Computação da TU Eindhoven, projetada e implementada por Dijkstra e colegas, desde o início, por volta de 1980, até a influência de Dijkstra começar a diminuir, em algum momento da década de 1990.
Comecei a estudar CS na Universidade de Nijmegen em 1982; um colega de classe fez o mesmo em TU Eindhoven. Toda primavera, nossa antiga escola secundária tinha um dia em que ex-alunos apresentavam o campo de estudo escolhido aos alunos atuais, e nós dois estávamos lá para apresentar o CS, então comparamos nossas experiências. Eles eram muito diferentes. Em Nijmegen, obtivemos experiência real com linguagens de programação reais, executando nossos programas de atribuição em um computador real (uma máquina virtual VM / CMS, para ser mais preciso). Não é assim em Eindhoven. Meu ex-colega me disse que não era permitido tocar em um computador no primeiro ano. Programar, em Eindhoven, significava aprender a construir matematicamente algoritmos comprovadamente corretos a partir de definições de problemas matematicamente declarados. No papel.
Essa atitude ficou um pouco mais relaxada depois que Dijkstra foi embora, mas mesmo no início dos anos 90, os cursos chamados Programmeren (Programação), numerados de 1 a 9, e abrangendo vários anos, ainda consistiam na mesma atividade, e um em particular apresentava um grande obstáculo para os estudantes. Eu nunca participei de nenhum desses cursos, mas duvido que qualquer uso de computadores esteja envolvido.
Caso você esteja se perguntando: a educação em ciência da computação atual na TU Eindhoven é muito diferente.
fonte
Dê uma olhada em "Um método de programação de Edsger W. Dijkstra, WHJ Feijen, Joke Sterringa". Ele contém o material evocado nas citações. Uma leitura deliciosa.
fonte