Mentes geniales. La vida y obra de 12 grandes informáticos

Text
0
Kritiken
Leseprobe
Als gelesen kennzeichnen
Wie Sie das Buch nach dem Kauf lesen
Schriftart:Kleiner AaGrößer Aa

1.7 CONCLUSIÓN

Es triste saber que, no hace mucho, el nombre de Turing no decía nada a muchas personas, pasaba totalmente desapercibido, incluso en su propio país. ¡Hasta entre los propios informáticos! Creo que eso ha ido cambiando con el paso del tiempo, aunque paulatinamente.

El desconocimiento en los informáticos se puede explicar porque, en la actualidad, muchos de ellos no saben casi nada de teoría20. En general, ellos están dentro de una prisión en la cual no ven nada más allá de las herramientas. Y las ideas de Turing son principalmente teóricas. Esa debilidad (también mencionada por Dijkstra más adelante, y por Lamport hoy en día) es una cuestión que crea en los actuales ingenieros una debilidad en sus razonamientos, impregnados, en su mayoría, solo en el aprendizaje de herramientas (tecnologías), más que en pensar en la resolución de problemas complejos.

Una debilidad de, lo que algunos autores llaman, pensamiento computacional. Ese pensamiento se funda en la lógica y en las matemáticas, y, aunque es verdad que la informática actual va más allá de la lógica, más allá de las matemáticas, por su propio dinamismo los cimientos no pueden ser omitidos.

1.8 OBRAS RECOMENDADAS

• 1936. On Computable Numbers, with an Application to the Entscheidungsproblem. La obra maestra de Turing, un deber para cualquiera que pretenda aspirar a ser un informático.

• 1950. «Computing machinery and intelligence». Un excelente artículo donde Turing despliega todas sus ideas de si podrá una máquina algún día pensar como un ser humano. Recomendado.

1.9 TRABAJOS SOBRE TURING

• 1997. Turing: A natural philosopher, por Andrew Hodges. Una excelente biografía que reivindica el papel de Turing en la sociedad tecnológica.

• 2013. Alan Turing: His Work and Impact, editado por S. Barry Cooper y J. van Leeuwen. Es una recopilación de muchos de los trabajos de Turing, una obra maravillosa que, además, incluye una biografía y una serie de artículos de otros especialistas que analizan la obra de Turing. Una obra monumental y muy recomendada.

• 2018. Alan M. Turing: Más que un enigma, por Sara Turing, editorial Tecnos. Libro escrito por la madre de Turing, con una memoria de su hermano mayor, John Turing. Altamente recomendado para conocer detalles de su infancia y adolescencia. Y presenta las dificultades que tuvieron como familia para comprenderlo.

• 2020. Alan Turing: El pionero de la era de la información, editorial Turner. Esta es una biografía escrita por Jack Copeland, un filósofo que ha dedicado gran parte de su vida a estudiar el legado de Turing y sus implicaciones en la era moderna. Un libro muy recomendado.

________

4. En esta breve biografía trataré los aspectos que conciernen a sus aportes a la informática, mas omitiré sus relevantes aportes al Reino Unido durante la Segunda Guerra Mundial, en particular, su trabajo para descifrar los mensajes de la máquina Enigma.

5. Una ciudad de la India, capital de Tamil Nadu.

6. Es un examen común en el Reino Unido que evalúa diferentes aspectos cognitivos y se realiza a niños de 13 años que quieren acceder a una escuela secundaria.

7. Considerado uno de los más grandes lógicos de todos los tiempos. Para ahondar más en su vida le recomiendo leer la biografía de Rebecca Goldstein, Gödel: Paradoja y vida.

8. Se le ha reconocido como uno de los más grandes matemáticos del siglo xx.

9. Para una revisión más exhaustiva de los inicios de la computación, le recomiendo el libro de Martin Davis, La computadora universal.

10. Nombre original de la película: The Imitation Game, estrenada en 2014. Recomendable, aunque tiene algunas imprecisiones.

11. Imagen extraída de https://en.wikipedia.org/wiki/Bombe.

12. Fue un pionero de la ciencia de la computación de origen alemán. Considerado el primero en crear un ordenador programable (Z3) en 1941.

13. Se le considera un destacado matemático británico. Hizo grandes aportes a la computación, en particular al descifrado de códigos durante la Segunda Guerra Mundial.

