Archive for Diciembre, 2002

Si Turing levantara la cabeza…

El tema sobre el que voy a escribir es un tema al que le tenía ganas desde hace ya mucho tiempo. Tras el examen que hice hace unos días (ver mi artículo anterior) me parece que por fin ha llegado el momento de desahogarme.

Antes de nada, voy a explicar más tranquilamente lo del examen. Cuando escribí el artículo anterior estaba ya bastante cansado y con pocas ganas de explicar nada. El examen que hice el pasado sábado es el GRE Subject Test, del cual existen varias versiones. Yo concretamente hice el de Informática (Computer Science Test). Este examen mide los conocimientos de un alumno en un area especifica de conocimiento (también hay exámenes de matemáticas, física, biología,…) y suele ser un requisito obligatorio para ir a estudiar a los EE.UU. (que, como muchos ya sabéis, es lo que espero poder hacer el próximo año). El examen me parece que me salió bien…vamos, respondí a bastantes preguntas y aunque dejé unas cuantas en blanco, se supone que es lo normal (antes del examen te tranquilizan y te dicen que no esperan que domines todas las áreas de la informática, y que es normal dejar muchas preguntas en blanco). Sin embargo, el examen puso en evidencia que, mientras que hice con facilidad todas las preguntas de ingeniería del software, redes, arquitectura de computadores, etc, etc. no controlo nada los fundamentos teóricos y matemáticos de la informática. En la carrera no he visto ninguno de esos fundamentos (excepto en la grandiosa asignatura de Compiladores, donde sí los vimos de pasada) y tuve que mirármelos por mi cuenta. Hombre, algo ya aprendí por mi cuenta, pero no estoy a la altura de alguien que se haya pasado varios cuatrimestres empollando y ejercitando esos fundamentos. Y precisamente esa es la razón por la que escribo hoy: porque me parece lamentable que en muchas universidades españolas se menosprecien y banalicen esas asignaturas que, en mi humilde opinión, son importantísimas.

¿A qué conocimientos teóricos me refiero exactamente? Aquí hay una lista resumida:

  • Teoría de autómatas y lenguajes formales: autómatas, lenguajes regulares, autómatas con pila, máquinas de Turing, gramáticas formales, problemas de decisión, …
  • Análisis de algoritmos: análisis asintótico de algoritmos, análisis de funciones recurrentes, tipos de algoritmos (”divide y vencerás”, algoritmos voraces, programación dinámica, algoritmos heurísticos y probabilísticos, …), complejidad computacional, problemas NP-Completos y NP-Difíciles, …
  • Metodología de la programación: especificación formal, verificación, y derivación de programas, …

En mi universidad (y por lo que tengo entendido, en muchas otras) estos temas apenas se enseñan. Por ejemplo, en Deusto sí vemos teoría de autómatas y lenguajes formales, pero a prisa y corriendo en los primeros dos meses de la asignatura de Compiladores. También vemos metodología de la programación, pero esa asignatura es victima (injustamente, en mi opinión) de todo tipo de injurias e insultos por parte del alumnado, que la descarta como una asignatura absurda sin ninguna utilidad (lo mismo que ocurre en menor medida con la asignatura de Compiladores). Y de análisis de algoritmos no vemos nada.

La excusa para no dar este tipo de asignaturas suele ser que “no sirven para nada”. Vamos a ver, yo soy el primero en admitir que estas asignaturas no tienen ninguna utilidad práctica palpable (como puede tenerla una asignatura de Java, de C++, etc). De los miles de licenciados en informática en toda España durante un año supongo que solo dos o tres acabarán programando compiladores. Pero este tipo de asignaturas tienen una enorme utilidad como formación intelectual y cultural. Nos ayudan a comprender mucho mejor la informática y sus orígenes (tanto históricos como matemáticos) y a explorar sus problemas y misterios más profundos. Además, estos conocimientos teóricos nos ayudan a ser mejores programadores: el análisis de algoritmos nos permite decidir cual es el algoritmo idóneo en cada caso, con la metodología de la programación se consigue adquirir una percepción clarividente de la recursividad y la iteratividad, con la teoría de compiladores conocemos las entrañas de los lenguajes de programación y podemos optimizar nuestras técnicas de programación, etc, etc.

Hasta hace unos años, en Deusto había tres asignaturas que cubrían gran parte de este temario: Teoría de Autómatas Formales, Maquinas Abstractas de Cálculo, y Teoría de la Complejidad. Estas asignaturas fueron vilmente eliminadas del plan de estudios (supongo que “porque no sirven para nada”) en detrimento de asignaturas más prácticas. Yo no soy partidario de que haya que imponer un plan de estudios puramente teórico, con menos prácticas de las que hay ahora, porque la “teoría” y la “práctica” son el yin y el yang de la informática, no puede haber una sin la otra. Sin embargo, durante la carrera me habría gustado haber podido elegir. He tenido que dar asignaturas de contabilidad, SAP R/3, gestión de stocks y gestión empresarial que sé que a mi no me van a servir para nada (insisto en que estas asignaturas no me parecen inherentemente malas…entiendo y respeto que el 90% del alumnado las necesita y acabara viviendo de lo que aprenden en ellas, pero yo no). En vez de malgastar mi tiempo con esas paridas, habría preferido haber aprendido los entresijos de las maquinas de Turing, haber explorado los profundos misterios de la pregunta “P=NP?” y haber analizado mil y un algoritmos recursivos.

