Hoy en día los programadores cuentan con innumerables recursos a la hora de desarrollar sus creaciones: "picar código" es complejo, pero al menos es relativamente cómodo gracias a los modernos entornos de desarrollo integrado (IDE) que facilitan la programación en todo tipo de lenguajes. No solo eso: programar es virtualmente gratis, y cualquier PC relativamente modesto -o incluso una Raspberry Pi de 35 dólares- puede servir para ello.
Hace medio siglo las cosas eran muy distintas, y quienes se dedicaban a programar lo hacían con obstáculos importantes. No había ordenadores personales, el acceso a los mainframes y servidores era solo para privilegiados y ni siquiera había monitores en los que ir viendo cómo programabas. Todo era mucho más artesanal e incómodo, y las tarjetas perforadas son el legado de una época que demuestra que cualquier tiempo pasado no siempre fue mejor.
¿Quién necesita una pantalla cuando puede tener tarjetas perforadas?
Lo explicaba en un hilo de Twitter Foone, un coleccionista e historiador tecnológico que relataba cómo se las gastaban los programadores en 1962. Para empezar esos programadores tenían una imagen muy distinta a los jóvenes que hoy en día crean empresas gigantes de la nada con chanclas en su dormitorio de la universidad o en un garaje.
Esos programadores solían ser ya adultos que además vestían con chaqueta y corbata: las formas eran otras porque para acceder a este mundo uno tenía que trabajar para las grandes empresas, las únicas en las que se podía tener acceso a algún mainframe de la época.
El ejemplo que ponía este historiador tecnológico era el del IBM 7090, uno de los primeros ordenadores basados en transistores y no en tubos de vacío, como su predecesora, la IBM 709. Aquello fue una revolución en potencia, porque se multiplicaba por seis el rendimiento de la anterior y la IBM 7090 lograba ejecutar 100.000 operaciones de coma flotante por segundo.
Pero como decíamos, para programar esa computadora no había una interfaz como la actual: no escribías viendo el código en pantalla. Tampoco eran sistemas multiusuario ni multiproceso, así que solo una persona podía usar "toda" esa potencia cada vez. Eso convertía estas máquinas en bienes muy preciados y muy caros que de hecho IBM alquilaba.
En 1962 alquilar durante un mes una de estas computadoras costaba 63.500 dólares, que con la inflación equivaldrían a 421.000 dólares en la actualidad. Si hacemos una división simple (un mes tiene unos 44.000 minutos), cada minuto de uso de ese ordenador saldría por unos 10 dólares actuales. En un par de horas uno se había gastado lo mismo que hoy cuesta un buen PC o portátil, por ejemplo.
Eso imponía claras restricciones a la hora de usar estas máquinas, porque el tiempo era oro en ellas. Ahí es donde entraban en juego las tarjetas perforadas, que tenían una capacidad de 80 caracteres cada una, el tamaño máximo de una línea, aunque curiosamente lo normal era usar únicamente los primeros 72 caracteres y no pasar de ahí.
Para perforar las tarjetas se usaba una máquina especial, que por ejemplo fabricaba la propia IBM y que podían ser mecánicas o, si eran más modernas, electromecánicas.
La idea era sencilla: los caracteres que alguien escribía en esa máquina se "traducían" en la tarjeta perforada, donde se hacían las perforaciones de acuerdo a los caracteres de cada línea.
Para programar uno no se sentaba en esa máquina electromecánica y comenzaba a escribir comandos sin parar. En lugar de eso el programa se escribía a mano o a máquina. IBM tenía preparadas plantillas que permitían no despistarse y que uno no se pasara de caracteres por línea.
Espera, que tardo un rato en ejecutar tu programa
Eso hacía que un programa con todas sus líneas acabara ocupando una pila o mazo de tarjetas perforadas en las que estaban todas las instrucciones del programa, que además debían estar ordenadas perfectamente en la secuencia adecuada.
Ese mazo de tarjetas perforadas se entregaba a los operadores de la computadora, que las introducían junto a una tarjeta de control de tareas que le indicaba al sistema cómo y durante cuánto tiempo se tenía que ejecutar, por ejemplo. Otros programas podían estar en cola de ejecución (recordemos, era un trabajo cada vez, y otros programadores usaban también el mismo sistema), así que aquello no era llegar y ejecutar sin más.
Ese programa podía tardar bastante tiempo en completar su ejecución, de modo que el programador no se quedaba esperando a que saliera el resultado, sino que el operador dejaba tanto el mazo como el resultado impreso en un pequeño cubículo al que luego el programador podía acceder para recogerlo.
El problema, claro, es que el programa podía estar mal, no funcionar o dar una salida no esperada. En ese caso había que detectar el error, corregir la tarjeta o tarjetas perforadas que provocaban el error y volver a ejecutar el programa.
Hubo avances llamativos en aquella época como el de poder convertir tarjetas perforadas en programas almacenados en cintas magnéticas de cassete, algo que hacía más rápida la lectura de esas tarjetas peforadas.
Tarjetas perforadas en la NASA... y en el cálculo de decimales de π
Ese era básicamente el proceso que seguían los programadores en su día a día, que solían utilizar FORTRAN o COBOL en sus programas. Esas máquinas fueron utilizadas por ejemplo para el desarrollo de proyectos como el CTSS (Compatible Time-Sharing System), uno de los primeros sistemas operativos que fue programado por el Centro de Computación del MIT.
También fueron usadas por la NASA para las misiones espaciales Mercury y Gemini, y de hecho también se usó una IBM 7904 para poder ejecutar el software de planificación de vuelo en las misiones Apolo, porque aún no se había programado para los nuevos System/360 que se habían adquirido para la NASA.
Hubo también aplicaciones más curiosas que aún hoy se siguen explorando: en 1962 los matemáticos Daniel Shanks y John Wrench fueron pioneros a la hora de usar estas computadoras para cálculos matemáticos y calcularon los primeros 100.000 decimales de π. Un año antes otro matemático, Alexander Hurwitz, usó una IBM 7090 para descubrir los dos números primos más grandes de la época, que tenían 1.281 y 1.332 dígitos.