Представьте: пятидесятые годы XX века. Компьютеры есть только в университетах и госучреждениях. Это машины размером с комнату, которым требуется специальное охлаждение, а ещё они очень шумят. И пока мужчины работают над тем, чтобы компьютеры стали меньше и быстрее, программирование считается менее престижной работой, и им занимаются в основном женщины. Одна из них Маргарет Гамильтон — героиня этой истории.
Как в то время программировали и запускали код
Для того чтобы программировать какое-то оборудование, нужно было получить разрешение на доступ и запуск кода на этих компьютерах. Получив разрешение, сперва нужно было написать код на листах кодирования. Затем с помощью перфомашин код переписывался с листов кодирования на перфокарты.
Для запуска кода стопка перфокарт подавалась компьютерам, которые читали отверстия в картах и распознавали их как определённые команды. На запуск команд уходили часы. И хотя компьютеры были огромны, работали они медленно, а памяти было мало. Они могли обрабатывать лишь небольшое количество данных за раз. Если компьютер выдавал ошибку, всё приходилось начинать сначала. Поэтому нельзя было писать неэффективный код — нужна была предельная дотошность.
Массачусетский технологический институт: начало карьеры
В университете Маргарет Гамильтон получила степень по математике и после получения диплома планировала продолжить её изучение. Но жизнь сложилась иначе: Маргарет вышла замуж, переехала с мужем в Бостон, и там у них родилась дочь. Вскоре после этого Маргарет начала работать на метеорологическом факультете Массачусетского технологического института, расположенном в Кембридже — пригороде Бостона.
По традиции новичкам давали программу, которую никто не мог ни понять, ни запустить. Маргарет досталась программа, комментарии в которой были на латыни и греческом языке. В результате программа не только заработала, но и печатала ответы на латыни и греческом. Маргарет стала первой, кто справился с этой программой.
После этого Маргарет занималась программным обеспечением сначала для прогнозирования погоды, а затем для обнаружения потенциально недружественных самолётов, а также писала код для слежения за спутниками. Вскоре один из проектов Маргарет стали использовать в системе ПВО США, а её назначили ведущим разработчиком программного обеспечения для полётов космического корабля «Аполлон» в НАСА.
НАСА: разработка программ для полётов на Луну
В НАСА Маргарет Гамильтон возглавила команду разработчиков, которые писали и тестировали бортовое программное обеспечение для командного и лунного модуля «Аполлона» и будущей космической станции «Скайлэб».
Работать часто приходилось по вечерам и в выходные, поэтому Маргарет брала с собой дочь Лорен. Однажды во время запуска компьютерного моделирования миссии «Аполлон-8» Лорен стала играть в астронавта и нажимать клавиши на панели управления, в результате чего программа зависла. Маргарет проанализировала ошибку и поняла, что Лорен случайно запустила программу, предназначенную для подготовки к взлёту, когда моделируемый космический корабль был уже в пути. Поскольку такая же ошибка могла возникнуть во время настоящей миссии, Маргарет исправила код.
Мы никогда не узнаем, что случилось бы, не возьми тогда Маргарет с собой дочь. Программное обеспечение было дописано и протестировано, все обнаруженные ошибки — исправлены, и в результате в 1969 году команда Нила Армстронга успешно высадилась на Луну. В этом коде до сих пор не обнаружено ни одной ошибки.
А вот фрагмент того самого кода, который написала Маргарет для управления космическим кораблём:
037752,000040:                                                                                                  #  ENTRY INITIALIZATION ROUTINE
037753,000041:                                                                                                  #   -----------------------------
037754,000042: 
037755,000043: 25,2000                                           BANK    25                                    
037756,000044: 25,2000                                           SETLOC  REENTRY                               
037757,000045: 25,2000                                           BANK                                          
037758,000046: 
037759,000047: 25,2000                                           COUNT*  $$/ENTRY                              
037760,000048: 25,2000  E7,1451                                  EBANK=  RTINIT                                
037761,000049: 
037762,000050: 25,2000     5060               EBENTRY           =       EBANK7                                
037763,000051: 25,2000     5057               EBAOG             EQUALS  EBANK6                                
037764,000052: 25,2000     5002               NTRYPRIO           EQUALS  PRIO20                                #  (SERVICER)
037765,000053: 25,2000     0102               CM/FLAGS           EQUALS  STATE      +6                         
037766,000054: 
037767,000055: 25,2000           77776        STARTENT           EXIT                                          #  MM = 63
037768,000056: 
037769,000057:                                                                                                  #  COME HERE FROM CM/POSE.  RESTARTED IN CM/POSE.
037770,000058: 25,2001           42113                           CS      ENTMASK                               #  INITIALIZE ALL SWITCHES TO ZERO
037771,000059:                                                                                                  #  EXCEPT LATSW, ENTRYDSP AND GONEPAST.
037772,000060:                                                                                                  #  GONEBY 112D BIT8 FLAG7, SELF INITIALIZING
037773,000061: 25,2002           00004                           INHINT                                        
037774,000062: 25,2003           70102                           MASK    CM/FLAGS                              
037775,000063:                                                                                                  #  ENTRYDSP = 92D B13
037776,000064:                                                                                                  #  GONEPAST=95D B10,     RELVELSW=96D B9
037777,000065:                                                                                                  #  EGSW = 97D B8         NOSWITCH = 98D B7
037778,000066:                                                                                                  #  HIND=99D B6           INRLSW=100D B5
037779,000067:                                                                                                  #  LATSW=101D B4         .05GSW=102D B3
037780,000068: 
037781,000069: 25,2004           62114                           AD      ENTRYSW                               #  SET ENTRYDSP, LATSW, GONEPAST.Первый программный инженер в истории
Когда Маргарет начала работать, разработка программного обеспечения ещё не была отдельной сферой деятельности. Маргарет начала использовать термин «программная инженерия», чтобы отличать его от аппаратного обеспечения и других видов разработки. Так Маргарет Гамильтон стала первым программным инженером в истории. Область разработки ПО, какой мы её знаем сегодня, была создана программистом-самоучкой. У Маргарет не было инструкций, так что она написала их сама.
В 2003 году Маргарет получила премию НАСА за выдающиеся достижения в области космоса, а в 2016-м — Президентскую медаль свободы, высшую гражданскую награду в США.
В ответ на просьбу дать совет молодым людям, которые думают о карьере программиста, Маргарет ответила: «Не позволяйте страху мешать вам и не бойтесь говорить „Я не знаю” или „Я не понимаю“. Ни один вопрос не является глупым. И не всегда слушайте так называемых экспертов!»
