Articles

¿Cómo hemos llegado hasta aquí? La historia de los algoritmos.

Hasta hace poco, los algoritmos eran un dominio de los informáticos. Pero ahora, han entrado en nuestras vidas y se están volviendo omnipresentes. Algoritmo ya no es una palabra extraña. El comercio algorítmico, el sesgo algorítmico, el algoritmo de Facebook, incluso la guerra algorítmica: todos estos términos han pasado a formar parte de nuestro vocabulario en los últimos años. Algunos llegan a afirmar que vivimos en una nueva era: la era del algoritmo. Pero los algoritmos no son tan nuevos. Los hemos utilizado, a sabiendas o no, durante cientos y miles de años. Los algoritmos no son más que descripciones específicas de acciones paso a paso que deben ocurrir para lograr un resultado concreto. Son uno de los instrumentos más comunes para compartir conocimientos.

Prácticamente, cualquier proceso de enseñar a alguien a hacer algo utiliza algoritmos.

Sin embargo, algunos aspectos de los algoritmos han cambiado en las últimas décadas. En particular, la introducción de los ordenadores significa que muchos algoritmos actuales son mucho más complejos de lo que podríamos haber imaginado en el pasado. ¿Cómo han evolucionado los algoritmos para ser hoy mucho más sofisticados que en el pasado? Echemos un breve vistazo a su historia.

Los algoritmos que guían las acciones humanas

Sello emitido el 6 de septiembre de 1983, en la Unión Soviética, en conmemoración del (aproximado) 1200 aniversario de al-Khwārizmī; vía Wikimedia Commons

El término algoritmo deriva del nombre de Muhammad ibn Mūsā al’Khwārizmī, un matemático persa del siglo IX. Su nombre latinizado, Algoritmi, significaba «el sistema numérico decimal» y se utilizó en este sentido durante siglos. La noción moderna de algoritmo surgió en inglés en el siglo XIX, y se hizo más común su uso a partir de la década de 1950, provocada por la aparición de los primeros ordenadores disponibles comercialmente.

Sin embargo, mucho antes de que los algoritmos recibieran su nombre moderno, ya se creaban y utilizaban comúnmente.

Los primeros algoritmos se plasmaron en papel en la antigua Grecia. Eruditos como Nicomachus de Gerasa o Euclides creaban entonces los bloques de construcción de las matemáticas modernas. Para facilitar la comprensión y aplicabilidad de sus ideas, expresaron muchas de ellas como acciones paso a paso.

Nicómaco de Gerasa introdujo la Criba de Eratóstenes. El tamiz es utilizado hasta hoy por los estudiantes que aprenden a escribir código informático eficiente. Ayudó a simplificar el proceso de identificación de los números primos. Los números primos son números naturales, mayores que uno, que no pueden formarse multiplicando dos números naturales menores. Por ejemplo, el cuatro no es un número primo porque puede formarse multiplicando dos por dos. El cinco, por el contrario, es un número primo porque ningún número natural menor que el cinco puede multiplicarse para formar el cinco. Aunque no es demasiado difícil identificar los primeros números primos (por ejemplo, 2, 3, 5, 7, 11, 13, 17, 19, 23 y 29), encontrar números primos grandes lleva mucho tiempo. Y los números primos grandes son esenciales en criptografía. La criba de Eratóstenes da instrucciones paso a paso para eliminar rápidamente todos los números no primos de un conjunto definido de números (por ejemplo, entre 1 y 10.000) hasta que sólo queden números primos. En la actualidad, existen numerosos algoritmos que simplifican la tarea de identificar dichos números. La Criba de Eratóstenes inició toda una familia de algoritmos que tienen el mismo objetivo y son cada vez mejores (más rápidos, o que requieren menos pasos) para detectar los números primos.

La Criba de Eratóstenes por SKopp en la Wikipedia alemana

