Началото на софтуерното инженерство или как е написан кода за Аполо-11

Някога инженерните дейности били възприемани предимно като дейности, свързани с хардуера. Докато една емблематична лаборатория на Масачузетския технологичен институт (MIT) не получава задача и договор с НАСА за разработка на компютрите за Аполо-11 с мисия Луната. Те от своя страна се нуждаят от програмист и първият програмист, когото привличат, е Маргарет Хамилтън – учен, математик, по онова време и вече работеща майка. Маргарет е едва на 28 години.

Маргарет Хамилтън е главен изпълнителен директор на Hamilton Technologies, Inc. Тя е известен математик и пионер в областта на компютърните науки, известна е и с това, че въвежда термина “софтуерно инженерство”, докато разработва системата за ориентиране и навигация на космическия кораб Apollo, като ръководител на отдела за софтуерно инженерство на лаборатория към Масачузетския Технологичен Институт.

Преди предложението

Маргарет Хамилтън работи първо в Лабораторията на проф. Едуард Лоренц в MIT, бащата на Теорията на хаоса, който по това време работел върху система за прогнозиране на времето. Нуждаел се от добри математици, каквато била Маргарет Хамилтън. Проф.Лоренц бил „влюбен“ в софтуерните експерименти и заразил с любовта си и Маргарет. Там тя научава какво е компютър и как се пише софтуер. По онова време компютърните науки и софтуерното инженерство не били дисциплини в Технологичните институти и университети, програмистите се учили „в движение“ – по време на работа.

След това Маргарет се присъединява към Лабораторията на Линкълн в MIT, където пише софтуер за откриване на вражески самолети.

Имала е намерение да възобнови магистърската си степен по математика, когато съпругът ѝ случайно вижда обява във вестника, че Инструменталната Лаборатория на Масачузетския технологичен институт, MIT Instrumentation Laboratory, търси хора, които да разработят софтуер, който „да изпрати човек на Луната“. Лабораторията е имала договор с НАСА за разработване на хардуера на бордовия компютър. Маргарет била силно заинтригувана и от грандиозната идея и от мисълта, че това никога досега не е правено. И така, тя е първия програмист и първата жена наета по този проект.

В началото работи по софтуера за безпилотните мисии на Аполо, но постепенно е насърчавана да оглави екипа, който разработва софтуера за пилотираните космически кораби, какъвто е Аполо-11.

Може да се окаже изненада за повечето софтуерни инженери днес да научат, че основателят на тяхната дисциплина е жена

В какво се е състояла работата за Аполо-11

На борда е имало два компютъра – един за командния модул, Columbia, и един за лунния модул, Eagle. Задачата на екипа на Маргарет Хамилтън била да разработи софтуера за всеки един от компютрите, както и системния софтуер, който те ще си споделят. В началото никой не мислел, че софтуерът е толкова важен. По-късно обаче започнали да осъзнават колко много ще трябва да разчитат на него. Животът на астронавтите зависел от това софтуерът да бъде изключително надежден, да бъде в състояние да открива грешки и сам да се възстановява от грешките по всяко едно време на мисията. И всичко това трябва да се побере в хардуера!

Екипът нараснал на около 100 софтуерни инженери.

Помощ от неочаквани места или защо QA има значение

Маргарет понякога водела дъщеря си Лорен в почивните дни в лабораторията. Лорен обичала да я имитира и да си играе на астронавт. Един ден Лорен започнала да удря по клавишите и внезапно стартирала симулацията на мисията до Луната. След това натиснала други клавиши и симулацията пропаднала – била избрала програма, която се очаквало да се изпълнява преди насочването към Луната. Поради малкото място в оперативна памет на компютъра, навигационните данни се били изтрили. Това била критична ситуация, която можело да се случи в реална обстановка и Маргарет настоявала за промени в програмата (всъщност много скоро, в Аполо-8, по невнимание тъкмо това се случило).

Така тази наглед детска игра послужила за промяна в софтуера, касаещ приоритетите на задачите.

Точно преди кацането пред Аполо-11 възниква предизвикателство

На 20 юли 1969 г. (Маргарет Хамилтън по това време е 32-годишна), когато лунният модул „Орел“ се приближава до повърхността на луната, компютрите му започват да мигат с предупредителни съобщения. Трябвало е да се реши дали астронавтите да кацнат или не. Софтуерът на Маргарет Хамилтън предупредил за извънредна ситуация, компютърът бил претоварен – радарният ключ бил на грешна позиция и отнемал от мощността на процесора. Много бързо станало ясно, че софтуерът не само информира за хардуерен проблем, но можел и да компенсира проблема чрез рестартиране и възстановяване на задачите с най-висок приоритет. Откриването на грешки и механизмите за възстановяване от грешките работели отлично. „За щастие, хората в Mission Control на MIT се довериха на нашия софтуер”, казва Хамилтън. И само с гориво за още 30 секунди полет, Нийл Армстронг съобщава: Орелът кацна.

Работата по Аполо и сложността на „системите от системи“, провокират Маргарет Хамилтън да въведе понятието „софтуерно инженерство“, което по-късно е признато като инженерна наука.

Кодът написан за Аполо е използван по-късно и за космическата станция Skylab, както и в програмите на космическите совалки.

