17 julio, 2009

Un plan de estudios para la web

He traducido este interesante artículo de Tim Bray ( Web Curriculum ) sobre un plan de estudios basado enteramente en tecnologías web.

Propongo que el World Wide Web sirva también como esquema para estructurar gran parte del currículo académico de informática. Un estudio de la teoría y la práctica de las tecnologías web alcanzaría muchas áreas clave de nuestra disciplina. Es más, hay una forma natural de estructurar ese conocimiento para crear un curso de estudios que cubra varios semestres.

(Un efecto colateral de tal propuesta es que los graduados entrarían en la población activa con una exposición significativa al conjunto de tecnologías que probablemente sería muy valiosa para sus carreras profesionales. Pero ese no es el argumento que estoy defendiendo aquí).

En la siguiente distribución, la numeración de los cursos implica una primera estimación de los niveles y prerequisitos. Ya que nunca he diseñado un currículo y mis propios estudios universitarios han quedado ya décadas atrás, es bastante posible que mis sugerencias respecto al número de cursos y los niveles por semestre necesiten mejorar.

Web 101: Introducción a la arquitectura. Idea-núcleo: Enseñar lo que pasa cuando haces click en un enlace y una página con multimedia y personalizaciones es generada para el usuario.

  • Cobertura: Qué es un navegador y un servidor. Qué son HTML, CSS, HTTP y URIs. Qué son servidores CGI y de aplicacion. Un vistazo inicial a la arquitectura subyacente.
  • Ejercicios de ejemplo: Desplegar un servidor web. Escribir páginas simples HTML/CSS con un editor de textos. Escribir scripts CGI en un lenguaje de alto nivel para producir páginas personalizadas.
Web 210/310/410: Estructuras de datos y algoritmos. Idea-núcleo: El centro clásico del currículo de informática.
  • Cobertura: Todas las cosas habituales. La dimension web viene del uso de la implementación del modelo de objetos de documento (DOM) como ayuda para la docencia.
  • Ejercicios de ejemplo: Construir incrementalmente una implementación del DOM, probablemente en un lenguaje de bajo nivel como C o Java. Una amplia variedad de estructuras de datos y algoritmos importantes puede ser bien usada en dicha implementación.
Web 220: Principios de redes. Idea-núcleo: Visión clásica de lo básico de las redes.
  • Cobertura: Este es un curso directo de redes de ordenadores, haciendo un recorrido convencional de la pila.
  • Ejercicios de ejemplo: La implementación de un pequeño servidor web ligero que acepte conexiones y sirva peticiones de archivos desde su sistema de archivos.
Web 230: Interfícies de usuario. Idea-núcleo: Inspección de temas de UI, pero suponiendo al navegador como plataforma de entrega, para poner el foco en el contenido y no en la tecnología.
  • Cobertura: Principios de usabilidad, diseño de la experiencia de usuario, breve introducción a la tipografía y a problemas de diseño, técnicas de evaluación. En el lado de la implementación, MVC (modelo-vista-controlador).
  • Ejercicios de ejemplo: Construir (en grupos) una interfície web de usuario para un sistema que mantenga las puntuaciones de algún deporte, evaluar su usabilidad y mejorarla.
Web 320: Protocolos de aplicación. Idea-núcleo: las aplicaciones distribuidas están basadas en varios sabores del patrón de intercambio de mensajes. Este sería un recorrido de las opciones.
  • Cobertura: Protocolos de flujo (streaming), protocolos orientados a sesión, protocolos de intercambio de mensajes al estilo HTTP.
  • Ejercicios de ejemplo: implementar porciones seleccionadas de WebDAV, XMPP y AtomPub.
Web 340/440: Persistencia. Idea-núcleo: Estudiar los problemas que rodean el almacenamiento persistente de datos.
  • Cobertura: Sistemas de archivos. Almacenamiento orientado al registro y al byte. Bases de datos relacionales. Bases de datos documentales y tablas de hash distribuidas.
  • Ejercicios de ejemplo: Construir algunas de las piezas de una aplicación como Twitter o Facebook, implementando almacenamiento eficiente y recuperación de diferentes tipos de recursos de información.
