En Boston, su intención inicial era matricularse en estudios de posgrado en matemáticas abstractas en Brandeis. Sin embargo, en el verano de 1959, Hamilton comenzó a trabajar para Edward Norton Lorenz, en el departamento de meteorología del MIT. Desarrolló software para predecir el tiempo, programando en el LGP-30 y en los ordenadores PDP-1 del Proyecto MAC de Marvin Minsky. Su trabajo contribuyó a las publicaciones de Lorenz sobre la teoría del caos. En aquella época, las ciencias de la computación y la ingeniería del software aún no eran disciplinas establecidas; en su lugar, los programadores aprendían en el trabajo con experiencia práctica. Se trasladó a otro proyecto en el verano de 1961, y contrató y formó a Ellen Fetter como su sustituta.
Proyecto SAGEEditar
De 1961 a 1963, Hamilton trabajó en el Proyecto de Entorno Terrestre Semiautomático (SAGE) en el Laboratorio Lincoln del MIT, donde fue una de las programadoras que escribió el software para el prototipo de ordenador AN/FSQ-7 (el XD-1), utilizado por las Fuerzas Aéreas de EE.UU. para la búsqueda de posibles aviones enemigos. También escribió software para un proyecto de seguimiento de satélites en los Laboratorios de Investigación Cambridge de las Fuerzas Aéreas. El Proyecto SAGE era una extensión del Proyecto Whirlwind, iniciado por el MIT para crear un sistema informático que pudiera predecir los sistemas meteorológicos y seguir sus movimientos mediante simuladores. SAGE se desarrolló pronto para su uso militar en la defensa aérea antiaérea. Hamilton dijo:
Lo que solían hacer cuando llegabas a esta organización como principiante, era asignarte este programa que nadie era capaz de descifrar o hacer funcionar. When I was the beginner they gave it to me as well. And what had happened was it was tricky programming, and the person who wrote it took delight in the fact that all of his comments were in Greek and Latin. So I was assigned this program and I actually got it to work. It even printed out its answers in Latin and Greek. I was the first one to get it to work.
It was her efforts on this project that made her a candidate for the position at NASA as the lead developer for Apollo flight software.
Draper LaboratoryEdit
Hamilton then joined the Charles Stark Draper Laboratory at MIT, que trabajó en la Misión Espacial Apolo. Hamilton fue contratada inicialmente como programadora para este proceso, pero pasó a diseñar sistemas. Con el tiempo, se encargó de todo el software del Módulo de Mando, que era todo el software de navegación y guía de aterrizaje lunar. Finalmente, dirigió un equipo al que se le atribuyó el desarrollo del software para el Apolo y el Skylab. El equipo de Hamilton se encargó de desarrollar el software de vuelo, que incluía algoritmos diseñados por varios científicos de alto nivel para el módulo de mando del Apolo, el módulo de aterrizaje lunar y el posterior Skylab. Otra parte de su equipo diseñó y desarrolló el software de sistemas. Esto incluía el software de detección y recuperación de errores, como los reinicios y las Rutinas de Interfaz de Pantalla (también conocidas como Pantallas de Prioridad), que Hamilton diseñó y desarrolló. Trabajó para adquirir experiencia práctica en una época en la que los cursos de informática eran poco comunes y no existían los cursos de ingeniería de software. Hamilton también fue director de la División de Ingeniería de Software.
Sus áreas de especialización incluyen: diseño de sistemas y desarrollo de software, modelado de empresas y procesos, paradigma de desarrollo, lenguajes formales de modelado de sistemas, objetos orientados al sistema para el modelado y desarrollo de sistemas, entornos automatizados del ciclo de vida, métodos para maximizar la fiabilidad y reutilización del software, análisis de dominios, corrección mediante propiedades incorporadas en el lenguaje, técnicas de arquitectura abierta para sistemas robustos, automatización del ciclo de vida completo, garantía de calidad, integración sin fisuras, técnicas de detección y recuperación de errores, sistemas de interfaz hombre-máquina, sistemas operativos, técnicas de prueba de extremo a extremo y técnicas de gestión del ciclo de vida. Todo ello hizo que su código fuera increíblemente fiable porque ayudó a los programadores a identificar y arreglar las anomalías antes de que se convirtieran en problemas graves.
Programa ApoloEdit
En uno de los momentos críticos de la misión Apolo 11, el ordenador de guiado del Apolo junto con el software de vuelo de a bordo evitaron que se abortara el aterrizaje en la Luna. Tres minutos antes de que el módulo de aterrizaje lunar llegara a la superficie de la Luna, se activaron varias alarmas informáticas. El software de vuelo de a bordo captó estas alarmas con las «pantallas que nunca debían ocurrir» interrumpiendo a los astronautas con pantallas de alarmas prioritarias.Hamilton se había preparado precisamente para esta situación años antes:
Hubo otro mecanismo de seguridad que a Hamilton le gusta recordar. Su innovación de la «pantalla prioritaria» había creado el riesgo de que el astronauta y el ordenador se desajustaran justo cuando más importaba. A medida que las alarmas se disparaban y las pantallas prioritarias sustituían a las normales, el cambio real a los nuevos programas detrás de las pantallas se producía «un paso más lento» de lo que sería hoy.
Hamilton había pensado mucho en esto. Significaba que si Aldrin, por ejemplo, pulsaba un botón de la pantalla prioritaria con demasiada rapidez, podría seguir obteniendo una respuesta «normal». Su solución: cuando vea una pantalla de prioridad, cuente primero hasta cinco.
Según algunas versiones, los astronautas habían dejado inadvertidamente el interruptor del radar de encuentro encendido, lo que provocó que se activaran estas alarmas (Robert Wills, del Museo Nacional de Computación, cuestiona que los astronautas dejaran el radar encendido inadvertidamente). El ordenador se sobrecargó con las interrupciones causadas por la alimentación incorrecta del radar de encuentro del módulo de aterrizaje. Las alarmas del programa indicaban «desbordamientos del ejecutivo», lo que significaba que el ordenador de orientación no podía completar todas sus tareas en tiempo real y tenía que posponer algunas de ellas. El ejecutivo asíncrono diseñado por J. Halcombe Laning fue utilizado por el equipo de Hamilton para desarrollar un software de vuelo asíncrono:
Debido a las técnicas de detección y recuperación de errores del software de vuelo que incluían su enfoque de reinicio «kill and recompute» en todo el sistema desde un «lugar seguro» a sus técnicas de snapshot y rollback, las Rutinas de Interfaz de Visualización (alias las visualizaciones prioritarias) junto con sus capacidades de hombre en el bucle pudieron ser creadas para tener la capacidad de interrumpir las visualizaciones normales de la misión de los astronautas con visualizaciones prioritarias de alarmas críticas en caso de emergencia. Esto dependía de nuestra asignación de una prioridad única a cada proceso en el software con el fin de garantizar que todos sus eventos tuvieran lugar en el orden correcto y en el momento adecuado en relación con todo lo demás que estaba sucediendo.
Las pantallas de alarma prioritarias de Hamilton interrumpían las pantallas normales de los astronautas para advertirles de que había una emergencia «dando a los astronautas una decisión de ir/no ir (para aterrizar o no aterrizar)». Jack Garman, un ingeniero informático de la NASA en el control de la misión, reconoció el significado de los errores que presentaban las pantallas de prioridad a los astronautas y gritó: «¡Adelante, adelante!» y continuaron. Paul Curto, tecnólogo senior que nominó a Hamilton para un premio Space Act de la NASA, calificó el trabajo de Hamilton como «la base del diseño de software ultrafiable».
Hamilton escribió más tarde sobre el incidente:
El ordenador (o mejor dicho, el software que llevaba) fue lo suficientemente inteligente como para reconocer que se le estaban pidiendo más tareas de las que debía realizar. Entonces enviaba una alarma, que significaba para el astronauta: ‘Estoy sobrecargado con más tareas de las que debería hacer en este momento y voy a quedarme sólo con las más importantes’; es decir, las necesarias para el aterrizaje… En realidad, el ordenador estaba programado para hacer algo más que reconocer las condiciones de error. Se incorporó un conjunto completo de programas de recuperación en el software. La acción del software, en este caso, era eliminar las tareas de menor prioridad y restablecer las más importantes … Si el ordenador no hubiera reconocido este problema y tomado medidas de recuperación, dudo que el Apolo 11 hubiera sido el alunizaje exitoso que fue.
– Carta de Margaret H. Hamilton, directora de la programación del ordenador de vuelo del Apolo MIT Draper Laboratory, Cambridge, Massachusetts, titulada «Computer Got Loaded», publicada en Datamation, 1 de marzo de 1971
NegociosEdit
En 1976, Hamilton cofundó con Saydean Zeldin una empresa llamada Higher Order Software (HOS) para seguir desarrollando ideas sobre la prevención de errores y la tolerancia a los fallos que surgían de su experiencia en el MIT trabajando en el programa Apolo. Crearon un producto llamado USE.IT, basado en la metodología de HOS que desarrollaron en el MIT. Se utilizó con éxito en numerosos programas gubernamentales, incluido un proyecto para formalizar e implementar C-IDEF, una versión automatizada de IDEF, un lenguaje de modelado desarrollado por las Fuerzas Aéreas de EE.UU. en el proyecto de fabricación integrada asistida por ordenador (ICAM). En 1980, el informático británico-israelí David Harel publicó una propuesta para un lenguaje de programación estructurado derivado de HOS desde el punto de vista de y/o submetas. Otros han utilizado HOS para formalizar la semántica de los cuantificadores lingüísticos y para formalizar el diseño de sistemas embebidos fiables en tiempo real.
Hamilton fue el director general de HOS hasta 1984 y dejó la empresa en 1985. En marzo de 1986, fundó Hamilton Technologies, Inc. en Cambridge, Massachusetts. La empresa se desarrolló en torno al Lenguaje Universal de Sistemas (USL) y su entorno automatizado asociado, el 001 Tool Suite, basado en su paradigma de desarrollo antes del hecho para el diseño de sistemas y el desarrollo de software.