Euclides, el otro erudito mencionado anteriormente, mucho más conocido que Nicómaco en estos días, introdujo un algoritmo para identificar el máximo común divisor de dos números. De nuevo, no siempre es una tarea fácil, pero es esencial en muchas situaciones. El algoritmo de Euclides contribuyó a facilitar este cálculo. ¿Por qué es útil el algoritmo de Euclides? Imagina que tienes una habitación con el tamaño exacto de 612 por 2006 centímetros que necesita un nuevo suelo. El algoritmo de Euclides te ayudará a encontrar el tamaño de las baldosas cuadradas más grandes que cubrirían limpiamente el suelo. La respuesta, dada por el algoritmo, es de 34 cm por 34 cm, lo que da como resultado una distribución de 18 por 59 baldosas. Por supuesto, todos los alicatadores te dirán que la respuesta es incorrecta y que no tienes ni idea de lo que estás haciendo porque el algoritmo no tiene en cuenta el ancho de la lechada y no deja espacio para ello. No temas: esto también puede calcularse y expresarse limpiamente como un algoritmo.

Los algoritmos que guían las acciones de las máquinas

Durante los varios cientos de años que siguieron, se crearon muchos más algoritmos y se plasmaron en papel. Luego fueron utilizados por los individuos y seguidos paso a paso. El primer algoritmo destinado a ser ejecutado en una máquina fue creado por Ada Lovelace (de soltera Byron) y publicado en 1843.

Ada Byron, de cuatro años. Pronto se convertirá en la primera programadora informática del mundo. Por el artista Alfred, Comte d’Orsay. Imagen digital; Somerville College, Oxford – Somerville College, Oxford, Public Domain, https://commons.wikimedia.org/w/index.php?curid=44246375

Ada era un personaje intrigante. Nació en 1815 como única hija legítima del poeta Lord Byron. Desarrolló grandes dotes para las matemáticas. Y como el amor por la poesía estaba claramente en sus genes, de alguna manera se las arregló para desarrollar y equilibrar el amor por la ciencia y la poesía. Ada describió su mentalidad como «ciencia poética». Como hábil matemática, llegó a conocer a Charles Babbage, al que a menudo se le llama «el padre de los ordenadores», gracias a sus inventos. Ambos desarrollaron una relación de trabajo y amistad. Ada estaba muy interesada en uno de los diseños de Charles: la Máquina Analítica.

Un diagrama para la Máquina Analítica. Por ArnoldReinhold – Obra propia, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=69497631

La Máquina Analítica era un ordenador mecánico, una máquina que automatizaba los cálculos. Fue la Máquina Analítica para la que escribió el primer algoritmo. Su trabajo consistió en una fórmula que mostraba cómo configurar la máquina para calcular una determinada secuencia compleja de números, llamados números de Bernoulli. La fórmula es ahora ampliamente reconocida como el primer algoritmo informático de la historia.

Ada no se limitó a realizar cálculos puramente matemáticos. Dado que vivió en el siglo XIX, fue una verdadera visionaria.

Mientras que muchos de sus contemporáneos consideraban que los primeros ordenadores mecánicos eran sobre todo máquinas para hacer números, ella se preguntaba qué había más allá de los cálculos. Sentía curiosidad por el potencial más amplio de los ordenadores mecánicos como herramientas de colaboración. Esperaba ver ordenadores que potenciaran a los seres humanos mucho más que mediante la automatización de los cálculos.

Diagrama de Lovelace de la «nota G», el primer algoritmo informático publicado, por Ada Lovelace – http://www.sophiararebooks.com/pictures/3544a.jpg, Dominio público, https://commons.wikimedia.org/w/index.php?curid=37285970

Desgraciadamente, la construcción de la Máquina Analítica no se completó antes de la muerte de Ada, por lo que nunca pudo ver su algoritmo en acción. Lamentablemente, la Máquina Analítica no ha sido construida hasta el día de hoy. Otro diseño de Charles Babbage, la Máquina Diferencial №2, no fue construida por el Museo de Ciencias de Londres hasta 1991. Se demostró que era funcional, utilizando materiales y tecnologías disponibles para Charles Babbage. Parece que Babbage no tuvo suerte a la hora de conseguir construir sus diseños. Existen otras implementaciones parciales del trabajo de Charles en otros lugares, pero, por desgracia, no podemos ejecutar el algoritmo de Ada Byron en una máquina analítica real.

El siglo XIX se convirtió en una era de «algoritmos incrustados en máquinas».

