Los principios fundamentales de la “ciencia” informática
Hoy he leído un artículo muy interesante de Peter J. Denning en la revista de socios de la ACM (ACM Communications): Is Computer Science Science? (¿es ciencia la informática?). Según el autor, la informática sí es ciencia, y lo argumenta muy bien. Pero lo que más me llamó la atención fue una pequeña tabla.
Una de las preguntas que responde es si la informática tiene suficiente “profundidad”. Es decir, si tienes principios básicos que no son obvios para aquellos que no entienden la “ciencia”. Y el autor los resume en una tabla de áreas y los problemas que resuelve que no son obvios para los amateurs:
Computación
- Acumulación no acotada de error en máquinas finitas.
- No computabilidad de algunos problemas importantes.
- Intratabilidad de miles de problemas comunes.
- Algoritmos óptimos para algunos problemas comunes.
- Compiladores de “calidad de producción”.
Comunicaciones
- Compresión de ficheros sin pérdida.
- Compresión con pérdidas pero de alta calidad de audio y vídeo,
- Códigos de corrección de errores para canales con ruidos elevados o por ráfagas.
- Intercambio seguro de claves en redes abiertas.
Interacción
- Problemas de arbitraje.
- Problemas temporales de errores de programación (race-conditions).
- Problema del abrazo mortal o interbloqueo.
- Algoritmos eficientes para predicción de rendimiento y tiempos de respuesta.
- Protocolos de Internet.
- Protocolos de autenticación criptográfica.
Recolección (recollection)
- Localidad.
- Thrashing.
- Búsqueda.
- Proyección de dos niveles para acceso a objetos compartidos.
Automatismo
- Simulación de tareas cognitivas con concentración.
- Límites de los sistemas expertos.
- Pruebas de Turing Inverso.
Diseño
- Objetos y encapsulación de información.
- Niveles/capas
- Predicción de rendimientos y tiempos de respuesta de redes de servidores.
Lo que está subrayado son los temas que toco más o menos en profundidad en mis asignaturas de sistemas operativos. Curioso –aunque lógicas– las áreas que toca, interacción –hay muchas, entre los “hilos” del núcleo y soporte de multiprogramación– y recolección –básicamente mantenimiento eficiente de estructuras de datos complejas–.
Me pregunto a cuantos informáticos “iniciados” esos problemas les parecen “obvios”. Estoy seguro que no todos mis ex-alumnos dominan esos que están subrayados
:-P
PS: acabo de acordarme que cuando lo visitamos en Porto Alegre, Marcelo Tosatti me comentó que se apuntaba a estudiar ingeniería informática en la universidad porque no comprendía en profundidad muchos de esos problemas.