El desastre de la Mariner 1
Enviar un vehículo al espacio por el procedimiento de sujetarlo a un proyectil descomunal impulsado por explosiones controladas no es precisamente tarea fácil. Un solo error a menudo es la diferencia entre el éxito y el desastre total. Para la sonda Mariner 1, ese error fue el símbolo “¯”.
Corría el año 1962. La NASA se preparaba para lanzar al espacio la misión Mariner 1. Iba a ser la primera vez que el ser humano lograba enviar una sonda no tripulada a dar la vuelta alrededor de otro planeta, y el elegido para ese honor era Venus.
El objetivo de la Mariner 1 era circunnavegar Venus y recabar datos sobre su temperatura y la composición de su atmósfera, pero la sonda nunca llegó a abandonar la atmósfera terrestre. Apenas cinco minutos después de su lanzamiento, el centro de control de Cabo Cañaveral emitió una orden de autodestrucción que hizo trizas el cohete y la sonda que viajaba en él. Seis semanas más tarde, la NASA lograba hacer realidad la misión con la sonda Mariner 2.
¿Qué ocurrió con el cohete Atlas Agena que llevaba la Mariner? El escritor de ciencia ficción Arthur C. Clarke lo definió como el guión más caro de la historia, pero en realidad no era un guión, sino un guión alto o superguión. El programador que transcribió el código que regía uno de los sistemas de navegación se comió este símbolo.
El código del programa de control del cohete estaba escrito en FORTRAN,el primer lenguaje de programación del alto nivel que se creó y el más usado en aquella época.
FORTRAN, como todos los lenguajes de alto nivel, tiene una sentencia de bucle “para” o for, que siervo para indicar que una serie de instrucciones se han de repetir una serie de veces. En concreto en FORTRAN la sentencia para tiene la siguiente sintaxis:
do 10 i = 1, 8
CÓDIGO A REPETIR
10 continue
Hay que tener en cuenta otra característica de FORTRAN que es un poco diferente a otros lenguajes y es el tratamiento de hace de los espacios en blanco. Este lenguaje simplemente los ignora, los omite como si no existieran (similar a lo que ocurre en C o Java con los saltos de línea).
También hay que considerar que en el FORTRAN de la época no hcía falta inicializar una variable antes de utilizarla, sino que une implemente la primera vez que se usaba se consideraba declarada.
Pues bien, dicho todo esto, veamos la sentencia derribacohetes, Es esta:
DO 5 K = 1. 3
cuando se debería haber escrito
DO 5 K = 1,3
para repetir 3 veces las siguientes instrucciones.
Como se puede ver, el programador cometió un error, cambio inadvertidamente el carácter “,” por un “.” Esto unido a la peculiaridad de FORTRAN de que ignorar los espacios en blanco hizo que la entendía anterior se convirtiera en:
DO5K = 1.3
Exacto, una asignación del valor 1.3 a una variable llamada DO5K. Estas líneas indican que se repita 8 veces el “Código a repetir”, que está situado entre el “do” y la etiqueta “10″
Puede parecer un cambio mínimo, pero ese superguión determinaba la diferencia entre leer la velocidad promedio del cohete, o suministrar a los sistemas de navegación datos no ponderados. Armado con esta información errónea, el sistema de navegación del Atlas Agena trató de compensar unos valores erráticos que en realidad no existían y el cohete comenzó a dar bandazos y a desviarse de su rumbo. 294,5 segundos después del despegue, y solo seis antes de que Cabo Cañaveral perdiera el control por completo, se tomó la decisión de destruir el cohete y su carga por miedo a que pudieran caer sobre zonas habitadas.
En realidad, el sistema de navegación autónomo del Atlas Agena no debería haber tenido que tomar el control. Si lo hizo fue debido a un error previo en la antena que hizo imposible determinar la velocidad desde Tierra. Sea como fuere, tampoco se puede culpar del todo a los programadores. En aquellos tiempos no había sistemas de detección de errores. El código escrito en Fortran se transcribía manualmente a binario mediante tarjetas perforadas. La ausencia del carácter hizo a la NASA perder 18,5 millones de dólares de la época, una cifra que aplicando la inflación de hoy ronda los 150 millones.