Возникновение программирования
Юрий Полунов
Меня милый не целует,
Не садится близко.
Он ведь чистый математик,
а я – программистка.
Студенческий фольклор
За свою долгую жизнь Чарльз Бэббидж написал более 70 заметок, статей и книг по самым различным вопросам. Однако подробное изложение принципов работы разностной и аналитической машин сделано не им (Бэббидж говорил, что слишком занят созданием машин, чтобы еще заниматься и их описанием). В частности, аналитическая машина была весьма детально описана в «Очерке аналитической машины...» Л. Ф. Менабреа[1], переведенном с итальянского на английский язык леди Лавлейс. Она не только сделала перевод, но и дополнила его собственными «Примечаниями», свидетельствующими о замечательном понимании принципов работы вычислительных машин Бэббиджа. Кроме того, она привела ряд примеров их практического использования: выражаясь современным языком, составила несколько программ для аналитической машины.
В то время как труд Менабреа касается в большей степени технической стороны дела, «Примечания» Лавлейс посвящены в основном математическим вопросам. По этой причине «Очерк…» представляет сейчас лишь исторический интерес, поскольку современные вычислительные машины построены на совершенно иных технических принципах, тогда как леди Лавлейс высказаны идеи, не потерявшие своего значения и в наше время.
Леди Лавлейс в период работы над “Примечаниями переводчика”
Ада Августа, в замужестве графиня Лавлейс, была единственной «дочерью дома и сердца» великого поэта Джорджа Гордона Байрона
С Бэббиджем Ада познакомилась в июне 1833 г., когда она вместе с матерью и некоторыми высокопоставленными особами посетила мастерскую ученого, где была установлена часть разностной машины. Об этом событии одна из ее современниц писала: «В то время как большинство из присутствующих только в изумлении глазело на это удивительное устройство, выражая свое восхищение возгласами подобно дикарям, которые первый раз видят зеркальце или слышат выстрел из ружья, мисс Байрон, совсем еще юная, сумела понять работу устройства и оценила необычайную красоту изобретения».
Чарльз Бэббидж искренне привязался к своей новой знакомой. Он находил в ней главное, что ценил в людях, – остроту ума. Быть может, сыграло роль и то, что она была почти ровесницей его рано умершей дочери. Бэббидж следил за научными занятиями девушки, посылал ей статьи и книги. Известный ученый Мэри Соммервил (1780–1872) вспоминала, как они вместе с Адой «часто посещали мистера Бэббиджа, работавшего над вычислительными машинами» и он всегда «приветливо встречал их, терпеливо объяснял устройство его машины и разъяснял практическую пользу автоматических вычислений».
Чтобы склонить правительство к финансированию работ над созданием аналитической машины, Бэббиджу необходимо было получить одобрение и поддержку его планов в различных кругах общества, дабы создать общественное давление на власть предержащих. Поэтому так важна была популяризация идеи автоматических вычислений, четкое и законченное, но понятное для достаточно широких кругов изложение принципов действия аналитической машины и ее огромных преимуществ перед предшественницей. В этом и заключался смысл научного сотрудничества Чарльза Бэббиджа и Ады Августы Лавлейс.
«Спустя некоторое время после появления его [Менабреа. – Прим. ред.] очерка, – вспоминал Бэббидж, – покойная графиня Лавлейс сообщила мне, что сделала его перевод. Я спросил, почему она не написала самостоятельной статьи по этому вопросу, с которым была так хорошо знакома. На это леди Лавлейс отвечала, что подобная мысль не пришла ей в голову. Тогда я предложил ей добавить некоторые примечания к «Очерку». Эта идея была ею немедленно принята». План будущей работы разрабатывался совместно с Бэббиджем: «Мы обсуждали вместе различные иллюстрации, которые могли быть использованы; я предложил несколько, но выбор она сделала совершенно самостоятельно».
Перевод статьи Менабреа, снабженный «Примечаниями» переводчика и подписанный инициалами А. А. L., был опубликован в серьезном научном журнале «Ученые записки» (Scientific Memoirs). Он появился в книжных лавках Лондона в конце августа 1843 г. и вызвал немалый интерес у читающей публики. По воспоминаниям современника, Л. Ф. Менабреа «был очень удивлен, когда узнал, что его «Очерк» не только точно переведен, но и снабжен интересными научными примечаниями и что все это сделано автором, чьи инициалы не могли быть связаны ни с одним из современных математиков».
Объем журнальной статьи не позволяет мне подробно рассказать о замечательной работе леди Лавлейс, поэтому я остановлюсь на том, что считаю наиболее примечательным (курсивы в приводимых ниже цитатах принадлежат автору «Примечаний»)[2].
Прежде всего, процитирую довольно обширный отрывок, свидетельствующий о глубоком понимании автором сущности вычислительного процесса:
«Изучая работу аналитической машины, мы обнаруживаем, что необходимо строго различать операции, объекты, над которыми операции совершаются, и результаты операций. Мы обращаем на это внимание не только потому, что это совершенно необходимо для понимания работы аналитической машины и оценки ее возможностей, но также и потому, что это обычно мало принимается во внимание при изучении математики вообще… Под словом операция мы понимаем любой процесс, который изменяет взаимное отношение двух или более вещей, какого бы рода эти отношения ни были. Это наиболее общее определение, охватывающее все предметы во Вселенной… Наука об операциях, как происходящая от математики, но более специальная, есть самостоятельная отрасль знания, имеющая абстрактные истины и значения, независимые от объекта, к которому мы применяем свои рассуждения... Те, кто знаком с этим, знают, что если верны некоторые основные положения, то из них обязательно следует справедливость некоторых других комбинаций и соотношений; эти комбинации не ограничены в своем разнообразии и масштабах... То обстоятельство, что самостоятельный характер науки об операциях слабо ощущается многими, заключается в двойственном смысле многих символов, используемых в математических обозначениях. Во-первых, символы операций часто являются также символами результатов операции[3]. Во-вторых, цифры – символы числовых величин – служат также символами операций (например, при возведении в степень)… Операционный механизм может быть приведен в действие независимо от объекта, над которым должна производиться операция. Этот механизм может совершать действия не только над числами, но и над другими объектами, основные соотношения между которыми могут быть выражены с помощью абстрактной науки об операциях и которые могут быть приспособлены к операционным обозначениям и механизму машины. Предположим, например, что соотношения между высотами звуков в гармонии и музыкальной композиции поддаются такой обработке; тогда машина сможет сочинять искусно составленные музыкальные произведения любой сложности или длительности. Аналитическая машина есть воплощение науки об операциях; она сконструирована специально для действий над абстрактными числами как объектами этих операций».
Еще одна важная цитата:
«Многие люди, недостаточно знакомые с математическими исследованиями, полагают, что, поскольку цель машины – выдать результаты в числовой форме, характер ее процессов должен быть соответственно арифметическим или числовым, а не алгебраическим и аналитическим. Это ошибка. Машина может упорядочивать и комбинировать числовые величины точно так же, как если бы они были буквами или другими символами более общей природы».
И далее:
«Можно сказать, что аналитическая машина ткет алгебраические узоры, подобно тому, как станок Жаккара ткет цветы и листья».
Нетрудно заметить связь между этими высказываниями и той областью computer science, которую принято называть «аналитическим программированием». Правда, эти работы начались практически лишь после широкого внедрения алфавитно-цифровых печатающих устройств, однако их наличие не является необходимым. Ада прекрасно это понимала и вот что писала по этому поводу:
«Она [машина] может создать три типа результатов: ...символические … численные (главная и основная цель) и алгебраические в буквенных обозначениях. Последнее вряд ли следует считать желательным дополнением к возможностям машины, в частности потому, что устройства, необходимые для реализации этих возможностей, грозят увеличить сложность и размеры механизма до такой степени, что полностью обесценят преимущества машин.... Главная цель изобретения заключается в переводе на числовой язык общих формул анализа, … законы образования которых мы уже знаем. Однако было бы ошибкой предположить, что поскольку результат … получается в обозначениях наиболее ограниченной науки[4], то и процессы, следовательно, также ограничены этой наукой. Назначение машины состоит по существу в том, чтобы придать наибольшую практическую эффективность средствам цифровой интерпретации более высокой науки анализа, поскольку она [машина] использует ее процессы и комбинации».
Весьма интересно мнение Ады Лавлейс о возможностях вычислительных машин, столь характерное для уровня знаний ее времени ее времени.
«Следует предостеречь против преувеличения возможностей аналитической машины. При рассмотрении любого нового предмета существует тенденция, с одной стороны, переоценить то, что мы считаем интересным или замечательным, а с другой стороны, тенденция к недооценке истинного положения вещей, когда мы обнаруживаем, что наши устойчивые представления должны быть заменены. Аналитическая машина не претендует на то, чтобы создавать что-то действительно новое. Машина может выполнить все то, что мы умеем ей предписать. Она может следовать анализу, но она не может предугадать какие-либо аналитические зависимости или истины, функции машины заключаются в том, чтобы помочь нам получить то, с чем мы уже знакомы».
Конечно, для XIX века эти высказывания не были актуальными. Современный же специалист по машинному интеллекту совершенно справедливо назовет их ошибочными (еще в 1949 г. леди Лавлейс возражал Алан Тьюринг в своей знаменитой статье «Может ли машина мыслить?»). Но могла ли Ада предвидеть создание и развитие кибернетики, теорий алгоритмов и информации и многого другого, что изменило бы ее точку зрения?
Автор приводит программу решения системы двух линейных уравнений с двумя переменными и при этом вводит классификацию ячеек памяти машины, которая применяется в программировании и в настоящее время, включая и термин рабочие ячейки. Ада использует идею последовательного изменения значений ячеек, от которой остается один шаг до оператора присваивания – одной из основополагающих конструкций всех языков программирования.
Комментируя другую свою программу (вычисление слагаемых в некоторой тригонометрической функции), Ада показывает, что при вычислении коэффициентов некоторая последовательность операций должна выполняться многократно. Для обозначения такой повторяющейся последовательности вводится понятие цикла:
«Если имеется выражение общего члена, то существует рекуррентная группа[5] операций... Ради определенности и краткости рекуррентную группу назовем циклом. Цикл операций, таким образом, может рассматриваться как обозначение любой группы операций, которая повторяется более чем один раз… хотя бы только дважды… Сущность цикла составляет повторяемость операций».
Приведенное выше определение цикла почти дословно совпадает с тем, что приводится в современных учебниках программирования. Далее аналогично строятся определения цикла циклов, то есть циклов различной кратности, причем эти определения также практически не отличаются от современных.
Но самой замечательной и сложной программой, которую мы находим в «Примечаниях», является программа вычисления чисел Бернулли, вызвавшая восхищение Бэббиджа. Она строится как сложный двойной цикл: наружный цикл выполняется по индексу числа Бернулли, внутри же его имеется небольшой вложенный цикл для вычисления множителей при числах Бернулли с предыдущими индексами, причем умножение и деление выполняются последовательно, что препятствует накоплению ошибок округления.
После беглого ознакомления с избранными местами из «Примечаний» возникает естественное желание выяснить, насколько самостоятельна была Августа Ада Лавлейс в своей работе. Являются ли «Примечания» простым пересказом ее бесед с Бэббиджем или же они были результатом самостоятельного глубокого осмысливания и интерпретации идей ученого? Можно ли назвать леди Лавлейс «первой программисткой»? Эти вопросы являются в последнее время предметом острой дискуссии межу историками ВТ. Некоторые из них отрицают ее участие в творческом процессе и полагают, что она лишь выполняла техническую работу, записывая мысли и высказывания Бэббиджа. А. Бромли, например, считает (на мой взгляд, бездоказательно), что программа вычисления чисел Бернулли написана Бэббиджем за несколько лет до публикации «Примечаний». Более того, утверждается, что она ничего самостоятельно сделать и не могла, так как якобы страдала маниакально-депрессивным психозом, унаследованным ею от деда по отцовской линии. Другие авторы, напротив, высоко оценивают творческие достижения Ады и считают, что титул «первой программистки» присвоен ей совершенно справедливо (такого мнения придерживается, например, Бетти Тул – автор одной из наиболее полных биографий Ады Лавлейс).
Признаюсь: мне очень хотелось бы принять точку зрения последних (вспомним Михаила Светлова: «Я сам лучше кинусь под паровоз, чем брошу на рельсы героя»). Но по прошествии стольких лет дать абсолютно точные ответы на упомянутые вопросы не представляется возможным.
Ада блестяще обобщила и дополнила «некоторые сведения», сообщенные Бэббиджем, выполнив, таким образом, свою основную задачу – популяризацию идеи автоматических вычислений. Ее изложение принципов действия разностной и аналитической машин, их вычислительных возможностей и некоторых структурных особенностей дает законченное и четкое представление об этих машинах. Недаром сам Бэббидж неоднократно повторял, что представления леди Лавлейс о его работе были яснее, чем его собственные. К несомненным достижениям Ады следует также отнести введение и весьма подробное рассмотрение таких принципиально важных для программирования вопросов, как организация циклов, связь рекуррентных формул с циклическими процессами вычислений, использование рабочих ячеек. Даже если эти вопросы предварительно обсуждались с Бэббиджем, это не умаляет заслуг Ады хотя бы уже потому, что и сами термины, и их содержание впервые стали достоянием гласности благодаря ее работе. Автор проектов вычислительных машин не мог не понимать важности упомянутых вопросов, но в его трудах отсутствует терминология, введенная Адой. По-видимому, Бэббидж, будучи человеком крайне щепетильным, решил написать в своих книгах, вышедших уже после смерти леди Лавлейс, лишь о том, что принадлежало только ему. И, кроме того, думается, что гордый и независимый характер Ады не допускал откровенного плагиата и, если бы автором приведенных ею программ был Бэббидж, она обязательно сообщила бы об этом «граду и миру».
Стефан Цвейг писал когда-то о «звездных часах человечества»: песня, написанная за одну ночь скромным армейским капитаном Руже де Лиллем, сделала его имя бессмертным; несколько десятков страничек, исписанных накануне дуэли Эваристом Галуа, открыли миру великого математика. Программы, приведенные в работе леди Лавлейс, никогда не отлаживались и не работали. Но несмотря на это, они, как и «Примечания» в целом, навсегда останутся в истории computer science как первая опубликованная работа в области программирования. Слова «цикл» и »рабочие ячейки» относятся к наиболее употребительным программистским терминам и вряд ли станут менее употребительными в обозримом будущем. Будем же помнить, кто произнес их впервые[6].
Статья опубликована в PC Week/RE №4 от 14.02.2006 г., стр. 29.
Помещена в музей с разрешения автора.
Примечания
1. См. предыдущую статью цикла (PC Week/RE, № 1/2006, c. 36; №2/2006, c. 37).
2. См. подробнее о “Примечаниях”: Р. С. Гутер, Ю. Л. Полунов. Ада Августа Лавлейс и возникновение программирования. В кн.: Кибернетика и логика. М.: Наука, 1978, с. 57–102.
3. Аналогичное высказывание принадлежит проф. С. А. Яновской: “Диалектическое единство результата и пути, к нему ведущего, широко используется в современной математике”.
4. Под “ограниченной наукой” автор, очевидно, имеет в виду арифметику.
5. Разумеется, термин “группа” у леди Лавлейс не несет современного алгебраического смысла.
6. В конце 1970-х годов по заданию Министерства обороны США был разработан язык программирования, который в память о леди Лавлейс был назван АДА.