sobre "Na crueldade de realmente ensinar ciência da computação"

33

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.

Matthew Towers
fonte
2
Tenho certeza de que o Dijkstra está criticando um estilo particular de como a matemática foi ensinada (uma que constrói tudo, no estilo Bourbaki, a partir de axiomas) e que isso é pretendido como sátira . No entanto, não tenho evidências para sustentar isso (daí o comentário, em vez de responder).
lol "cuidamos para que a linguagem de programação em questão não tenha sido implementada no campus, para que os alunos sejam protegidos da tentação de testar seus programas". parece que ele está se referindo a uma classe que ele próprio ensinou / conceituou? me lembra de "ensino CS sem computadores"
vzn
4
@LoopSpace Eu não acho que Dijkstra seja famoso por opiniões fortes, e ele estava definitivamente no lado matemático do CS.
Raphael
1
Você verificou os cursos que ele próprio deu? Uma referência inespecífica como essa provavelmente aponta para sua própria experiência.
Raphael
4
aparentemente não é sátira. Dijkstra foi um defensor / defensor em geral das idéias especificamente citadas aqui. btw duplicado
vzn

Respostas:

18

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.

reinierpost
fonte
Ótima resposta, eu quase perdi a esperança para esta pergunta, mas parece que você conseguiu. Alguma idéia de onde eu possa encontrar mais sobre o curso de CS dos TU Eindhoven dos anos 80 a que você está se referindo?
Matthew Towers
Não tenho certeza. Também não tenho certeza de que minha resposta seja a melhor - eu não estava lá na época.
Reinierpost
1
Possuo uma cópia do programa Programmeren 1 en 2 , de agosto de 1982, xerox da letra de Dijkstra. A biblioteca da TU Eindhoven tem uma digitalização online. Em 1984, Dijkstra e Feijen desenvolveram isso em um livro, publicado em inglês em 1988: Um método de programação .
Reinierpost
Você tem um link para a versão online, @reinierpost?
Adriann
2

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.

Yves Daoust
fonte
Esta literatura discute o conteúdo de um curso como o sugerido por Dijkstra? Nesse caso, forneça um resumo / introdução à fonte que você fornece. Caso contrário, você tem certeza de que isso responde à pergunta?
Lagarto discreto
@ Discretelizard: é o curso.
Yves Daoust