Web 350: Parsing - Análisis sintáctico. Idea-núcleo: estudiar métodos para extraer estructuras de entradas de texto.
  • Cobertura: Lo usual, incluyendo gramáticas, autómatas, y otras estrategias de parseo. Representación textual, especialmente Unicode.
  • Ejercicios de ejemplo: Construir parseadores para cabeceras HTTP, para JSON, para XML y para ECMAScript(JavaScript) por ese orden.
Web 351: Diseño de formatos de datos. Idea-núcleo: Estudiar las técnicas y compromisos que aparecen en el diseño de formatos de datos.
  • Cobertura: formatos de datos multimedia (JPG, PNG, vídeo), formatos de datos binarios (ASN.1, buffers de protocolo), formatos de datos textuales (JSON, XML). Compresión.
  • Ejercicios de ejemplo: implementar un lector de PNG, diseñar (en grupo) un lenguaje XML no trivial.
Web 360: Seguridad. Idea-núcleo: estudiar técnicas para implementar programas de ordenador suponiendo la presencia de un gran número de usuarios maliciosos con conocimientos técnicos.
  • Cobertura: introducción a las firmas digitales y tecnologías de encriptación. Análisis de amenazas. Ingeniería social. Virus, gusanos, botnets, y otros villanos.
  • Ejercicios de ejemplo: implementar un ataque de fuerza bruta sobre una tecnología de encriptación obsoleta. Escribir una recomendación sobre cómo algunos exploits criminales con éxito y bien conocidos podrían haber sido evitados.
Web 470: Temas de grandes sistemas distribuidos. Idea-núcleo: estudiar los problemas que aparecen en sistemas demasiado grandes para un solo ordenador.
  • Cobertura: REST, nombrado de objetos (DNS, URIs y otros esquemas de nombrado). Caché. Particionado de cargas de trabajo. Rastreo (crawling) de webs. Programación funcional. Gestión de errores.
  • Ejercicios de ejemplo: Implementar algo que use DNS. Aprender ideas detrás de Erlang y Map/Reduce. Escribir un rastreador (crawler) de web de pequeña escala.
Web 480: Sistemas concurrentes. Idea núcleo: estudiar las opciones para hacer uso de modernas plataformas altamente concurrentes de ordenadores.
  • Cobertura: hilos, procesos, actores, paso de mensajes.
  • Ejercicios de ejemplo: Implementar la infraestructura de paso de mensajes en un lenguaje de "sabor funcional" (Scala, Erlang) y en uno convencional procedimental (Java, Ruby).
¿Qué falta? El currículo web no cubre toda la informática. Aquí hay una lista (sin duda no exhaustiva) sin ningún orden en particular, de temas importantes donde un enfoque académico centrado en web obviamente no sería de ayuda:

  • Gráficos de ordenador.
  • Orientación a objetos.
  • Software en tiempo real.
  • Aritmética y representación numérica.
  • Inteligencia artifical.
  • Arquitectura de sistemas de ordenadores.
  • Análisis de algoritmos.

2 comentarios:

Usher web dijo...

Me ha parecido excelente la idea!!! :))
De todas formas yo añadiría lo siguiente:

-web 101: cuando hablamos de CGI de alto nivel, me centraría en PHP, que es un estandar de facto y una herramienta opensource y gratuita para cualquiera y multiplataforma!

-web 470 (o tal vez añadido como una unidad independiente): comunicación entre aplicaciones web, es decir webservices principalmente. Creo que es algo que cada día está teniendo más importancia y es más necesario. Y si no he leído mal... te los has dejado "fuera" de tu plan de estudios ;)

Un saludo!
SERGI

Àl dijo...

Ciertamente. Yo también echo en falta ciertas carencias, pero recuerda que estaba traduciendo.

Respecto a los estándares de comunicación web (web services) creo que estarían cubiertos entre la 320 y la 470 (énfasis en REST que es la forma natural de usar la web para la comunicación). Incluso ampliaría a webhooks entre otros mecanismos.

También hecho en falta en el módulo Web 210/310/410 la palabra JavaScript, el lenguaje de la web.

Pero como indica el autor, es un "boceto" de por dónde diseñaría él un plan de este tipo. Ahora a esperar que llegue a responsables de las universidades. Si no he entendido mal con todo el lío de Bolonia, las universidades podrán ofrecer sus propios planes.

Publicar un comentario en la entrada

Últimos links en indiza.com