14. Fue uno de los primeros ordenadores que soportaban programas almacenados; diseñado a partir de otro ordenador, el Manchester Baby (o Small-Scale Experimental Machine).

15. Imagen extraída de: https://en.wikipedia.org/wiki/Automatic_Computing_Engine. Autor: Antoine Taveneaux.

16. En 2016, Google presento AlphaGo, un programa que derrotó al campeón mundial de go. Según sus desarrolladores, el go es mucho más complejo que el ajedrez. https://deepmind.com/research/case-studies/alphago-the-story-so-far [Revisado en junio de 2021].

17. Imagen extraída de: https://es.wikipedia.org/wiki/Prueba_de_Turing.

18. En el libro su hermano relata múltiples eventos sobre Alan Turing, por ejemplo, al invitarlo a una comida familiar, este llegó (Alan) y estuvo un breve periodo de tiempo y se fue sin despedirse, sin pedir disculpas; también señaló que Alan siempre iba mal vestido y que era de no preocuparse por su higiene personal (Turing S., 2018, págs. 259-294). Después de leer ese texto, llegué a la conclusión de que él nunca llegó a comprender a su hermano.

19. Los diversos lenguajes de programación se pueden agrupar en «paradigmas», donde cada uno de ellos se funda de una forma diferente de realizar la computación. El imperativo es uno de ellos. Cabe señalar que la palabra «paradigma» no me gusta porque es demasiado amplia y ambigua. Quizá se podría usar la palabra «modelo» o «estrategia», para indicar una distinta representación de la computación, con otros principios, con otros métodos, haciendo uso de una nueva sintaxis y semántica del lenguaje de programación propuesto.

20. Esto se puede entender porque la informática o computación se ha expandido en diferentes carreras universitarias (por su misma complejidad). Algunas, por ejemplo, relacionadas más con la electrónica y el hardware, otras más con el software, y otras más con los aspectos teóricos de la computación. Sin contar todas las interconexiones con otras áreas del conocimiento, a saber, bioinformática, química computacional, neurociencia computacional, etc.

JOHN MCCARTHY
(1927-2011)
La inteligencia artificial «entre paréntesis»21

¿Quién fue el primero en acuñar el término inteligencia artificial? Y ¿quién diseñó uno de los primeros lenguajes de programación de alto nivel y el primero funcional? Estas preguntas y muchas más están estrechamente relacionadas con John McCarthy, uno de los padres de la inteligencia artificial. Creador de Lisp, el segundo lenguaje de programación (después de FORTRAN) en ser considerado de alto nivel, y el primero en ser funcional. Fue uno de los grandes personajes de la ciencia de la computación de la primera mitad del siglo xx. El sueño de hacer los sistemas computacionales más inteligentes, más útiles a los humanos, se lo debemos en cierta medida a McCarthy. Quizá podamos resumir su búsqueda intelectual durante su vida con el título de uno de sus populares artículos: «Programas con sentido común».

2.1 PRIMEROS AÑOS

Nació en Boston, Massachusetts (EE. UU.), en 1927. Hijo de padres inmigrantes. Su padre, John Patrick McCarthy, fue un católico irlandés que trabajó como gerente de negocios en el periódico Daily Worker (de propiedad del partido comunista de EE. UU.). Su madre, Ida Glatt, fue una inmigrante judía lituana que también trabajó en el Daily Worker, y luego fue trabajadora social. Es decir, sus padres fueron personas que se mantuvieron, de una u otra forma cercanas a los temas sociales de su tiempo.

En una entrevista realizada por Nils J. Nilsson22, McCarthy le revelaría que, «antes de ir al instituto, se interesó por la ciencia leyendo una traducción de un libro ruso de divulgación científica para niños, titulado 100.000 porqués». De niño ya mostraba un interés por temas científicos.

 

Fue aceptado en la Universidad de Caltech para estudiar el grado de matemáticas, y se graduará en 1948; en este mismo año ocurriría algo que, sin duda, marcaría su carrera: asistió al «Simposio de Hixon sobre los mecanismos cerebrales del comportamiento» en septiembre de 1948. Ahí se reunieron muchos científicos de distintas áreas de estudios que trabajaban en cuestiones que interceptaban temas tan diversos como psicología, matemáticas y computación. En este evento McCarthy se interesaría en la idea de si es posible que las máquinas puedan pensar como las personas lo hacen.

