jueves, noviembre 29, 2007

¿Pero no es reflexión?

El Viernes pasado terminamos la asignatura más interesante del Máster por ahora (y salvo sorpresas de última hora, por siempre): Máquinas Virtuales y Reflectividad.

La asignatura fue "Máquinas Virtuales y Reflectividad", organizada por Francisco Ortín e impartida por Raúl Izquierdo Castañedo, Lourdes Tajes Martínez, José Manuel Redondo, Luis Vinuesa y la aparición estelar de Miguel Katrib Mora.

Un buen reparto para la primera asignatura en que se nos separaba realmente a aquellos que habíamos elegido la modalidad investigadora de la modalidad profesional. Así pues, pese a que "Nuevos Avances en Web Semántica" ya dio unas pinceladas de investigación (y donde recibí algunas de las mejores clase del primer año), esta asignatura se presentaba como la apuesta más fuerte de este segundo año.

El primer día Ortín nos dio la primera clase oficial de Investigación, en la que nos explicó los elementos que entran en juego a la hora de realizar una comunicación (véase artículo, tesis, lección...). Una lección que puede parecer tonta y superflua, pero nada mas lejos de la verdad.

Cosas como que tan importante es comunicar algo como motivar porque lo comunicas (o lo investigaste), aprender a delegar responsabilidades acerca de las afirmaciones que realizas (digo X porque Y lo dijo en Z) o responsabilizarte de ellas explicando porqué puedes hacerlas (casi suena como verdadera Ciencia) pueden parecer de perogrullo y en pasadas presentaciones lo hacía con mayor o menor éxito. Sin embargo ahora lo hago (o lo intento) de un modo consciente, no por casualidad.

Fue solo una clase, no puede sustituir a años de una Educación que te enseña a repetir, no a innovar, pero es un buen (muy buen) paso.

Además, en esta clase, se nos presentó el trabajo "gordo" de la asignatura, documentarnos sobre un tema asignado por sorteo y preparar una presentación asumiendo el rol de los creadores de dicho tema (normalmente tecnologías).

Tras ello llegó Raúl para enseñarnos el modo de funcionamiento de los Procesadores de Lenguaje (intérpretes, compiladores...). Dado que me había gustado la asignatura optativa de Traductores e Intérpretes de la carrera (el año siguiente cambió bastante) me esperaba buenas cosas, aunque quizás algo repetidas. La verdad es que no podía estar más equivocado, porque al segundo días las cosas ya eran nuevas para mi.

Raúl nos fue enseñando la teoría de un procesador a la vez que desarrollábamos una práctica que implementaba la teoría. La verdad es que las clases eran densas, nada relajadas, pero a cambio se aprendía mucho y con las 5 horas diarias de trabajo (más seis más, creo) conseguí tener la práctica terminada y con ampliaciones.

Creo que los procesadores me gustan porque se basan, al final, en ir encajando piezas, una encima de otra (siguen el modelo Pipes and filters tan nombrado en las exposiciones finales, que consiste en que la salida de un elemento es la entrada del siguiente).

Así que primero haces el analizador léxico (algo así como ver si las palabras están bien formadas), luego realizas el sintáctico (que recibe la información del léxico) y que comprueba que el fichero esta bien construido y carga todos los datos en un árbol (AST) que te abstrae del fichero que le hayas pasado y te permite trabajar con una estructura de datos cómoda. A partir de ahí el semántico realiza comprobaciones sobre ese árbol y lo "decora" añadiendo información extra, para al final generar el código.

Tras Raúl vino de nuevo Ortín, para comenzar a hablar de Máquinas Virtuales, concepto muy importante porque nos permite, a grandes rasgos, hacer una nueva capa de abstracción entre nuestro programa y el ordenador concreto.

Java tiene por debajo una máquina virtual, la JVM, de tal manera que si nosotros hacemos un programa en Java, nuestro programa ataca esa JVM. Nos da igual que ordenador o Sistema Operativo tenemos, lo que importa es la JVM. Si queremos tener aplicaciones que corran en todas partes, solo tenemos que desarrollarlas sobre una Máquina Virtual que corra en diversas plataformas.

Pero el cambio de tema, con respecto a lo dado por Raúl, no es radical, ya que supone la base de funcionamiento de las Máquinas Virtuales.

Tras esta interesante clase, Tajes nos introdujo en la Programación Orientada a Aspectos (también llamada AOP, aunque no lo parezca). Este tema me tenía en ascuas. La AOP parece como la última moda dentro de las últimas modas de programación. Para ligar, AOP (o eso me han dicho).

Para alguien no informático (como si pudiera quedar alguno a estas alturas) puede parecer extraño, pero la AOP es sencillamente separar las responsabilidades de un programa, de manera que no estén mezcladas, todo manga por hombro, en el programa. Digo que puede parecer extraño porque igual pensaba que es lo que se hacía ya (ja, si ellos supieran hermanos masones...).

Como decía la AOP es tan solo separar esas incumbencias, de manera que cuando nosotros programemos la lógica de la aplicación, solo programemos la lógica de la aplicación (no llamadas a logs, comprobaciones de seguridad y todo el resto). Si mi aplicación tiene que matricular alumnos, solo tiene que matricular alumnos.

La herramienta explicada para ejemplificarlo es AspectJ (al parecer de las más famosas).

