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.