A debate on teaching computing science • Basado en “On the cruelty of really teaching computing science” (Dijkstra, 1989) • Panelistas: Dijkstra, Parnas, et al. • Contexto • Dijkstra: • • “GOTO statement considered harmful” (1968) Verificación formal y derivación automática • Crisis del software (1965-1985) • The mythical man-month (Brooks, 1975) • No silver bullet (Brooks, 1987) Novedades Radicales Tratamos de unir lo nuevo con lo familiar mediante analogías Funciona sólo para cambios graduales, en presencia de cambios "radicales" las analogías se tornan artificiales. No estamos preparados para estas novedades, suelen ser negadas o ignoradas. Las computadoras como novedad radical El poder de cómputo inimaginable El primer dispositivo digital a gran escala. Esfuerzos para negar la novedad Ingeniería de Software, "Cómo programar si no puede" Consecuencias Científicas La computadora manipula símbolos y produce resultados. Los programas convierten a las computadoras de propósito general en especializadas sin la necesidad de tocar un solo cable. La ciencia de la computación tiene que ver con la manipulación mecanizada y humana de símbolos. Alternativa al razonamiento humano. Consecuencias (Cont.) Educativas Difícilmente influenciada por la ciencia y mucho por factores externos. Las universidades no profundizan en las ciencias duras. No referirse a partes de los programas como si fueran personas. Razonar sobre el programa escrito. La ejecución provee sólo un modelo que cumple con el programa. El “razonamiento operacional” es un "tremendo desperdicio de esfuerzo mental" Consejos para enseñar Las contestaciones... Parnas: Ingeniería de software: una interpretación distinta Testing: two thumbs up! Matemática + testing Otros: “Tamaño demanda técnicas” “No tomar nada puro” Difícil de expresar Software maintenance Más paradigmas La cháchara en la matemática Interpretación y conclusiones Fundamentalista, críticas poco constructivas Personajes importantes y debate, pero todos coinciden en mayor o menor medida con las críticas de Dijkstra Ciencias de la Computación Manipulación de símbolos (humanos y máquina) "Aplicación de lógica a gran escala" Programas son fórmulas, programar es derivar la fórmula o programa Interpretación y conclusiones (Cont.) Enseñar CS? Enseñar ciencias duras, métodos formales No ataca el problema de conseguir una especificación formal: Sí reconoce su existencia ¿Incluye este problema como parte de CS? ¿Ingeniería de Software en CS? Un debate que continua aún hoy Su expectativa a largo plazo es proveer un cálculo simbólico que sirva como alternativa al razonamiento humano. Futurología, difícil de opinar.