Em Boston, ela pretendia inicialmente matricular-se em estudos de pós-graduação em matemática abstrata na Brandeis. No entanto, no verão de 1959, Hamilton começou a trabalhar para Edward Norton Lorenz, no departamento de meteorologia do MIT. Ela desenvolveu software para previsão do tempo, programação no LGP-30 e nos computadores PDP-1 do Projeto MAC de Marvin Minsky. O seu trabalho contribuiu para as publicações de Lorenz sobre a teoria do caos. Na época, a ciência da computação e a engenharia de software ainda não eram disciplinas estabelecidas; em vez disso, os programadores aprenderam no trabalho com experiência prática. Ela passou para outro projeto no verão de 1961, e contratou e treinou Ellen Fetter como sua substituta.
SAGE ProjectEdit
De 1961 a 1963, Hamilton trabalhou no Projeto Semi-Automatic Ground Environment (SAGE) no MIT Lincoln Lab, onde ela foi uma das programadoras que escreveu o software para o protótipo AN/FSQ-7 (o XD-1), usado pela Força Aérea Americana para procurar aeronaves possivelmente não amigáveis. Ela também escreveu software para um projeto de rastreamento via satélite nos Laboratórios de Pesquisa da Força Aérea de Cambridge. O Projeto SAGE foi uma extensão do Projeto Whirlwind, iniciado pelo MIT para criar um sistema computador que pudesse prever os sistemas meteorológicos e rastrear seus movimentos usando simuladores. O SAGE foi logo desenvolvido para uso militar na defesa aérea antiaérea. Hamilton disse:
O que eles costumavam fazer quando você entrava nesta organização como um iniciante, era atribuir a você este programa que ninguém era capaz de descobrir ou começar a executar. 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 trabalhou na Missão Espacial Apollo. Hamilton foi inicialmente contratado como programador para este processo, mas passou a desenhar sistemas. Eventualmente, ela ficou encarregada de todo o software do Módulo de Comando, que era todo o software de navegação e orientação lunar de aterrissagem. Ela eventualmente liderou uma equipe creditada com o desenvolvimento do software para Apollo e Skylab. A equipe de Hamilton foi responsável pelo desenvolvimento do software de bordo, que incluiu algoritmos projetados por vários cientistas seniores para o módulo de comando Apollo, o módulo de pouso lunar e o Skylab subseqüente. Outra parte de sua equipe projetou e desenvolveu o software do sistema. Isso incluiu software de detecção e recuperação de erros, como reinicializações e as rotinas de Interface de Exibição (também conhecidas como as Priority Displays), que a Hamilton projetou e desenvolveu. Ela trabalhou para ganhar experiência prática durante uma época em que os cursos de ciência da computação eram incomuns e não existiam cursos de engenharia de software. Hamilton também atuou como Diretora da Divisão de Engenharia de Software.
As suas áreas de especialização incluem: design de sistemas e desenvolvimento de software, modelagem empresarial e de processos, paradigma de desenvolvimento, linguagens formais de modelagem de sistemas, objetos orientados a sistemas para modelagem e desenvolvimento de sistemas, ambientes de ciclo de vida automatizados, métodos para maximizar a confiabilidade e reutilização de software, análise de domínio, correção por propriedades de linguagem embutidas, técnicas de arquitetura aberta para sistemas robustos, automação de ciclo de vida completo, garantia de qualidade, integração contínua, técnicas de detecção e recuperação de erros, sistemas de interface homem-máquina, sistemas operacionais, técnicas de teste de ponta a ponta e técnicas de gerenciamento de ciclo de vida. Isso tornou seu código incrivelmente confiável porque ajudou os programadores a identificar e corrigir anomalias antes que elas se tornassem grandes problemas.
Apollo programEdit
Num dos momentos críticos da missão Apollo 11, o computador de orientação Apollo, juntamente com o software de voo a bordo, evitou um aborto da aterrissagem na Lua. Três minutos antes do pouso lunar chegar à superfície da Lua, vários alarmes de computador foram disparados. O software de voo a bordo capturou esses alarmes com o “nunca supostamente aconteceria” interrompendo os astronautas com exibições de alarme prioritárias. Hamilton tinha-se preparado para apenas esta situação anos antes:
Havia um outro à prova de falhas que Hamilton gosta de lembrar. A sua inovação de “exibição prioritária” tinha criado um risco de que o astronauta e o computador escapassem da sincronia justamente quando mais importava. À medida que os alarmes disparavam e os ecrãs de prioridade substituíam os normais, a mudança para novos programas atrás das telas estava a acontecer “um passo mais lento” do que hoje.
Hamilton tinha pensado longa e duramente sobre isto. Isso significava que se Aldrin, digamos, pressionasse um botão na tela de prioridade muito rapidamente, ele ainda poderia obter uma resposta “normal”. Sua solução: quando você vê uma exibição de prioridade, primeiro conte até cinco.
Acima de algumas contas, os astronautas tinham inadvertidamente deixado o radar de encontro ligado, fazendo com que esses alarmes fossem acionados (se o radar foi deixado inadvertidamente pelos astronautas é disputado por Robert Wills com o Museu Nacional de Computação). O computador foi sobrecarregado com interrupções causadas por uma alimentação de fase incorreta do radar de encontro do aterrador. Os alarmes do programa indicavam “estouros executivos”, o que significava que o computador de orientação não podia completar todas as suas tarefas em tempo real e tinha de adiar algumas delas. O executivo assíncrono desenhado por J. Halcombe Laning foi usado pela equipe do Hamilton para desenvolver um software de vôo assíncrono:
Por causa do software de voo – técnicas de detecção e recuperação de erros do software de voo que incluíam as suas técnicas de “matar e recalcular” em todo o sistema a partir de uma abordagem de “local seguro” de reinício para as suas técnicas de snapshot e rollback, as Rotinas de Interface de Exibição (AKA the priority displays) juntamente com suas capacidades man-in-the-loop foram capazes de ser criadas a fim de ter a capacidade de interromper as exibições normais de missão dos astronautas com exibições prioritárias de alarmes críticos em caso de emergência. Isto dependia de atribuirmos uma prioridade única a cada processo no software, a fim de garantir que todos os seus eventos ocorressem na ordem correcta e no momento certo em relação a tudo o resto que estava a acontecer.
As exibições de alarme de prioridade dos astronautas interromperam as exibições normais dos astronautas para os avisar que havia uma emergência “dando aos astronautas uma decisão de ir ou não ir (aterrar ou não aterrar)”. Jack Garman, um engenheiro informático da NASA em controle de missão, reconheceu o significado dos erros que foram apresentados aos astronautas pelos visores de prioridade e gritou: “Vai, vai!” e eles continuaram. Paul Curto, tecnólogo sênior que nomeou Hamilton para um Prêmio da Lei Espacial da NASA, chamou o trabalho de Hamilton de “a base para o projeto de software ultraconfiável”.
Hamilton escreveu mais tarde sobre o incidente:
O computador (ou melhor, o software nele contido) foi inteligente o suficiente para reconhecer que estava sendo solicitado a realizar mais tarefas do que deveria. Ele então enviou um alarme, que significava para o astronauta, ‘Estou sobrecarregado com mais tarefas do que deveria estar fazendo neste momento e vou manter apenas as tarefas mais importantes’; ou seja, as que são necessárias para aterrissar … Na verdade, o computador foi programado para fazer mais do que reconhecer condições de erro. Um conjunto completo de programas de recuperação foi incorporado no software. A ação do software, neste caso, foi eliminar as tarefas de menor prioridade e restabelecer as mais importantes … Se o computador não tivesse reconhecido este problema e tomado a ação de recuperação, duvido que a Apollo 11 tivesse sido a aterrissagem lunar bem sucedida que foi.
– Carta de Margaret H. Hamilton, Diretor de Programação de Computador de Vôo da Apollo MIT Draper Laboratory, Cambridge, Massachusetts, intitulado “Computer Got Loaded”, publicado em Datamation, 1 de março de 1971
BusinessesEdit
Em 1976, Hamilton co-fundou com Saydean Zeldin uma empresa chamada Higher Order Software (HOS) para desenvolver mais idéias sobre prevenção de erros e tolerância a falhas surgidas a partir de sua experiência no MIT trabalhando no programa Apollo. Eles criaram um produto chamado USE.IT, baseado na metodologia HOS que eles desenvolveram no MIT. Ele foi usado com sucesso em vários programas governamentais, incluindo um projeto para formalizar e implementar o C-IDEF, uma versão automatizada do IDEF, uma linguagem de modelagem desenvolvida pela Força Aérea Americana no projeto ICAM (Integrated Computer-Aided Manufacturing). Em 1980, o cientista informático britânico-israelense David Harel publicou uma proposta para uma linguagem de programação estruturada derivada de HOS do ponto de vista de e/ou sub-metas. Outros usaram Hos para formalizar a semântica dos quantificadores linguísticos, e para formalizar o design de sistemas embutidos confiáveis em tempo real.
Hamilton foi o CEO de Hos até 1984 e deixou a empresa em 1985. Em março de 1986, ela fundou a Hamilton Technologies, Inc. em Cambridge, Massachusetts. A empresa foi desenvolvida em torno da Universal Systems Language (USL) e seu ambiente automatizado associado, o Conjunto de Ferramentas 001, baseado em seu paradigma de desenvolvimento antes do fato para design de sistemas e desenvolvimento de software.