En conclusión, que me parece una pena que los informáticos en general desconozcamos los fundamentos teóricos de nuestra disciplina (de la misma manera que desconocemos la historia de nuestra disciplina). Creo firmemente que conocerlos nos ayuda a ser mejores informáticos, de la misma manera que el dominio de cualquier disciplina (por muy “práctica” que sea) se apoya en unos conocimientos teóricos sólidos. ¿La solución? Dada la tendencia a meter más y más prácticas en las ingenierías, dudo mucho que asignaturas como Teoría de Autómatas y Lenguajes Formales vuelvan a ser troncales, pero agradecería sumamente que por lo menos fuesen optativas en todas las universidades, de tal manera que los informáticos mas frikis podamos pasar olímpicamente de SAP R/3 y aprender cosas realmente interesantes.

ANEXO: ¿Quién es Turing? He hablado mucho de las Máquinas de Turing, y el propio titulo del artículo hace referencia a él. Me refiero a Alan M. Turing (1912-1954), al que podemos llamar (sin temor a equivocarnos) el “padre de la informática” o, más apropiadamente, “de las ciencias de la computación”. Turing sentó gran parte de las bases teóricas de la informática, especialmente gracias a la “Maquina de Turing”, una abstracción matemática que representa la ‘computadora más potente del mundo’. Me explico. Turing ideo una maquina abstracta (abstracta en el sentido matemático) que es mucho más sencilla que cualquier ordenador actual (excepto que parte del supuesto de un almacenamiento ilimitado). Esta máquina consiste sencillamente en una cabeza lectora (como el láser de un lector de CDs), una “unidad de control” que decide lo que hace la cabeza lectora, y una cinta infinitamente larga de caracteres (que es leida por la cabeza lectora). Pues bien, una de las peculiaridades de la Máquina de Turing es que ¡¡¡algo que no pueda hacerse en una máquina de Turing nunca podrá hacerse en un ordenador real!!! En efecto, la Máquina de Turing marca los limites de lo que puede y no puede hacer un ordenador; con ella se ha demostrado (matemáticamente y formalmente) que hay ciertos problemas que un ordenador nunca será capaz de resolver. No importa cuanta memoria, disco duro, velocidad, etc. tenga. Ese “nunca” es categórico e inapelable. Os voy a poner un ejemplo sencillo (voy a utilizar una terminología sencillita, para que me entienda todo el mundo, así que vayan mis disculpas por adelantado a los informáticos que piensen que la explicación es un poco absurda).

En Teoría de Autómatas y Lenguajes Formales se maneja habitualmente el concepto de “gramática formal”. Una gramática formal es como la gramática del castellano, del inglés, etc. en el sentido de que recoge todas las normas y reglas de un lenguaje formal. Sin embargo, estas gramáticas formales especifican un lenguaje de una manera rigurosa y matemática. No son validas para el castellano y el inglés, porque son ‘demasiado rigurosas’ para lenguajes con tantos matices y complicaciones. Sin embargo, estas gramáticas son ideales para especificar lenguajes de programación (como Pascal, C, C++, Java, etc.) Otro concepto que se maneja habitualmente es el de “gramática ambigua”. Una gramática es ambigua si, dada una frase del lenguaje, la gramática nos permite interpretar esa frase de más de una manera. Por ejemplo, en castellano la frase “zapatos de piel de mujer” es ambigua: ¿nos referimos a zapatos de piel para una mujer, o es que vamos a hacernos unos zapatos con piel de mujer? A no ser que la gramática nos permita extraer el significado exacto de esta frase, entonces la gramática es ambigua. Por ejemplo, la gramática podría decir que siempre agrupamos los sintagmas nominales de izquierda a derecha, con lo que nos queda: ((zapatos de piel) de mujer). Pues bien, aquí llega el notición: es imposible escribir un programa informático que, dada una gramática, nos diga si es ambigua o no. Insisto que esto es una afirmación inapelable. Por mucho que avancen los ordenadores y por rápido que sean, nosotros no podremos escribir un programa que haga eso. Se ha demostrado formalmente que una Máquina de Turing es incapaz de hacerlo, por lo que un ordenador tampoco podrá hacerlo. Evidentemente, todo esto tiene por detrás unas demostraciones matemáticas muy profundas. Y hay muchos otros problemas que no pueden ser resueltos por un ordenador. Esto me parece muy importante porque los informáticos solemos creernos los reyes del mambo, y supone una lección de humildad enfrentarte al hecho de que los ‘todopoderosos ordenadores’ no lo son tanto. Pero claro, si no estudiamos las asignaturas que he mencionado antes, pues muchos no se enteran de que así están las cosas.

