Uno, cero, cero, cero, uno, cero, uno, uno. Cero, uno, uno... Ese es el lenguaje de las computadoras. Cada cosa inteligente que tu computadora hace -una llamada, una búsqueda, un juego- se reduce a unos y ceros, ¿cierto? Pues no precisamente. Más bien se reduce a la presencia o ausencia de corriente en los diminutos transistores de un chip semiconductor. El 0 o el 1 sólo denotan si hay o no corriente.
Por suerte, no tenemos que programar las computadoras con ceros y unos... ¡imaginate cuán difícil sería! Microsoft Windows, por ejemplo, necesitaría 20 gigabytes de espacio en el disco, o 170.00 millones de unos y ceros. Si los imprimieras, la resma de papel A4 tendría 4 kilómetros de altura. Si tuvieras que usar la información de esas páginas para ajustar cada transmisor manualmente y te tomara un segundo por interruptor, tardarías 5000 años en instalar Windows.
Computadora manual
Las primeras computadoras tenían que ser programadas así. Pensá en la Automatic Sequence Controlled Calculator, después conocida como Harvard Mark 1. Era una concatenación de 15 metros de largo y 2,5 metros de alto de ruedas, varas, engranajes e interruptores. Usaba más de 850.000 kilómetros de cable. Seguía las instrucciones de un rollo de cinta de papel perforado, como un piano de juguete.
Si querías que resolviera una nueva ecuación, tenías que calcular cuáles interruptores debían estar prendidos o apagados, cuáles cables debían estar conectados a qué. Luego tenías que accionar todos los interruptores, conectar todos los cables y hacer todos los huecos en el papel. Programar no sólo era un desafío que ponía a prueba la mente de los genios matemáticos, también era una labor manual tediosa, repetitiva y proclive al error.
Durante las décadas que le siguieron a Harvard Mark 1, máquinas más compactas y fáciles de usar, comoCommodore 64, fueron llegando a escuelas. Si tenés cierta edad, quizás recordás cuán milagrosos parecían tus primeros encuentros con una computadora.
Y si te preguntás cómo han progresado tanto desde Mark 1, una de las razones ciertamente es el cada vez más diminuto tamaño de sus componentes. Pero también es impensable que las computadoras puedan hacer lo que hacen si los programadores no pudieran escribir software, como Windows, en un lenguaje parecido al humano. Ese después se traduce en unos y ceros, corrientes y no corrientes, que al final hacen el trabajo.
Lo que empezó a hacerlo posible se llama el compilador. Y la historia del compilador empieza con una mujer llamada Grace Hopper.
Armada y femenina
Hoy en día se discute mucho sobre cómo hacer que más mujeres hagan carrera en tecnología. En 1906, cuando Grace Hopper nació en Nueva York, Estados Unidos, a pocos les preocupaba la igualdad de género en el mercado de trabajo.
Afortunadamente para ella, entre esos pocos estaba su padre, un ejecutivo de seguros de vida quien no entendía por qué sus hijas debían recibir menos educación que su hijo. Grace Hopper fue a un buen colegio y resultó que era brillante en matemáticas.
Aunque soñaba con alistarse en la Armada como su abuelo, en ese tiempo no recibían mujeres, así que se resignó a ser una profesora. Pero en 1941, cuando el ataque a Pearl Harbour arrastró a Estados Unidos a la Segunda Guerra Mundial, el talento femenino también fue llamado a luchar, y la Armada empezó a aceptar mujeres. Grace se alistó inmediatamente.
Una matemática a bordo
Si te estás preguntando de qué le sirve a la Armada una matemática, pensá en que tenés que apuntar un misil: ¿en qué ángulo y dirección lo debes lanzar? La respuesta depende de muchas cosas: cuán lejano está el blanco; cuál es la temperatura, la humedad, la velocidad y la dirección del viento.
Los cálculos no son complejos, pero toman un tiempo precioso si los hace una "computadora" humana: alguien con lápiz y papel. ¿Quizás había una forma más rápida?
A la Armada le intrigaba el potencial de ese artilugio que recientemente había hecho un profesor de Harvard, Howard Aiken. Se trataba de Mark 1 y como ahora contaban con una lugarteniente matemática, la enviaron a que trabajara con Aiken a ver qué podían hacer.
La polilla que hizo historia
A Aiken no le cayó muy en gracia que le mandaran a una mujer a unirse a su equipo, pero poco después Hopper lo había impresionado tanto que le pidió que escribiera el manual de operaciones. Saber qué debería decir ese manual implicaba mucha experimentación.
La mayoría de las veces, Mark 1 se detenía después de apenas empezar, Y no había un mensaje de error amable, como ocurre ahora. Una vez fue porque una polilla se había metido en la máquina... y tal parece que de ahí viene el término "debugging", que es como se dice "depurar programas" en inglés, pues la polilla es un bicho y bicho se dice "bug" en inglés (aunque hay quienes aseguran que el término ya existía).
Pero generalmente, ese bug era metafórico: un interruptor mal accionado, un hueco que no debería estar en el papel... Para hallarlos se precisaba de una labor de detective ardua y monótona.
Hopper y sus colegas empezaron a llenar libretas con trozos de código comprobado y reutilizable. Para 1951, las computadoras habían avanzado lo suficiente para guardar esos trozos -llamados "subrutinas"- en sus propios sistemas de memoria. Había nacido el compilador, la herramienta que transforma instrucciones comprensibles para un programador humano en código de máquina (unos y ceros).
¿Pereza o sentido común?
Para entonces, Hopper trabajaba para una compañía llamada Remington Rand. Allá trató de convencer a su jefe de que permitiera que los programadores nombraran esas subrutinas con palabras familiares, es decir, cosas como "sustraer impuestos del salario" en vez de -como explicó Hopper- "tratar de escribir eso en código octal o usando todo tipo de símbolos".
Y dijo: "Nadie lo había pensado antes porque no eran tan perezosos como yo" . Eso no era cierto: Hopper era conocida por trabajar duro.
Pero no todo era ganancia: la idea del compilador involucraba una contrapartida. Hacía que la programación fuera más rápida, pero los programas resultantes funcionaban más lentamente.
Por eso Remington Rand la rechazó. Cada cliente tenía sus propios requerimientos para su flamante máquina computadora, así que tenía sentido que los expertos de la compañía las programaran para que fueran lo más eficientes posible.
Resuelto en un día
Hopper no se desanimó: sencillamente escribió su primer compilador en su tiempo libre. Y a otros les fascinó, pues les ayudaba a pensar con más claridad. Uno de ellos fue un cliente llamado Carl Hammer, un ingeniero quien lo usó para resolver una ecuación con la que sus colegas habían estado lidiando durante meses: Hammer escribió 20 líneas de código y la resolvió en un día.
Programadores afines de todo EE.UU. empezaron a mandarle nuevos trozos de código a Hopper, quien los iba guardando en la memoria hasta la próxima publicación. En efecto, Hopper estaba creando el software de código abierto.
Su compilador se convirtió en uno de los primeros lenguajes de programación, COBOL; y, fundamentalmente, abrió el camino a la distinción ahora conocida entre hardware y software. Con máquinas como Harvard Mark 1, el software era el hardware: ninguno de sus patrones de interruptores funcionaría en otra máquina que estuviera conectada de forma distinta.
Pero si una computadora tiene un compilador, puede ejecutar cualquier programa que lo use. Desde entonces, más y más capas de abstracción han separado a los programadores humanos de los chips físicos.
Y cada una de esas capas ha sido un paso más en la dirección en la que Grace Hopper demostró que era más sensata: liberar el poder intelectual del programador para que piense en algoritmos y conceptos, no en interruptores y cables.
Para Hopper, sus colegas inicialmente se resistieron no porque querían que los programas funcionaran más rápido, sino porque disfrutaban del prestigio que les daba ser los únicos que podían comunicarse con la casi divina computadora en representación de los meros mortales que se limitaban a comprarla.
"Los sumos sacerdotes", los denominaba la matemática. que murió en 2002. Hopper pensaba que cualquier persona debería poder programar. Ahora, cualquiera puede. Y las computadoras son mucho más útiles gracias a ello.