Luego obtuvo su doctorado, también en matemáticas, en Princeton (1951). El cambio de universidad se debería, en palabras del propio McCarthy, a que Princeton era el mejor lugar para estudiar matemáticas. (Von Neumann se encontraba en Princeton por esos años; más tarde tendría una conversación con él donde intercambiaron ideas sobre la inteligencia artificial).

Durante su tesis doctoral en Princeton, Solomon Lefschetz23, director del departamento y, a su vez, supervisor doctoral de McCarthy, le dijo: «¿Sobre qué vas a hacer tu tesis?», a lo que respondió: «No lo sé. Voy a pensarlo». Así, McCarthy logro una cierta fama en la facultad, pues tuvo la iniciativa de buscar un tema para su tesis doctoral de manera autónoma; ya que lo habitual es que el supervisor le asigne un tema al doctorando (Nilsson, 2007, pág. 4).

Pues ya lo sabe, si quiere comenzar una tesis doctoral, podría imitar a McCarthy, quizá logre algo de popularidad o, al menos, demostrar iniciativa (siempre es bien recibida), ¿por qué no? (Aunque, para ser del todo honesto, depende mucho de su supervisor, en cualquiera de los casos).

2.2 EL ADVENIMIENTO DE UN NUEVO TÉRMINO: INTELIGENCIA ARTIFICIAL

Un término que hoy en día es tan difundido y aparece por todos lados es el de inteligencia artificial (IA). McCarthy fue el primero en acuñar este término «entre paréntesis»; ¿entre paréntesis? Pues él fue el padre de Lisp, un lenguaje de programación que se caracteriza, entre muchas cosas, por el uso de paréntesis para construir la computación. Además de ser un lenguaje que, principalmente en sus inicios, fue fundamental para el estudio de la inteligencia artificial.

Durante febrero de 1955, McCarthy aceptó la plaza como profesor asistente de matemáticas en Darmouth College, en Hannover. Aquí sería su primer acercamiento «experimental», por así decirlo, ya que programaría por primera vez en un ordenador, un IBM 704. En ese tiempo McCarthy era el representante de la Darmouth, por ello, fue invitado por Nathaniel Rochester24 a pasar el verano del mismo año en IBM. Presumiblemente aquí surgió la idea para desarrollar el mítico taller donde se iniciaría esta nueva área de estudio, la inteligencia artificial.

Algo que mencionó Nilsson fue que «ese verano en IBM, McCarthy y Rochester convencieron a Claude Shannon y a Marvin Minsky, entonces becario de Harvard en matemáticas y neurología, para que se unieran a ellos y propusieran un taller que se celebraría en Dartmouth durante el verano siguiente».

Así, llegamos al verano de 1956. McCarthy propuso el nombre de inteligencia artificial para el taller que iba a realizarse en Darmouth College. Luego él mismo diría que lo llamó así, aunque tuvo la vaga sensación de haber oído esa frase antes, pero que nunca pudo recordar dónde (Nilsson, 2007, pág. 6).

Tuvo una gran repercusión porque a este taller asistieron los principales investigadores en computación (de aquel momento). Dicen que, para que una idea tenga impacto, debes estar en el lugar y tiempo adecuado, pues eso parece que ocurrió aquí.

¿Cómo sucedió? Antes de dicho taller, McCarthy había publicado un libro titulado Automata series (series de autómatas). Por lo visto, su obra no fue tomada muy en cuenta por la comunidad científica. El nombre parece que fue visto como algo aburrido, sin relevancia. Así que probó cambiando el nombre del tema de su investigación a algo que sonara mejor, así surgió: inteligencia artificial. Un gran cambio, ¿no cree? Para alguien que hizo un trabajo técnico tan sobresaliente es sorprendente que uno de sus aportes sea también en el área del marketing, al elegir tan buen nombre. (Dicho sea de paso, nos hacen faltan informáticos así; o quizás ocurre lo contrario, hay demasiados nombres geniales en producto con poco o nada respaldo técnico).

Nilsson añadió que «el taller de Dartmouth se considera generalmente como el primer trabajo serio en este campo [IA] al que McCarthy dedicó su carrera científica».

McCarthy fue precursor de uno de los movimientos (approach en inglés) de la inteligencia artificial, en particular el llamado logicista. A continuación, definiremos tres: simbólico, logicista y soft computing.

