Шрифт:
Интервал:
Закладка:
Первые компьютеры действительно приходилось программировать примерно таким образом. Возьмем, например, Automatic Sequence Controlled Calculator, известный как Mark I. Он представлял собой сооружение пятнадцати метров в длину и двух с половиной в высоту, с цепочками ручек, рычагов, переключателей и передач. В нем было 850 километров проводов. Его жужжанием, как механическим пианино, дирижировала катушка перфорированной бумажной ленты. Для того чтобы решить новое уравнение, приходилось разбираться, какие переключатели включить и выключить, какие проводки подсоединить и куда. Затем следовало включить все переключатели, вставить нужные провода и пробить на бумажной ленте все отверстия. Программирование требовало недюжинного ума и математических способностей и было нудной, однообразной, подверженной ошибкам ручной работой[394].
Через четыре десятилетия после Mark I в школы поступили более компактные и удобные для пользователя машины, например Commodore 64. Мои сверстники, может быть, помнят детский восторг, когда печатаешь:
10 print ‘hello world’;
20 goto 10
И — вот! — экран заполняет грубоватый текст в низком разрешении: hello world, hello world, hello world… Вы написали инструкцию интуитивно понятными, человеческими словами, и компьютер ее принял. Это казалось маленьким чудом. Компьютеры совершили такой скачок после Mark I в том числе благодаря миниатюризации компонентов. Однако невозможно было бы представить подобную функциональность, если бы программисты не могли писать подобные Windows программы на близком человеческому языке и им приходилось бы переводить всё в нули и единицы — наличие и отсутствие тока, которое в итоге и делает всю работу.
Первым шагом к этому стало устройство, которое называлось компилятором, а его история начинается с женщины по имени Грейс Хоппер.
Сегодня много говорят о том, что женщин нужно привлекать в технические профессии. В 1906 году, когда родилась Грейс, равенство полов на рынке труда мало кого заботило. К счастью, среди немногих небезразличных был отец девочки, руководитель в страховой компании. Он не находил причин для того, чтобы его дочери получили худшее образование, чем сын. Грейс пошла в хорошую школу, где у нее проявились блестящие способности к математике. Ее дедушка дослужился до контр-адмирала, и в детстве она мечтала о флоте, но туда брали только мужчин. Тогда она решила стать профессором[395].
В 1941 году, после нападения на Перл-Харбор, Америка вступила во Вторую мировую войну. Талантливые мужчины были призваны, и флот начал принимать женщин. Грейс немедленно воспользовалась открывшимся шансом.
Если вы недоумеваете, какая польза флоту от математиков, подумайте о наведении ракет. Под каким углом и в каком направлении нужно стрелять? На траекторию влияет множество факторов: дальность, температура, влажность, скорость и направление ветра. Это несложные вычисления, но если «компьютер» — это ручка и листок бумаги, времени уходит много[396]. Может быть, есть более быстрый способ? Когда младший лейтенант Хоппер в 1944 году окончила школу мичманов, на флоте живо заинтересовались потенциалом громоздкого устройства, недавно разработанного гарвардским профессором Говардом Эйкеном — тем самым Mark I. Хоппер направили помочь Эйкену разобраться, на что способна новинка.
Профессор поначалу не испытал восторга оттого, что в коллективе появилась женщина, но вскоре Хоппер так его поразила, что он поручил ей написать руководство по эксплуатации. Текст рождался методом проб и ошибок. Чаще всего Mark I глох вскоре после включения, к тому же не выдавал удобного сообщения об ошибке. Однажды сбой произошел из-за того, что в машину залетела моль, что подарило миру современный термин «баг» — жучок. Чаще «мошки» были не такие буквальные: неправильное положение переключателя, отверстие в бумажной ленте не в том месте. «Детективная» работа оказалась нудной и трудоемкой.
Хоппер и ее коллеги начали заполнять записные книжки фрагментами проверенного на практике кода, пригодного к повторному использованию. К 1951 году компьютеры усовершенствовались и научились хранить эти фрагменты — подпрограммы — в собственных системах памяти. Хоппер, в то время работавшая в компании Remington Rand, попыталась убедить начальство позволить программам вызывать эти подпрограммы знакомыми словами, например «вычти из зарплаты подоходный налог» вместо, как выражалась Хоппер, «попыток записать это восьмеричным кодом или всевозможными символами»[397].
Позже Хоппер утверждала: «Раньше никто об этом не думал, потому что таких ленивых, как я, не нашлось»[398]. Хоппер, прославившаяся своим трудолюбием, лукавит, но зерно правды в ее заявлении есть. Идея, которую она назвала компилятором, подразумевала компромисс: само программирование шло быстрее, но получавшиеся в результате программы работали медленнее. По этой причине Remington Rand не проявила интереса к изобретению. У каждого клиента были свои, индивидуальные требования к блестящим новеньким вычислительным устройствам, поэтому лучше, полагали в компании, чтобы специалисты компании программировали их как можно эффективнее.
Но Хоппер не унывала и написала первый компилятор в свободное от работы время. Он помог пользователям мыслить яснее, и это на многих произвело большое впечатление. Одним из таких клиентов был инженер Карл Хаммер, который благодаря нововведению за день смог решить уравнение, над которым его коллеги бились месяцами: хватило всего двадцати строк[399]. Программисты-единомышленники со всех Соединенных Штатов начали присылать Хоппер новые фрагменты кода. Она добавляла их в библиотеку для следующего выпуска и в итоге стала пионером программного обеспечения с открытым кодом.
Благодаря компилятору Хоппер сложился один из первых языков программирования — COBOL, но еще важнее было то, что он проложил путь к знакомому теперь разделению на «железо» и программное обеспечение. В уникальных изделиях вроде Mark I аппаратура и программное обеспечение были едины: схема переключателей работала только на данной машине, потому что каждая требовала совершенно иного подхода. А если компьютер способен запустить компилятор, он выполнит любую программу на его основе.