John von Neumann, el genio detrás del ordenador moderno
Nuestros ordenadores personales, smartphones y tablets pueden ejecutar cualquier programa que les instalemos. Prácticamente, cualquier dispositivo que tenemos hoy a nuestro alcance es, en el fondo, un ordenador de propósito general cuyo ámbito de uso o aplicación lo marca el software que está utilizando.
Este hecho, que para nosotros es algo cotidiano, no se daba en los primeros computadores que surgieron en los años 40 y 50. Computadoras como “la Bomba”, diseñada por Alan Turing para descifrar el código Enigma de Alemania, se diseñó expresamente con ese fin, para descifrar códigos. Es decir, estos primeros computadores tenían programas fijos e intentar cambiar esta función implicaba, prácticamente, tener que rediseñar por completo el sistema.
Si bien el ENIAC se diseñó como uno de los primeros computadores de “propósito general” -es decir que se podían programar y hacer que ejecutasen distintos programas-; la realidad es que por el conexionado de cables del ENIAC y, en la práctica, se empleaba mucho tiempo en programar el sistema para ejecutar nuevas rutinas.
En este contexto, un matemático de origen húngaro de nombre John von Neumann, apoyándose en los principios que marcó Alan Turing en la conocida como “máquina de Turing”, desarrolló la Arquitectura de von Neumann, un modelo de computador que propició un gran salto en el desarrollo de los primeros computadores y que, además, hoy aún sigue vigente (eso sí, con modificaciones que han elevado la complejidad del modelo).
Una mente brillante e inmigrante
John von Neumann nació bajo el nombre de Neumann János Lajos en Budapest en 1903. Hijo de un banquero judío, a los diez años de edad, John von Neumann fue considerado por sus profesores del colegio como superdotado y recomendaron a sus padres que complementaran su formación con clases particulares de matemáticas impartidas por profesores universitarios.
En 1921 accedió a la Universidad de Budapest y se doctoró en matemáticas en 1926, al mismo tiempo se matriculó en la Universidad de Berlín y asistió a clases impartidas por Albert Einstein junto a alumnos que luego se convertirían en figuras clave como, por ejemplo, Eugene Wigner (premio Nobel de física en 1963). También asistió a la Escuela Politécnica Federal de Zúrich, obteniendo el título de ingeniería química y conoció a Robert Oppenheimer en los seminarios que impartía el matemático alemán David Hilbert.
Gracias a su formación, la Universidad de Princeton de Estados Unidos le invitó como profesor visitante en 1929, una actividad que simultaneó con su puesto como profesor en la Universidad de Berlín. Sin embargo, en 1933, con el ascenso al poder del partido nazi, los profesores universitarios de origen judío quedaron expulsados de la comunidad docente así que von Neumann huyó a Estados Unidos y se estableció en la Universidad de Princeton como uno de los primeros profesores del Instituto de Estudios Avanzados junto a junto con Albert Einstein, Oswald Veblen, Hermann Weyl y James W. Alexander.
Al estallar la Segunda Guerra Mundial, von Neumann fue movilizado para participar en el Proyecto Manhattan, es decir, en el desarrollo de la bomba atómica. El matemático e ingeniero húngaro se encargó del desarrollo del sistema de explosivos de la implosión de la bomba (compresión del núcleo de plutonio) que se hizo explotar en Los Álamos como prueba (Trinity Test) y también en la bomba de Nagasaki. Además, fue responsable de la selección de objetivos potenciales y del cálculo de la altura a la que debían explotar las bombas para maximizar la destrucción que debían causar.
El proyecto Manhattan concentró a las mentes más brillantes de Estados Unidos: Neumann, Edward Teller, Leo Szilard, Eugene Wigner, Theodore von Kármán... Un polo de talento que, aunque tenían como misión trabajar en el desarrollo de la bomba nuclear, permitió dar un impulso a otras muchas disciplinas como las ciencias de la computación. Al buena parte del grupo de científicos del proyecto se les conocía como los “marcianos” porque, a los ojos de la mayoría, tanto talento no era algo natural en la Tierra y, de hecho, al propio von Neumann le acusaban, en broma, de proceder de otro planeta y ser un alienígena disfrazado de ser humano porque tanta brillantez era algo excepcional.
En 1944, Herman Goldstine, uno de los principales responsables del desarrollo del ENIAC, tuvo la oportunidad de cruzarse con von Neumann y hablar de su trabajo en el ámbito del cálculo automático. Goldstine siempre recordó su encuentro con el “maestro von Neumann” y cómo éste le escuchó y se interesó por su trabajo:
Tras la guerra, John von Neumann estuvo vinculado al programa atómico estadounidense, tanto a nivel científico como estratégico y formó parte de la Comisión de Energía Atómica del Gobierno de Estados Unidos. Dada su vinculación al programa nuclear y sus continuas estancias en Los Álamos y demás lugares de ensayos, la radiación fue la principal sospechosa de causar un cáncer de huesos o de páncreas -hay controversia sobre el origen primario- que sesgó su vida en 1957 (un año después de ser galardonado con el Premio Enrico Fermi por parte del presidente Eisenhower).
Además de su trabajo en el ámbito del programa atómico , John von Neumann trabajó en el campo de la mecánica cuántica y en el de la economía. von Neumann propuso el lenguaje de la teoría de juegos y la teoría del equilibrio general para la economía y, junto a Oskar Morgenstern, publicó en 1944 “Theory of Games and Economic Behavior”.
La arquitectura de von Neumann
En el ámbito de las ciencias de la computación, el trabajo de von Neumann supuso una gran palanca para el desarrollo de computadoras más complejas y avanzadas. Propuso la adopción del bit como unidad de medida de la memoria de las computadoras y, además, desarrolló el concepto de los “bits de paridad” para poder paliar la aparición de errores, por ejemplo, por culpa de componentes no fiables.
El nombre de von Neumann se asocia, fundamentalmente, a dos aspectos de su carrera: el Proyecto Manhattan y su contribución al desarrollo de la computación. Como bien recoge el libro La Catedral de Turing, von Neumann siempre consideró sus teorías sobre computación por encima del desarrollo de la bomba atómica o la estrategia de disuasión nuclear:
Compañías como IBM o Standard Oil e instituciones como el MIT o la Universidad de Yale se peleaban por tenerle entre sus filas. IBM necesitaba a von Neumann para desarrollar sistemas que se pudieran implantar en las empresas, Standard Oil le requería para realizar estudios analíticos para localizar nuevos yacimientos de petróleo. Sin embargo, su carrera se centró en el mundo de los computadores, en ese momento con fines militares -la simulación de explosiones o el cálculo de la trayectoria de misiles-, pero con la visión como para crear un modelo estándar que funcionase en cualquier ámbito o aplicación: separar el software del hardware, crear un modelo de computador universal.
John von Neumann es uno de los responsables de sentar los pilares sobre los que se apoyan los computadores actuales. En 1936, Alan Turing propuso la “máquina computadora universal” (conocida como “Máquina de Turing”), un computador que utilizaba una memoria para almacenar datos y también las instrucciones a ejecutar; un modelo teórico que también visualizaron J. Presper Eckert y John Mauchly en 1943 mientras trabajaban en el desarrollo del ENIAC.
En 1944, año en el que se empezó a esbozar el EDVAC como evolución del ENIAC, Eckert comenzó escribir en sus especificaciones que se usaría una memoria direccionable para almacenar tanto los datos como el programa a ejecutar. Dentro de su vinculación al Proyecto Manhattan, John von Neumann necesitaba realizar cálculos complejos y terminó vinculándose también al desarrollo del ENIAC y el EDVAC.
Dentro del grupo de trabajo del EDVAC, von Neumann se ofreció voluntario a redactar un primer esbozo que describiese el computador: “First Draft of a Report on the EDVAC”, de 30 de junio de 1945. Fue un documento que comenzó a circular dentro de la comunidad científica como si hubiese sido desarrollado únicamente por von Neumann (obviando a Eckert y Mauchly) y del que salió el concepto de “arquitectura de von Neumann”.
¿Y en qué consiste la arquitectura de von Neumann? Según el modelo de von Neumann, los distintos bloques funcionales que conforman una computadora deben estar siempre conectados entre sí; dicho de otra forma, no hay que modificar el hardware o su configuración a la hora de ejecutar un programa. Con esta idea de partida, la arquitectura constaba de los siguientes bloques funcionales:
- Unidad central de proceso (CPU), núcleo central del computador y encargado de realizar las operaciones básicas y de gestionar el funcionamiento del resto de componentes.
- Memoria principal, lugar en el que se almacenan tanto datos como instrucciones.
- Buses, es decir, el conexionado que permite la comunicación entre los distintos bloques funcionales del sistema.
- Periféricos, los elementos que se encargan de tomar datos (teclado), mostrarlos en alguna salida (un monitor) o comunicarse con otros sistemas.
Si lo pensamos un momento, todos los bloques funcionales que forman la arquitectura de von Neumann nos sonarán familiares: la CPU como el procesador de nuestro PC, la memoria principal como la memoria RAM y los periféricos como nuestro monitor o nuestro teclado.
La CPU, a su vez, está formada por dos bloques: la unidad de control y la ALU (unidad aritmético-lógica). La unidad de control es la encargada de leer las instrucciones que hay en la memoria (es decir, el programa a ejecutar) y se encarga de enviar las órdenes a los componentes del procesador para así ejecutar las instrucciones que marca el programa (decodificando las instrucciones y enviando las órdenes necesarias al resto de componentes del procesador). Para realizar esta función, la unidad de control cuenta con un “contador de programa” que, secuencialmente, recorre las distintas posiciones de memoria y va recopilando los datos e instrucciones. Por otro lado, la unidad aritmético-lógica (ALU) es la responsable de realizar operaciones aritméticas (sumas, restas...) y lógicas (NOT, AND, OR, XOR...) con los datos recibidos.
Gracias a este esquema que se implementó en el EDVAC, el programa a ejecutar se podía almacenar en memoria y, por tanto, no había que modificar conexiones en el sistema (a diferencia de lo que ocurría en el ENIAC). En una primera fase, el EDVAC disponía de una unidad de cinta magnética como entrada pero, posteriormente, se le añadió un sistema de tarjetas perforadas como dispositivo de entrada. Además, otra de las peculiaridades del EDVAC es que trabajaba con datos en binario, es decir, datos codificados en bits, tal y como había establecido von Neumann.
Su impacto en el ámbito de la computación
El modelo de von Neumann ha sufrido distintos ajustes y modificaciones a lo largo del tiempo; sin embargo, su esencia se mantiene y es un modelo de referencia que estudian los ingenieros de todo el mundo en sus primeros años de estudios.
Gracias a la arquitectura de von Neumann, además del desarrollo del EDVAC, se pudieron desarrollar computadoras como la Manchester Mark I (en cuyo equipo de desarrollo estuvo Alan Turing y que se convirtió en una de las primeras máquinas en usar memoria RAM para demostrar las ventajas del uso de programas almacenados en memoria), el IAS de Princeton, el UNIVAC 1101 o la Whirlwind del MIT.
En 1951, el MANIAC I era capaz de trabajar durante 60 días seguidos haciendo cálculos; una gran simulación que se desarrolló para obtener las condiciones óptimas de detonación de una bomba de hidrógeno. El objetivo estaba vinculado a la tensión de la “Guerra Fría”; sin embargo, el MANIAC era mucho más que eso.
El MANIAC I, que se basaba en la arquitectura de von Neumann, fue la primera computadora capaz de calcular una previsión meteorológica de un día en menos de 24 horas (hasta ese momento el pronóstico del día siguiente requería más de 1 día de cálculos y eso, evidentemente, no servía para nada) y, cuando no estaba haciendo cálculos de índole militar, el matemático Nils Aall Barricelli realizaba cálculos para demostrar que las mutaciones aleatorias eran suficientes para que se produjese la evolución de una especie.
Alan Turing y John von Neumann sentaron los cimientos de la explosión que se viviría alredor de la computación y que, hoy mismo, seguimos viviendo.
Von Neumann y los “replicantes”
Aunque von Neumann es conocido por su arquitectura, hay otra faceta de su trabajo relacionada con el mundo de la robótica y el concepto de “replicante”. Conocida como Máquina de von Neumann, este concepto teórico dibujaba la posibilidad de crear máquinas que fuesen capaces de autoreplicarse; unas máquinas que pudieran recoger materias primas de su entorno y, además de recopilarlas para su utilización (por ejemplo, en el ámbito de la minería), pudieran ser procesadas por las propias máquinas para construir réplicas de sí mismas.
El concepto, que tiene cierta similitud a los “replicantes” de la serie de ciencia-ficción Stargate SG-1, estaba pensado para trabajos repetitivos como, por ejemplo, la extracción de mineral y se apoyaba en la replicación para que, de manera indefinida y exponencial, se pudiese aumentar el rendimiento de explotación gracias a la escalabilidad horizontal de la maquinaria (crecen las máquinas y, cada una, se va replicando).
Las máquinas de von Neumann estaban definidas en base a 8 componentes básicos y cuatro elementos lógicos que, además, no violaban ninguna ley física. Por tanto, la teoría de von Neumann está apoyada en principios que podrían ser viables.
Tanto es así, que pasados los años, conocemos estructuras que son capaces de replicarse de manera autónoma. Los virus, por ejemplo, son capaces de replicarse y extenderse de ordenador en ordenador y, además, en el ámbito de la impresión 3D, proyectos como RepRap parten de la base de la auto-replicación para construir la propia impresora.
Imágenes: Haverford College, Universidad de Frankfurt y Wikipedia