1. Realiza un énfasis en que la inteligencia humana puede reducirse a la manipulación de símbolos (este movimiento se llamó simbólico o GOFAI [good old fashioned AI]).

2. Otro enfoque es el logicista, que trata de lo siguiente: más que buscar la simulación de la inteligencia humana, es mejor centrarse en la esencia subyacente del razonamiento de la resolución de problemas (este movimiento lo inició McCarthy).

3. En la actualidad, un movimiento que ha tomado fuerza es el de las redes neuronales y los algoritmos de aproximación, haciendo uso de estas técnicas se pretende dejar de lado los sistemas lógico-exactos por métodos de aproximación, para cuando se tiene información incompleta o con alta incertidumbre (a menudo lo llaman soft computing).

Existen otros más, pero creo que con estos usted ya puede formarse una idea. McCarthy fue uno de los fundadores del movimiento logicista, el cual hace uso de métodos exactos que nos entrega la lógica formal. Para llevar a cabo sus ideas, crearía Lisp, un lenguaje de programación que, hasta el día de hoy, algunos de sus derivados son utilizados en áreas de investigación y en la industria.

2.3 LISP

McCarthy, en 1958, obtuvo una beca para ir al MIT, donde había disponibles ordenadores IBM, lo cual era importante para seguir trabajando en sus proyectos. Además, estaba cerca de donde se encontraba Marvin Minsky, quien estaba en Harvard. Precisamente con él intercambió múltiples ideas.

En ese momento comienza a trabajar en un nuevo lenguaje de programación, Lisp. ¿Cómo nació la idea de crear Lisp? Según Nilsson, «McCarthy dijo que la idea del procesamiento de listas [de Lisp] se la dieron Allen Newell y Herber Simon25 en el taller de Dartmouth de 1956, pero que no le gustaba el lenguaje IPL que utilizaban». Esto no es de extrañar, muchas nuevas herramientas surgen por una incomodidad con lo actual, de hecho, es así como avanza la tecnología.

Este lenguaje da comienzo a una familia de lenguajes de programación funcionales, o sea, se transformaría en un dialecto. Su primera versión apareció en 1958 y su nombre proviene de LISt Processor (procesamiento de listas). Con una similitud al cálculo lambda, fue el primer lenguaje de programación en ser usado para tareas sobre inteligencia artificial26.

A modo de anécdota: el cálculo lambda es un modelo de computación creado por Alonzo Church, basado en el uso de funciones para realizar la computación, que vio la luz durante la década de 1930. A pesar de que McCarthy negó que hubiera sido influenciado por el cálculo lambda para diseñar Lisp, mencionó lo siguiente:

Lisp [...] no fue un intento de llevar a la práctica el cálculo lambda, aunque si alguien hubiera empezado con esa intención, podría haber terminado con algo como Lisp. (Wexelblat, 1981, pág. 190).

A pesar de tener (Lisp) una sintaxis que podría parecer extraña para los programadores de hoy en día, fue un lenguaje que provocó una gran influencia en la comunidad de investigadores —de su tiempo y aún en los actuales—. Y ha sobrevivido al paso del tiempo en diversos dialectos de Lisp, por ejemplo, algunos conocidos: Scheme, Clojure y Racket. Pero existen muchos más.

La representación de la computación en Lisp lo hace ser muy útil para diseñar nuevos lenguajes de programación. Lisp es un lenguaje con homoiconicidad. ¿Qué significa? Que cada primitiva del lenguaje es en sí misma una estructura de datos. Una utilidad a la que, hasta nuestros días, los investigadores de la teoría de los lenguajes programación le sacan provecho. Ello se debe a que se abstrae de cuestiones que son irrelevantes, como el manejo de memoria y la asignación de variables; esto último tan popular en lenguajes imperativos (a saber, C, Python, etc.). Ya volveremos a esto brevemente.

El mismo Alan Kay27 tiene una cita muy divertida sobre Lisp:

Un notable grupo de excepciones a todos los sistemas anteriores fueron LISP [...] y TRAC. Ambos son lenguajes funcionales (uno de lista, otro de cadena de texto), ambos se comunican con el usuario con un solo lenguaje, y ambos son «homoicónicos» en el sentido de que sus representaciones, internas y externas, son esencialmente las mismas. Ambos tienen la capacidad de crear dinámicamente nuevas funciones que pueden ser elaboradas a gusto del usuario.

