jueves, 23 de junio de 2022

Los que definieron la ciencia de la Informática (III)


Índices: Historia de la Informática


Para esta entrada ordenaré por fecha de nacimiento a los que voy a mencionar, ya que no hay orden cronológico claro como en las dos entradas anteriores, esto son solo algunas pinceladas de sus mejores contribuciones, lo justo para despertar el interés de investigar un poco más sobre ellos. Dejaré para la siguiente entrada a los creadores del C y del Unix.

Edsger Dijkstra

Edsger Dijkstra poco antes de fallecer en 2002 (fuente: Wikipedia)

Edsger Wybe Dijkstra nació en Róterdam en 1930 y falleció en 2002. De pequeño quería ser abogado, pero finalmente estudió física. Sus primeros trabajos fueron en 1952 en el Mathematisch Centrum de Ámsterdam, colaborando en la construcción de un ordenador, principalmente desarrolló el software para una máquina que todavía estaba a medio construir, demostrando que la programación metódica y los sistemas formales producen buenos programas. Aquí desarrolló un compilador de ALGOL con el que fijó muchos conceptos de la programación estructurada.

Pasó en 1962 como profesor de matemáticas a la Universidad Tecnológica de Eindhoven, ya que no tenía departamento separado para informática. No fue una etapa muy productiva por las limitaciones del departamento, pero creó el sistema operativo "THE operating system", que introdujo el uso de la memoria virtual paginada.

En 1973 pasó a trabajar como el único investigador en la empresa Burroughs Corporation, empresa norteamericana, pero el siguió trabajando desde su casa en Holanda con visitas ocasionales a las sedes de la empresa, compaginándolo con un solo día en la universidad, donde creó el famoso "Club de los Martes por la Tarde", donde discutían los colegas los trabajos científicos. En la Burroughs, con total libertad para trabajar en lo que quisiera, escribió más de 500 artículos.

En 1984 aceptó una cátedra en la Universidad de Texas en Austin, donde siguió escribiendo numerosos artículos, algunos muy famosos como el que habla del GOTO, y continuó con el club de los martes. Se retiró en 1999, regresó a Holanda donde falleció de un cáncer en 2002.

Contribuciones

La lista es muy larga, solo mencionaré las más conocidas. Uno de sus temas de estudio fue la programación concurrente, escribió el primer artículo científico sobre el tema en 1965. Entre sus contribuciones están el algoritmo del banquero y la idea de los semáforos. Menos conocido, pero también importante, es el tema de la auto estabilización en sistemas concurrentes.

En teoría de grafos definió lo que se conoce como "Algoritmo de Dijkstra" con la solución del problema del camino más corto, usado por ejemplo en los programas de mapas para calcular las mejores rutas para llegar desde un origen a un destino.

Definió la notación polaca inversa y el algoritmo "Shunting Yard" para analizar sintácticamente expresiones en ella.

El sistema operativo THE multiprogramming system, donde usó muchas ideas que se mantienen en los actuales.

Pero quizá su mejor contribución fue sobre la escritura de programas y la verificación formal. Definió el sistema de derivación de programas, se definen primero las bases matemáticas del algoritmo a usar, con su pre y post condición, y luego se desarrolla a partir de este el programa y las pruebas conjuntamente. Sus contribuciones al desarrollo de los lenguajes, comenzando con su compilador de Algol, donde potenció el manejo de funciones y de variables locales, sentando en sus artículos las bases de la moderna programación estructurada.

Polémicas

De carácter difícil, siempre fue muy polémico. No incluía casi referencias a otros trabajos en sus escritos alegando que muchas veces no existían. Tampoco era amante de usar ordenadores para todo, de igual manera a como hacía sus programas primero sobre papel y luego transcribiéndolos, prefería escribir todos sus artículos a mano, no usaba apenas el correo electrónico, no tenía televisión ni teléfono móvil, aunque era apasionado de los conciertos de música clásica y tocaba el piano.

