Представьте: пятидесятые годы 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-м — Президентскую медаль свободы, высшую гражданскую награду в США.
В ответ на просьбу дать совет молодым людям, которые думают о карьере программиста, Маргарет ответила: «Не позволяйте страху мешать вам и не бойтесь говорить „Я не знаю” или „Я не понимаю“. Ни один вопрос не является глупым. И не всегда слушайте так называемых экспертов!»