Su único gran inconveniente es que los programas escritos en ellos se parecen a la carta del rey Burniburiach a los sumerios realizada en cuneiforme babilónico28. […] (Alan C. Kay, Tesis doctoral de la University of Utah, 1969).

¡Lo mismo piensan muchos programadores sobre la sintaxis de Lisp! Pero veamos el lado positivo: la composición de expresiones puede verse muy claramente, muy notoriamente, muy explícitamente, con el uso de paréntesis; es útil porque cada expresión puede ser vista con una estructura similar a una creada dinámicamente (más abajo, en el ejemplo técnico se puede apreciar), es decir, los programas escritos en Lisp son visto como datos que pueden ser utilizados por otro programa29; si se hiciera usando una sintaxis estilo C —esto es, usando llaves de apertura y cierre y punto y coma—, no sería tan fácil de lograr ni ver dicho resultado.

En 1960, McCarthy describió por primera vez Lisp en el artículo «Recursive Functions of Symbolic Expressions and Their Computation by Machine», publicado en Communications of the ACM. Hayes y Morgenstern dirían: «Muchos de los ejemplos utilizados en los libros de texto sobre Lisp proceden directamente de este artículo». Lo que lo hizo ser un documento muy importante. Sobre todo, y esto lo digo desde la experiencia propia, siempre es grato y fundamental leer al autor de un lenguaje (o de cualquier herramienta) explicar su creación. Nadie tendrá —aunque sea un experto en ello la capacidad de ver en todas las direcciones posibles, con sus múltiples ángulos y perspectivas, los entresijos que guarda.


Un breve tutorial sobre Lisp

En este apartado explicaré un poco el lenguaje Lisp, en particular, su dialecto más robusto (Common Lisp)30. Por tanto, no es la misma versión creada por McCarthy, aunque las ideas que subyacen a su origen, naturalmente, se mantienen.

Comenzaré con lo básico, el famoso «Hola, mundo»:

(format t “Hola, mundo”)

Aquí vemos que la sintaxis se construye con paréntesis, «( expresión )», técnicamente esta sintaxis se llama expresión-S (o sexp)31; el «format» sería el nombre de la función que invocar, la cual cuenta con dos argumentos, «t» es el valor que se refiere al tipo de salida (en este caso en la terminal) y el valor que imprimir en pantalla «Hola, mundo».

 

Por ejemplo, las operaciones aritméticas en esta sintaxis se representan visualmente de la siguiente manera. Supongamos que tenemos la operación: 5 * (1 + 2), en la notación expresión-S sería: (* 5 (+ 1 2)).


Figura 4. Representación visual de la sintaxis expresión-S, utilizada en Lisp.

En la figura 4 superior se puede ver cómo la computación se ejecuta desde los nodos inferiores hasta los superiores. Así, es posible detectar el operador que usar en una operación binaria (suma o multiplicación, pues solo requiere de dos valores) sin problema.

La función de Fibonacci se define matemáticamente de la siguiente manera:

F0 = 0,F1 = 1

Fn = Fn–1 + Fn–2

Y en Lisp, la implementación se podría definir con el siguiente código:

(defun fib (n)

“Retorna el enésimo número de Fibonacci.”

(if (< n 2)

n

(+ (fib (- n 1))

(fib (- n 2)))))

La palabra «defun» define una nueva función; luego «fib» es el nombre de la función a definir junto, entre paréntesis, sus argumentos, en este caso solo uno: n. Luego, lo interesante comienza con la expresión «if», pues, si n>2 (véase que en esta sintaxis el operador es una función, por ello comienza al principio, así y 2 son los argumentos), entonces retornará n, en cambio, si n>=2, se aplicará una suma de manera recursiva. Donde se invoca la función «fib» restando uno y otra restando dos (según la definición matemática de Fibonacci). La descripción o comentario de la función se define entre comillas «”», como se puede ver en el ejemplo.

Aunque pueda parecer a primera vista confusa, la sintaxis es, sin duda, una excelente manera para pensar de manera recursiva y compacta. Funcional, después de todo. Que difiere del paradigma imperativo. Pues obliga al programador a crear pequeños «bloques», compactos, donde la mutabilidad de las variables es reducida.

Para aprender un lenguaje moderno que hace uso de esta sintaxis, y que a su vez es de la familia de Lisp, le recomiendo aprender Racket32.