Hubo muchos de ellos, que automatizaban todo tipo de acciones humanas. Si se necesitaba un patrón intrincado en una pieza de tela, Joseph Marie Jacquard, un tejedor y comerciante francés, tenía una solución para usted: el telar Jacquard. Permitió a los fabricantes de telas producir sofisticados patrones utilizando una serie de tarjetas perforadas que daban instrucciones al telar sobre cómo tejer. De forma similar, las primeras centrales telefónicas utilizaban sofisticados dispositivos mecánicos para conectar las llamadas telefónicas. Seguían automáticamente las instrucciones paso a paso para que, en última instancia, dos personas hablaran entre sí. Estas máquinas, ya sean telares o centrales, fueron pioneras en su época y siguen siendo impresionantes hasta hoy. Es difícil no admirar los niveles de complejidad de algunas de estas máquinas. Sin embargo, todos estos dispositivos seguían siendo puramente mecánicos. Estaban hechos de palancas, interruptores y ejes. Hacían mucho ruido. Y estaban muy lejos de lo que hoy llamamos ordenadores.

Los algoritmos en los ordenadores de propósito general

No fue hasta la década de 1930 cuando vimos las primeras menciones a los algoritmos en los ordenadores electrónicos (no mecánicos). Alan Turing fue uno de los primeros científicos que plasmó formalmente cómo los individuos realizaban los cálculos. El objetivo de Turing era capturar un proceso general, en lugar de uno específico para una tarea concreta, como la identificación de números primos o el cálculo del máximo común divisor. El proceso general podría entonces utilizarse para realizar tareas específicas. El trabajo conceptual de Turing condujo al desarrollo de lo que hoy se conoce como la máquina de Turing. La máquina de Turing, a su vez, condujo a la aparición de los ordenadores de propósito general. El prefijo de propósito general es esencial aquí. A diferencia de las máquinas anteriores, los nuevos ordenadores ejecutaban conjuntos arbitrarios de instrucciones. Podían utilizarse para fines no previstos por sus creadores. En otras palabras: El trabajo de Turing condujo al desarrollo de ordenadores en los que podemos instalar y ejecutar aplicaciones.

No hay Flappy Bird en tu smartphone sin el concepto de máquina de Turing.

Décadas después, los algoritmos se han vuelto extremadamente sofisticados. Tan sofisticados, de hecho, que a menudo nos resulta imposible explicar cómo funcionan. En el siglo XX, muchos preferían pensar en los algoritmos informáticos como cajas negras. No había que entender cómo funcionaban exactamente. Lo único que importaba eran las entradas -lo que entraba en la caja negra- y las salidas -lo que salía-. Esta simplificación fue una elección. En el siglo XXI, para algunos algoritmos esto ya no es una opción: los humanos no pueden explicar exactamente cómo los algoritmos alcanzan determinados resultados, por lo que nos vemos obligados a pensar en estos algoritmos como cajas negras, o quizás mágicas. Un grupo de estos algoritmos son algunos de los de la inteligencia artificial. Podemos explicar sus principios. Por ejemplo, podemos decir que un algoritmo utiliza una red neuronal artificial. También podemos explicar cómo se creó la red y cómo la entrada dio lugar a una salida determinada. Lo que no podemos explicar, sin embargo, es por qué ese resultado concreto fue la salida del algoritmo, más allá de una explicación puramente mecánica. Eric L. Loomis, cuya duración del encarcelamiento dependía de un algoritmo, trató de entender por qué el algoritmo COMPAS lo evaluó como un criminal de alto riesgo. Era sencillamente imposible. La sofisticación de los algoritmos es a menudo abrumadora. Y esto es sólo el principio.

Vivimos en un mundo en el que los algoritmos están por todas partes, no sólo en papel o en nuestras mentes, sino controlando máquinas, ordenadores y robots.

Son pequeños, omnipresentes y -al menos en algunos casos- inexplicables.

Una definición más formal de un algoritmo es «una especificación inequívoca de cómo resolver una clase de problemas» o «un conjunto autocontenido de operaciones a realizar paso a paso»

www.oed.com/view/Entry/4959

A fecha de octubre de 2018, el mayor número primo conocido es 277.232.917- 1, un número con 23.249.425 dígitos. Solo para comprobar si este único número es primo se necesitaron seis días de computación ininterrumpida en un ordenador doméstico contemporáneo. (https://www.mersenne.org/primes/press/M77232917.html)