Después tuvimos una desafortunada conferencia de Miguel Katrib que, desde mi punto de vista estuvo demasiado espeso el día que fui (el ciclo duraba tres días, nosotros fuimos uno). La conferencia trataba sobre las novedades de C# 3.0 (que incorpora algo de "dinamismo" al lenguaje), pero el primer día fue dedicado a explicar la evolución desde C# 2.0 a C# 3.0. Cada maestrillo tiene su librillo, no hay más. Se notaba que el hombre sabía la de Dios, pero no supo transmitírmelo.

Después Redondo y Vinuesa nos presentaron sus tesis doctorales, con dos objetivos. Uno, para explicar proyectos de investigación bastante punteros que trataban en torno a los temas que llevábamos tratando dos semanas, y Dos, enseñarnos como se defiende un proyecto de estas características ante el público.

Una clase provechosa, pero el tratar dos temas en tan poco tiempo hizo que quedara demasiado atropellado.

La última clase "normal" nos la dio de nuevo Ortín, con una modalidad que no veía en el Máster desde hacía 1 año aproximadamente, cuando él mismo nos dio la parte de Lenguajes Dinámicos en 1º. Se trata de disponer del material que se va a impartir en la clase (unas transparencias densas y muy curradas) y luego llegar a clase y hablar sobre el tema, como si tuviéramos una cerveza (yo un café mediano, gracias) delante.

Algo parecido lo tuvimos cuando Dani Gayo nos mandaba leer artículos de un día para otro, pero en esos casos la discusión acerca del tema no duraba más de 15 minutos. Aquí toda la clase transcurrió sin que Ortín tuviera que dar clase realmente y al final acabamos divagando sobre temas más abstractos que las máquinas virtuales y la reflectividad.

¿Y que mi madre es la reflectividad? Además de la otra parte del título de la asignatura, es la capacidad que ofrece un lenguaje a los programas de modificarse en tiempo de ejecución. La capacidad, en tiempo de ejecución, de crear clases nuevas, o modificar las que existen, en lenguajes como Java es pura ciencia ficción. Sin embargo, otro tipo de lenguajes menos usados, pero mucho más potentes si permiten hacer esas cosas.

Sería bastante ridículo ponerme aquí a hablar de los lenguajes dinámicos, de las capacidades reflectivas y demás, porque, además de que no me considero muy docto en la materia, sin duda hay lugares más aptos para ello.

Los dos últimos días se reservaron para presentar los temas asignados el primer día. La calidad de las presentaciones varía según el caso, pero lo importante no es tanto eso como los consejos que Ortín daba tras terminar cada presentación, que realmente te enseñaba los pasos a seguir para mejorar tu manera de hacer presentaciones.

El ambiente fue diferente en ambos días. El primer día los alumnos no solíamos preguntar y atendíamos más a los consejos de Ortín. No por malicia, al menos en mi caso, ni porque estuviera absorto en otras cosas, sino porque consideraba más provechoso os comentarios que Ortín aportaba y, mientras los asimilaba, no se me ocurrían preguntas.

El segundo día el ambiente fue algo más dialogante. Lanzamos más preguntas, hubo bromas entre el compañero de Microsoft y yo (que trabajaba para Sun) y tuvimos conversaciones bastante interesantes. Se notaba que los del segundo día llevábamos la lección aprendida de los fallos que habían cometido el primer día y nos relajábamos más.

En cuanto a mi presentación, Ortín me felicitó por ella y reconoció el trabajo (44 horas de nada) y a nivel personal quedé muy contento. Creo que es la presentación más currada que he hecho nunca (referencias justificadas, gráficos, pruebas...) y la verdad es que me hizo sentir que había aprendido algo más que una nueva tecnología de programación, o una nueva herramienta o cosas así. Además, durante la charla estuve bastante relajado (solo tarde 25-30 minutos, teniendo 20), y eso que presentar ante Ortín impone (por mucho que él diga que no lo entiende).

Resumiendo la asignatura ha sido una maravilla. Por el momento se sitúa a la cabeza de todas las asignaturas del Máster y ya quisiéramos que las que quedan fueran a tener la mitad de calidad y curro detrás.

Enlazando con mi último post, destacar que ésta también era una práctica abierta. La presentación trataba sobre un tema sí, pero la manera de estructurarla, investigarla, e incluso los contenidos a tratar eran cosa de cada uno, de manera que cada alumno se tenía que diseñar su propio fin para su trabajo.

Lo que diferencia esta práctica de la anterior es la motivación (a partir de ahora citaré a Ortín para justificar la necesidad de motivar a la hora de afrontar cualquier tema, asignatura o práctica... ¡Viva el Método Científico!). En el caos anterior sabes que estás haciendo la práctica por quitar una semana. En este caso sabes que lo haces para aprender ciertas cosas muy difíciles de enseñar.

Y ya por último... ¿No se dice reflexión? Parece que el mismo que te corrige si traduces libraries como librerías un día decidió que reflexión no era una buena traducción para reflection, así que acuñó el término reflectividad. Al parecer, en el resto de España dicen reflexión. ¡Argh maldito! ¡Los manejas como a títeres! Adelante R. contraataca con la fuerza del DRAE.

1 comentario:

Tania-chan dijo...

Vaya, por lo que cuentas parece una asignatura genial, me ha parecido super interesante :D