Es muy conocida su polémica sobre la sentencia GOTO y el código espagueti, pero no todo lo que se dice es totalmente cierto. El escribió un artículo hablando del mal uso que se hacía del GOTO y de la ventaja de cambiarlo por funciones, se lo envió a su amigo Niklaus Wirth para que lo publicara en la revista que dirigía, pero este lo cambió pasando a tener como título "Go To Statement Considered Harmful" (La sentencia Goto considerada perjudicial), añadiendo la famosa frase "el BASIC deforma la mente". Cuando leyó lo publicado no se enfadó con su amigo, que lo conocía bien.

C. A. R. Hoare

Charles Hoare (Fuente: Wikipedia)

Charles Antony Richard Hoare nació en Sri Lanka en 1934, de nacionalidad británica. Estudió filosofía en Oxford, donde se enamoró de la lógica matemática. Luego sirvió en la armada hasta 1956. Estudió luego matemáticas en la Universidad Estatal de Moscú, y en 1960 regresó a Inglaterra, donde entró a trabajar en la empresa Elliott Brothers, desarrollando el primer compilador comercial para el lenguaje ALGOL. Intentó desarrollar un sistema operativo, que no funcionó nunca, y dejó el mundo de la empresa pasando en 1968 a la universidad. Tras retirarse como profesor, le ofrecieron un puesto de investigación en Microsoft.

Buscando una manera de realizar búsquedas de palabras en los diccionarios, desarrolló en 1960 el algoritmo de ordenación QuickShort, el mejor algoritmo con diferencia, nunca superado a pesar de los años que tiene, usando un algoritmo del tipo "divide y vencerás".

Para los que hayan estudiado la carrera de informática, una de las asignaturas es sobre los sistemas formales de desarrollo de la programación, que se basa en la conocida como "Lógica de Hoare", que desarrolló en 1969 a partir de un trabajo anterior de Robert Floyd, definió la Verificación Formal usando el triplete “{Q} S {R}” (Q=Precondición, S=Algoritmo, R=Postcondición), base del desarrollo de programas correctos.

Menos conocido es el lenguaje formal CSP (Comunicación de Procesos Secuenciales), un modelo de programación de sistemas concurrentes basado en la comunicación entre procesos sin recursividad, que es el tercer trabajo más citado en computación de acuerdo con las estadísticas de Citeseer.

En su compilador de ALGOL incorporó el puntero nulo (aunque luego se arrepintió públicamente de haberlo hecho en el 2009), lo que ha dado muchos quebraderos de cabeza a los programadores por no usar el ISNULL adecuadamente.

Niklaus Wirth

Niklaus Wirth (Fuente: wikipedia)

Niklaus Wirth nació en Suiza en 1934. Se graduó en Ingeniería Electrónica en la Escuela Politécnica Federal de Zúrich (ETH). Estudió un post-master en 1960 en la Universidad Laval de Canadá. En 1963 obtiene el Doctorado en la Universidad de California, Berkeley. Siempre relacionado con la docencia, fue profesor en la Universidad de Stanford entre 1963 a 1967, luego pasó a la ETH en Suiza, universidad donde tomó dos años sabáticos para acudir al Xerox PARC en California.

Wirth puede que sea la persona que más ha influido en el diseño de los lenguajes de programación, fue el jefe de diseño de los lenguajes de programación Euler, Algol W, Pascal (solo por esto ya merece ser recordado, heredero el ALGOL, tuvo una enorme influencia en el diseño de los lenguajes bien estructurados y de los compiladores, inspiración directa a muchos otros lenguajes), Modula, Modula-2 y Oberon, y en el equipo que diseño los sistemas operativos Lilith y Oberon, y del hardware para el Lola.