Маргарет продължава да работи по всички пилотирани и няколко безпилотни мисии на Аполо, преди да напусне през 70-те години и да създаде своя собствена софтуерна компания, Hamilton Technologies.

Точно 50 години преди нашата зависимост от компютърната мощ напълно да се утвърди, кацането на Луната предлага истинско изпитание на тази процъфтяваща днес база от знания, отбелязвайки за първи път, че толкова много и големи отговорности са предоставени на една изцяло софтуерна система.

За да разберем невероятния подвиг на компютърното инженерство от времето на Аполо-11, трябва да надникнем в…

…ранните години на софтуерното кодиране

Постижението на космическите мисии е огромно, още повече, че е направено във време, когато компютърните технологии са в съвсем начален стадий: астронавтите имат достъп само до 72 KB (килобайта) компютърна памет. За сравнение днес 64 GB – гигабайтовият мобилен телефон в джоба ни дава почти милион пъти повече място за съхранение. Освен това програмистите трябва да използват хартиени перфокарти за подаване на информацията в компютри, които са с размерите на стая и са без екранен интерфейс.

На какъв език е програмирала Маргарет Хамилтън за Аполо? – На Асемблер

Програмирането се извършва с помощта на перфокарти – правоъгълни карти с нарочно направени отвори за кодиране на данни. Перфокартата съдържа 80 колони и 10 реда, номерирани от 0 до 9. Всяка колона на перфокартата представлява един знак (байт) в двоичен формат, с дупка или без дупка. Всяка карта представлява една отделна инструкция за компютъра. Разбирате, че освен местоположението на отворите, много важна е и подредбата на картите – едно разместване в поредността на инструкциите би било фатално.

Перфокарта
Перфокарта

Ранните програмисти, като Хамилтън и нейният екип, пишат основния код на ръка. След това (обикновено в отдел оператор(к)и) перфокартите се пробиват със специални устройства. Накрая те се подават на “четеца”, входа към компютъра. Тъй като всяка перфокарта описва само една инструкция за изпълнение, дори и най-простите задачи за програмиране могат да представляват солиден пакет перфокарти.

Полученият пакет перфокарти съдържа подробно описание на това, което програмата в крайна сметка ще направи (програмата тогава се наричаше задание, job). За да може този пакет с перфокарти наистина да свърши нещо, трябва да се подаде на четец, който да прочете кода от отворите, да го подаде на компилатор, който от своя страна да го превърне в двоичен машинен код, разбираем за компютъра, и накрая да се запише програмата на магнитна лента (нещо като ROM).

Маргарет
Маргарет Хамилтън, водещ софтуерен инженер на проекта Аполо, стои до огромна купчина код, написан от нея и нейния екип през 1969 година.

Когато компютърът стартира програмата, резултатът от нея не се вижда на екран, такъв нямаше, а на “печатарката” (огромен шкаф-принтер). Т.е. проверката от програмиста дали изходът от програмата е правилен, става чрез наблюдаване на отпечатания резултат. Това е хартиен резултат – т.нар. листинг. Ако нещо не е както трябва в листинга, не отговаря на очакванията, следва внимателно проследяване на кода, повторно кодиране, подготвяне на нови перфокарти, заместване на неправилните перфокарти с правилни. И отново проверка на резултата в листинга. Сега вероятно разбирате какъв грандиозен труд е бил софтуерът за Аполо и колко внимателно са били обмислени всички детайли, всички възможни варианти на действие и прецизността на изчисленията.

Apollo
Музеят Смитсониън съхранява в колекциите си компютърният софтуер (Apollo Flight Guidance), създаден от Хамилтън и нейния екип (по-горе, номер на страница 45506-A). (National Air and Space Museum)

Благодарение на Хамилтън и нейния екип от софтуерни инженери, не само астронавтите на Аполо се завръщат успешно на Земята, а и следващите ги поколения софтуерни инженери, могат да направят подобен революционен скок.

От самото си начало, от машината на Тюринг, през ранните години на космическите програми, до сегашното му изобилие и абсолютна необходимост в днешния свят, софтуерното инженерство със сигурност е направило невероятно пътуване.

В интервю на The Gardian с Маргарет Хамилтън от 13-ти юли 2019 година, на въпроса: Какви са уроците от проекта Apollo за програмистите днес?, тя отговаря:

Наскоро станахме свидетели на случай, в който самолет се разби и пилотът през цялото време нямаше никаква представа какво се случва. Добре е пилотът да знае с какви възможности разполага, нали така? Също така, това, което стана очевидно и при работата за Apollo е: по-добре още в самото начало напълно и подробно да дефинирате системата, която трябва да разработите, за да минимизирате грешките, вместо да създавате купчина код, който след това да трябва да коригирате с пачове, и пачове… Това е послание, което сякаш остава незабелязано днес, но в това отношение софтуерът се изгражда точно така, както беше и преди 50 години.

Хамилтън е водещ лектор на 40-тата международна конференция по софтуерно инженерство, проведена в Гьотеборг, Швеция, където на 31 май, 2018 г. изнася следната лекция

Източник: ICSE 2018

Искате да научите повече за професионалното прорамиране?

Включете се в курса Python | Машинно обучение и анализ на данни.

Научете повече

Автор: Милена Бакалова