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.
fuente
Respuestas:
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.
fuente
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.
fuente