Tiene varios textos que son básicos en la ciencia informática, el libro "The Pascal User Manual and Report" (Pascal, manual de uso e informes", escrito junto con Kathleen Jensen, fue la base para muchos esfuerzos de implementación de lenguajes posteriores, Su artículo "Program development by stepwise refinement" (desarrollo de programas por refinamiento sucesivo) sentó las bases de un buen sistema de desarrollo de programas. Y por supuesto su famoso libro "Algoritmos + Estructuras de datos = Programas", básico para aprender a programar.

Tiene una frase memorable que se conoce como la Ley de Wirth, "El software se ralentiza más deprisa de lo que se acelera el hardware", el ejemplo principal es que los ordenadores tardan lo mismo en arrancar hoy que hace unos años, a pesar del aumento de velocidad de los procesadores.

Y por supuesto la ya mencionada amistad con Dijkstra y los cambios que incluía en los artículos que este le remitía para su publicación como director de las publicaciones informáticas de la ETH.

Donald Knuth

Donald Knuth (fuente: Wikipedia)

Donald Ervin Knuth nació en Milwaukee en 1938. Estudió física en universidad de Cleveland, allí tuvo acceso a un IBM 650, que se programaba en ensamblador, pero como no le gustaba reescribió el código del programa ensamblador. Con este realizó un programa para ayudar al equipo de baloncesto, definió una serie de características y asignó unos puntos a cada jugador, calculando la probabilidad de puntuar, este sistema mejorado se sigue usando hoy día, sobre todo en las casas de apuestas. Cambió la física por las matemáticas, recibió dos títulos, y se doctoró en 1963 en el Caltech (California Institute of Technology), donde pasó a ser profesor. En el 68 pasó a Princeton para trabajar en criptografía, y desde el 69 trabaja en la universidad de Stanford.

Comenzó a escribir un manual sobre programación en ensamblador, que rápidamente se convirtió en un libro pues necesitaba ampliar con muchos temas de base sobre programación, luego se dio cuenta que necesitaría desarrollarlo en 6 libros, y finalmente han sido siete, aunque los últimos divididos en varias partes realmente. En 1968 publicó el primero volumen de "El arte de programar ordenadores", en 1969 el segundo, en 1973 el tercero, en 1981 revisó los 3 primeros, ha publicado por secciones en fascículos los capítulos del libro cuarto y parte del quinto, en 2005 publicó un anexo al primero, en 2011 se publicó el libro 4A, además de revisar continuamente los anteriores. A pesar del ritmo que lleva, espera poder publicar el libro 4B, 4C, 4D y los restantes algún día. La serie completa constaría de estos libros:

  • Volumen 1 – Fundamental Algorithms (Algoritmos fundamentales)
    • Capítulo 1 – Basic concepts (conceptos básicos)
    • Capítulo 2 – Information structures (estructuras de datos)
  • Volumen 2 – Seminumerical Algorithms (Algoritmos semi-numéricos)
    • Capítulo 3 – Random numbers (Números aleatorios)
    • Capítulo 4 – Arithmetic (Artimética)
  • Volumen 3 – Sorting and Searching (Ordenación y búsqueda)
    • Capítulo 5 – Sorting (ordenación)
    • Capítulo 6 – Searching (búsqueda)
  • Volumen 4 – Combinatorial Algorithms (Algoritmos combinatorios)
    • Valumen 4A: Capítulo 7 – Combinatorial searching (búsqueda combinatoria)
    • Volumen 4B: Capítulo 7 – Combinatorial searching (búsqueda combinatoria, continuación)
    • Volumen 4C y 4D Capítulo 8 – Recursion (recursividad)
  • Volumen 5 – Syntactic Algorithms (algoritmos sintácticos)
    • Capítulo 9 – Lexical scanning (Análisis léxico, incluye búsqueda de cadenas y compresión)
    • Capítulo 10 – Parsing techniques (Técnicas de análisis)
  • Volumen 6 – The Theory of Context-Free Languages (Teoría de los lenguajes libres de contexto)
  • Volumen 7 – Compiler Techniques (Técnicas de compilación)

Además de sentar las bases de muchos algoritmos y realizar su análisis, su otra gran aportación es TEX, un estándar para la publicación de libros y artículos, separando la redacción del texto de su posterior impresión, una maravilla en el desarrollo de un sistema de impresión completamente independiente que es ampliamente utilizado.

Ofrecía una recompensa de 2,56 dólares por reportar erratas en sus libros (256 centavos son 1 dólar hexadecimal), envió muchos cheques que los afortunados receptores casi nunca cobraron, ya que tiene más valor el propio cheque firmado para el que lo recibe, pero tras tantos años parece ha dejado de hacerlo.

No hay comentarios:

Publicar un comentario