sobre "Sobre la crueldad de enseñar realmente ciencias de la computación"


33

Dijkstra, en su ensayo Sobre la crueldad de enseñar realmente ciencias de la computación , hace la siguiente propuesta para un curso introductorio de programación:

Por un lado, enseñamos lo que parece el cálculo predicado, pero lo hacemos de manera muy diferente a los filósofos. Para entrenar al programador novato en la manipulación de fórmulas no interpretadas, lo enseñamos más como álgebra booleana, familiarizando al estudiante con todas las propiedades algebraicas de los conectivos lógicos. Para cortar aún más los enlaces a la intuición, cambiamos el nombre de los valores {verdadero, falso} del dominio booleano como {negro, blanco}.

Por otro lado, enseñamos un lenguaje de programación simple, limpio e imperativo, con un salto y una asignación múltiple como declaraciones básicas, con una estructura de bloques para variables locales, el punto y coma como operador para la composición de declaraciones, una construcción alternativa agradable, una buena repetición y, si así lo desea, una llamada al procedimiento. A esto agregamos un mínimo de tipos de datos, digamos booleanos, enteros, caracteres y cadenas. Lo esencial es que, para lo que sea que presentemos, la semántica correspondiente está definida por las reglas de prueba que la acompañan.

Desde el principio, y durante todo el curso, enfatizamos que la tarea del programador no es solo escribir un programa, sino que su tarea principal es proporcionar una prueba formal de que el programa que propone cumple con la especificación funcional igualmente formal. Mientras diseña pruebas y programas de la mano, el estudiante tiene amplias oportunidades para perfeccionar su agilidad manipuladora con el cálculo predicado. Finalmente, para llevar a casa el mensaje de que este curso introductorio de programación es principalmente un curso de matemática formal, nos aseguramos de que el lenguaje de programación en cuestión no se haya implementado en el campus para que los estudiantes estén protegidos de la tentación de probar sus programas. .

Él enfatiza que esta es una propuesta seria y describe varias posibles objeciones, incluyendo que su idea es "completamente irreal" y "demasiado difícil".

Pero esa cometa tampoco volará para el postulado se ha demostrado que está equivocado: desde principios de los años 80, este curso introductorio de programación se ha impartido con éxito a cientos de estudiantes universitarios de primer año cada año. [Porque, en mi experiencia, decir esto una vez no es suficiente, la oración anterior debe repetirse al menos otras dos veces].

¿A qué curso se refiere Dijkstra, y hay alguna otra literatura disponible que lo discuta?

El ensayo apareció en 1988 cuando Dijkstra estaba en la Universidad de Texas en Austin, lo cual es probablemente una pista: albergan el archivo Dijkstra pero es enorme, y estoy particularmente interesado en escuchar a otros sobre este curso.

No quiero discutir si la idea de Dijkstra es buena o realista aquí. Pensé en publicar esto en cstheory.se o cs.se, pero me decidí aquí porque a) una comunidad de educadores podría tener más probabilidades de tener a alguien que pueda responder fácilmente, yb) el propio Dijkstra enfatiza que su curso es "principalmente un curso en matemática formal ". Siéntete libre de marcar la migración si no estás de acuerdo.


2
Estoy bastante seguro de que Dijkstra está criticando un estilo particular de cómo se han enseñado las matemáticas (uno que construye todo, al estilo Bourbaki, a partir de axiomas) y que esto pretende ser una sátira . Sin embargo, no tengo evidencia que lo respalde (de ahí el comentario en lugar de responder).

jajaja "nos aseguramos de que el lenguaje de programación en cuestión no se haya implementado en el campus para que los estudiantes estén protegidos de la tentación de probar sus programas". parece que se refiere a una clase que él mismo enseñó / conceptualizó? me recuerda a "enseñar CS sin computadoras"
vzn

44
@LoopSpace No lo creo, así que Dijkstra es conocido por sus fuertes opiniones, y definitivamente estaba en el lado de las matemáticas de CS.
Raphael

1
¿Has revisado los cursos que él mismo ha impartido? Una referencia inespecífica como esa probablemente apunta a su propia experiencia.
Raphael

44
aparentemente no es sátira. Dijkstra fue un defensor / defensor en general de las ideas específicamente citadas aquí. por cierto duplicado
vzn

Respuestas:


18

Esto es más o menos lo que era la educación en Ciencias de la Computación de TU Eindhoven, diseñada e implementada por Dijkstra y sus colegas, desde el momento en que comenzó, alrededor de 1980, hasta que la influencia de Dijkstra comenzó a disminuir, a mediados de la década de 1990.

Comencé a estudiar CS en la Universidad de Nijmegen en 1982; un compañero de clase hizo lo mismo en TU Eindhoven. Cada primavera, nuestra antigua escuela secundaria tendría un día en el que los antiguos alumnos presentarían su campo de estudio elegido a los alumnos actuales, y ambos estábamos allí para presentar CS, por lo que comparamos nuestras experiencias. Eran muy diferentes. En Nijmegen, obtuvimos experiencia real con lenguajes de programación reales, ejecutando nuestros programas de asignación en una computadora real (una máquina virtual VM / CMS, para ser precisos). No es así en Eindhoven. Mi antiguo compañero de clase me dijo que no se les permitía tocar una computadora en el primer año. La programación, en Eindhoven, significaba aprender a construir matemáticamente algoritmos probablemente correctos a partir de definiciones de problemas matemáticamente establecidos. En papel.

Esta actitud fue algo relajada después de que Dijkstra se fue, pero incluso a principios de la década de 1990, los cursos llamados Programmeren (Programación), numerados del 1 al 9, y que abarcaban varios años, todavía consistían en esa misma actividad, y uno en particular presentaba un obstáculo importante para los estudiantes. Nunca tomé ninguno de esos cursos, pero dudo que haya algún uso de computadoras.

En caso de que te lo preguntes: la educación informática actual en TU Eindhoven es muy diferente.


Gran respuesta, casi había perdido la esperanza de esta pregunta, pero parece que la tienes. ¿Alguna idea de dónde podría encontrar más información sobre el curso TU Eindhoven 80s CS al que te refieres?
Matthew Towers el

No es seguro. Tampoco estoy seguro de que mi respuesta sea la mejor, no estaba allí en ese momento.
reinierpost

1
Soy dueño de una copia del programa del programa 1 en 2 , con fecha de agosto de 1982, extraído de la letra de Dijkstra. La biblioteca TU Eindhoven tiene un escaneo en línea. En 1984, Dijkstra y Feijen desarrollaron esto en un libro, publicado en inglés en 1988: Un método de programación .
reinierpost

¿Tiene un enlace a la versión en línea, @reinierpost?
adrianN


2

Echa un vistazo a "Un método de programación por Edsger W. Dijkstra, WHJ Feijen, Broma Sterringa". Contiene el material evocado en las citas. Una lectura encantadora.


¿Es esta literatura la que discute el contenido de un curso como el sugerido por Dijkstra? Si es así, proporcione un resumen / introducción a la fuente que proporciona. Si no, ¿estás seguro de que esto responde la pregunta?
Lagarto discreto

@Discretelizard: es el curso.
Yves Daoust
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.