Finalmente, me gustaría comentar que Turing no se limitó simplemente a idear máquinas abstractas, sino que también colaboró en el desarrollo de los primeros ordenadores digitales (especialmente el ultrasecreto Colossus durante la 2ª Guerra Mundial) y fue el criptoanalista que más contribuyó a descifrar el código Enigma de los Nazis. Fue indudablemente uno de los mejores científicos con los que contó el gobierno Británico durante la 2ª Guerra Mundial. Sin embargo, una vez finalizada la guerra, al no resultarle útil al gobierno Británico, éste no tuvo ningún reparo en perseguir a Turing por sus orientaciones homosexuales, obligándole incluso a inyectarse hormonas para corregir su “comportamiento desviado” (el gobierno británico sostenía que no se podían confiar secretos de estado a un homosexual). Turing finalmente se suicidó en 1954 tras varios años de ser presionado por el gobierno. Este es probablemente uno de los puntos más negros y lamentables de la historia de la informática.

Joer, que alivio…

Hace escasos minutos acabo de volver de otro viaje a Madrid (no os perdais las crónicas del primer y segundo viaje). He ido a hacer el GRE Computer Science Subject Test, un examen de informática muy muy muy gore que te piden para ir a estudiar a EEUU. Es con diferencia el examen para el que más me he estresado y más he estudiado en mi vida, especialmente porque he tenido que estudiar (muchos) temas que no he visto en la carrera. Me parece que me ha salido bien, pero nunca se sabe…

De todas maneras, lo que quiero decir (y voy a decir poco porque estoy cansado despues del viaje en autobus) es que estoy aliviadisimo de habermelo quitado de encima. Ya era el ultimísimo trámite que tenia que hacer para lo de ir a EEUU. Ahora sólo hay que esperar a que llegue la mítica carta donde te dicen que te admiten o que sigas intentandolo (como en las bolsas de patatas fritas)

Pues eso os cuento de momento. Ya siento ser tan escueto y poco expresivo, pero en serio que estoy muy cansado…

It’s beginning to look a lot like Christmas…

Pues eso, que las navidades se acercan sin prisa pero sin pausa, y ha llegado el momento de poner el árbol, colgar acebo por todos lados, y de besarse bajo el muerdago. Por supuesto, todo eso tiene que tener una correspondencia en BorjaNet, así que (como ya habreis notado) he colgado un par de adornos navideños.

La verdad es que la navidad es algo sobre lo que tengo sentimientos mixtos. Por un lado, me pasa igual que con los cumpleaños…no es algo que me entusiasme especialmente. De entrada, no celebro el significado religioso de las navidades. Pero lo que no termino de captar es que se supone que es una epoca en el que todo el mundo tiene que ser feliz pero…joer…¡igual a mi no me apetece ser feliz en navidad! Lo mismo me pasa en los cumpleaños…¿tengo que ser feliz y dicharachero simplemente porque he dado una vuelta más al Sol? Igual seré feliz cinco meses después porque me han dado una buena noticia, o porque me he enamorado, o algo así.

Pero, por otro lado, tengo que admitir que toda la parafernalia navideña me encanta. Y cuanto más yanki, mejor (eso me pasa por estudiar 13 años en un colegio americano…ya lo siento :-) Santa Claus, un enorme arbol de navidad decorado con símbolos paganos, muerdago y acebo por todos lados, cantar Jingle Bells, y un enorme pavo para cenar (nada de marisco…¡puaj!) Y, curiosamente, hay algunos años que tanto ornamento navideño consigue que durante unos cuantos días vaya por la calle con una sonrisa en mis labios.

En definitiva, no soy de los que pegan brincos de alegría por la navidad, pero tengo que admitir que hay años que efectivamente me levanta bastante los animos (aunque no exclusivamente porque sea navidad). Todo depende de cómo me encuentre cada año…Por ejemplo, el año pasado no disfruté nada de la navidad porque permanecí varios días enclaustrado con tres compañeros de clase haciendo un proyecto de microbótica. Sin embargo, este año parece que sí me espera una navidad feliz porque (entre otras cosas) ¡¡voy a pasar el comienzo de las vacaciones en Barcelona, mi ciudad favorita de todo el mundo!! Bueno, cuando terminen las fiestas ya os comentaré si efectivamente han sido unas felices navidades ;-)

¡Ah! Al igual que en los cumpleaños, no puedo negar que me encanta recibir postales navideñas electronicas. ¿A qué estais esperando para enviarme una? :-)