В 19 веке, когда еще не было компьютеров и программирования, в Великобритании появилась первая программа. Ее создала дочь знаменитого поэта Джорджа Байрона — женщина-математик Ада Лавлейс.
В этом материале рассказываем, кто такая Ада, какой алгоритм она разработала и как ее труды повлияли на современную науку и технологии.
Кто такая Ада Лавлейс и как плохой характер отца сделал из нее математика
Ада родилась 10 декабря 1815 года. Ее отцом был знаменитый поэт лорд Джордж Байрон. Он был неординарной личностью и, как выяснилось позже, скверным мужем и отцом. Лорд хотел, чтобы родился мальчик, поэтому рождение Ады его разочаровало. Когда девочке было пять недель, Байрон приказал своей жене и матери ребенка Анабелле взять дочь и отправиться в дом к его родителям. Вскоре Джордж Байрон подписал акт о разводе.
Хотя по британским законам опека над ребенком переходила к отцу, Байрон не стремился забрать Аду и после ее отъезда больше не видел дочь. А когда девочке было 8 лет, ее отец скончался. После развода Анабелль получила полную опеку над Адой, но материнской привязанности к ней так и возникло. Любовь и душевную теплоту девочке компенсировала ее бабушка Джудит Милбенк.
Ада была с детства болезненным ребенком. В восемь лет у нее начались головные боли, которые мешали ей видеть. В июне 1829 года ее парализовало из-за приступа кори, поэтому три года Ада провела в постели. Выздоровела она только ближе к своим 17 годам.
Мать Ады не хотела, чтобы дочь пошла характером в отца и занималась творчеством, поэтому в обучении дочери она решила сделать упор на естественные науки и математику. С 17 лет Аду обучал физик Уильяма Кинга и специалистка в области математики и астрономии Мэри Сомервилль, а в 1840-х ее консультировал математик и логик Огастес де Морган.
В 1835 году Ада Байрон вышла замуж за Уильяма Кинга-Ноэля, который позже унаследовал титул лорда Лавлейса. От ученого она родила троих детей, но замужество и материнство не помешали ей продолжить заниматься наукой, тем более у нее появился источник финансирования в виде фамильной казны графов Лавлейсов. Но свою известность она получила во многом благодаря работе с Чарльзом Бэббиджем.
Знакомство с Чарльзом Бэббиджем и как Ада стала первой программисткой
В 17 лет Ада впервые вышла в свет, чтобы ее представили королю и королеве, а позже и другим выдающимся личностям той эпохи. В их числе был 41-летний профессор кафедры математики Кембриджского университета Чарльз Бэббидж, который работал над созданием разностной машины. Проект заинтересовал Аду, а Бэббидж высоко оценил ее умственные способности. Именно эта встреча стала судьбоносной для обоих ученых. Чтобы история была более объективной, стоит отдельно рассказать о Чарльзе Бэббидже и его проектах.
Разностная машина
Разностная машина состояла из ряда столбцов с зубчатыми колесами, каждое из которых представляло цифру в десятичной системе. Эти колеса были соединены через набор шестеренок и могли поворачиваться для выполнения операций сложения и вычитания.
В основе работы разностной машины лежал математический метод конечных разностей, который позволял вычислять широкий спектр функций, используя только основные арифметические операции.
Чтобы использовать разностную машину, оператор устанавливал начальные значения на колесах, а затем машина автоматически выполняла вычисления для создания нужной математической таблицы. После завершения вычислений машина могла выдать результаты в печатном виде.
Правительство Великобритании финансировало разработку Чарльза десять лет. В итоге он лишился поддержки государства и постепенно потерял интерес к проекту. Только между 1847 и 1849 годами ученый вернулся к первоначальной разработке и создал разностную машину №2.
Машину построили в Лондоне только в 2002 году, через 153 года после того, как ее придумал Чарльз. Посмотрите, как она работает.
Аналитическая машина
Новая разработка Чарльза — «Аналитическая машина» была способна не только табулировать логарифмы, но и вести другие вычисления. Машина программировалась с помощью перфокарт, аналогичных тем, которые использовали в ткацком станке Жаккарда.
Машина состояла из двух основных частей: хранилища (магазина) и мельницы. Хранилище выполняло функцию памяти, а мельница отвечала за выполнение арифметических и логических операций. Эти два компонента взаимодействовали друг с другом, как это делают современные компьютерные память и процессоры. Визуализацию аналитической машины можно посмотреть по ссылке.
Перевод статьи и комментарии Ады
В 1842 году Бэббидж презентовал проект «Аналитической машины» в Туринском университете. Выступление Чарльза вдохновило итальянского инженера Луиджи Менабреа (который через 27 лет стал премьер-министром Италии) написать на основе лекции статью на французском языке. Материал опубликовали в академическом журнале Bibliothèque universelle de Genève.
В 1842-1843 годах, по просьбе Чарльза Уитстона, леди Лавлейс перевела статью Менабреа на английский язык, дополнив перевод собственными соображениями. Работа была опубликована в одном из номеров журнала Scientific Memoirs под инициалами A.A.L. Из 66 страниц материала на 41 из них были примечания Ады. Заметку G многие ученые сегодня считают ее первой в истории компьютерной программой.
Какую программу написала Лавлейс
В своих комментариях к статье Ада упоминала числа Бернулли. Это ряд рациональных чисел, который часто использовали в математическом анализе. Лавлейс объяснила, как машина Бэббиджа могла бы вычислять эти числа, если бы она была построена.
Выбор чисел Бернулли был намеренным. Science Focus объясняет, что они хорошо подходят для машинных вычислений благодаря своему рекурсивному определению. Это означает, что знание первого числа позволяет вычислить второе, а знание второго позволяет вычислить третье.
Для достижения этой цели существовало несколько подходов, но Лавлейс выбрала более сложный метод. Ее главной целью было как можно нагляднее продемонстрировать возможности вычислительной машины.
В своих заметках об аналитическом двигателе Ада Лавлейс продемонстрировала свой алгоритм, используя пошаговый процесс, известный как «таблица алгоритма».
Эта таблица была не программой, а трассировкой — пошаговым выполнением программы. Вот упрощенная схема алгоритма:
Начните с начальных значений переменных.
Выполните ряд арифметических операций (сложение, вычитание, умножение и деление) над этими переменными для вычисления промежуточных значений.
Используйте циклы (повторение набора инструкций) и условные ветвления (выбор между различными инструкциями на основе определенных условий) для управления потоком вычислений.
Продолжайте процесс до тех пор, пока не будет выполнено условие остановки, означающее завершение вычислений.
Выведите конечный результат, который будет являться искомым числом Бернулли.
Сегодня записку Ады можно сжать до нескольких строк кода, но в то время термин «программа» не использовали. Если бы он существовал тогда, то мог бы обозначать набор перфокарт.
Алгоритм Лавлейс и Аналитическая машина Бэббиджа
Чтобы подробно объяснить алгоритм Ады Лавлейс для вычисления восьмого числа Бернулли (B7) на Аналитической машине, нужно углубиться в тонкости компонентов и механических операций машины.
Числа Бернулли и коэффициенты для работы алгоритма
Числа Бернулли — это последовательность рациональных чисел, глубоко связанных с теорией чисел и математическим анализом. Первые несколько нечетных чисел Бернулли имеют индексы: B1 = -1/2, B3 = 0, B5 = 0 и так далее. Четные числа Бернулли имеют индексы: B0 = 1, B2 = 1/6, B4 = -1/30, B6 = 1/42 и так далее.
Множители коэффициентов, вычисленных с помощью треугольника Паскаля: A0-A5. Значения A0, A1, А3 и А5 приведены ниже:
A0 = -1/2 * (2n - 1) / (2n + 1);
A1 = 2n / 2;
A3 = 2n(2n - 1)(2n - 2) / (2 * 3 * 4);
A5= 2n(2n−1)(2n−2)(2n−3)(2n−4) / (2⋅3⋅4⋅5⋅6).
Здесь n обозначает индекс числа Бернулли в последовательности нечетных чисел Бернулли, начиная с первого. В программе Лавлейс для вычисления B7, n = 4.
Механическое описание процесса алгоритма Ады на Аналитической машине
Этап 1. Настройка перфокарт
Аналитический двигатель программировался с помощью перфокарт, каждая из которых содержала определенные инструкции для арифметических операций, начальные числа Бернулли (B1, B3, B5) и формулы для расчета коэффициентов (A0, A1, A3). Карточки располагались по порядку и подавались в считывающее устройство машины.
Механически этот процесс происходил следующим образом:
Перфокарты, расположенные в определенной последовательности, подавались в считывающее устройство аналитического двигателя.
Каждая карта содержала рисунок отверстий, которые представляли собой определенные инструкции или данные для машины.
Когда карта проходила через считывающее устройство, ряд стержней или штифтов либо проходил через отверстия, либо блокировался твердыми частями карты.
Движение этих стержней или штифтов приводило в действие ряд взаимосвязанных механических компонентов, таких как рычаги, шестерни и зубчатые колеса в аналитическом двигателе.
Механические компоненты реагировали на положение стержней или штифтов, которые, в свою очередь, преобразовывали рисунок отверстий на картах в действия или вычисления, которые выполняла машина.
Этап 2. Хранилище
Аналитический двигатель имел область хранения данных (магазин), которая функционировала аналогично современной компьютерной памяти. Магазин состоял из ряда колонок, каждая из которых содержала набор механических шестеренок или колес, которые могли хранить числовые значения.
Для инициализации переменных оператор вручную устанавливал начальные значения чисел Бернулли и коэффициентов на шестеренках в колонках магазина. Эти шестеренки представляли собой ячейки памяти для каждой переменной, причем каждая шестеренка содержала одну цифру числового значения.
Этап 3. Передача данных
Аналитический двигатель использовал ряд механических связей, таких как стержни и рычаги, для передачи данных между хранилищем и мельницей. Когда для расчета требовалась определенная переменная, машина механически «считывала» значение из хранилища, выравнивая шестерни в соответствующей колонке и передавая значение через звенья на мельницу.
Этап 4. Вычисление коэффициентов
Мельница выполняла арифметические операции, используя сложную систему шестеренок и рычагов для манипулирования переменными. Она вычисляла значения для A0, A1 и A3 по определенным формулам и сохраняла их в хранилище.
Этап 5. Произведение коэффициентов и чисел Бернулли
Следующим шагом будет вычисление произведений нечетных чисел Бернулли и коэффициентов. Машина последовательно выполняет следующие вычисления, сохраняя результаты в памяти:
Product 1 = B1 * A1
Product 2 = B3 * A3
Product 3 = B5 * A5.
В этом шаге присутствует тот самый цикл, который разработала Ада Лавлейс. Он подразумевает итерационное вычисление произведений для каждой пары чисел Бернулли и коэффициентов. Хотя здесь нет явного «цикла» в том смысле, как понимают его в современных языках программирования, основная концепция цикла воплощена в повторяющемся процессе выполнения этих вычислений для различных входных данных. Этот итеративный подход составляет основу механизма циклов. Ада Лавлейс была первой, кто понял и включил его в свой алгоритм.
Этап 6. Сумма продуктов и A0
Затем аналитический механизм вычислит сумму ранее вычисленных продуктов и значение A0: Sum = A0 + Product 1 + Product 2 + Product 3.
Для этого мельнице потребуется выполнить ряд операций сложения, передавая промежуточные результаты между магазином и мельницей через механические связи.
Этап 7. Окончательный расчет B7
Наконец, машина умножит Sum на -1, чтобы определить восьмое число Бернулли (B7): B7 = -1 * Sum или B7 = -1 * (A0 + B1 * A1 + B3 * A3 + B5 * A5).
Выходные данные
После вычисления значения B7 аналитический механизм либо сохраняет результат в памяти, либо распечатывает его с помощью специального устройства вывода, например, принтера или графопостроителя, при этом конечный результат механически переносится с мельницы на устройство вывода.
Каждый этап процесса выполнялся механически точно, с использованием сложных механизмов, таких как шестеренки, рычаги и другие компоненты для выполнения арифметических операций. Перфокарты диктовали последовательность операций, позволяя аналитическому двигателю выполнять вычисления систематически и шаг за шагом, демонстрируя прозорливость Ады Лавлейс и Чарльза Бэббиджа.
Алгоритм для несуществующей машины
Сама аналитическая машина никогда не была построена, поэтому, по сути, Ада создавала виртуальный алгоритм для несуществующей машины, как отмечает исследователь Сидни Падула. На ее канале можно посмотреть 13-минутное видео с визуализацией работы машины.
Также Падула создала комикс «Захватывающие приключения Лавлейс и Бэббиджа».
По сюжету комикса ученые оказываются в альтернативной вселенной, где успешно создали Аналитическую машину и используют ее для борьбы с преступностью.
Влияние разработок Ады на современную науку и технологии
Общество оценило достижения Ады Лавлейс только спустя столетие после ее смерти (она умерла от рака матки в 1852 году). Несмотря на споры биографов о значении работ Ады, многие ее считают первым программистом и новатором в области компьютерных наук.
В 1980 году Министерство обороны США разработало универсальный язык программирования военного назначения, который получил название ADA. С 2009 года каждый второй вторник октября отмечается Международный день Ады Лавлейс, чтобы подчеркнуть выдающиеся достижения женщин в областях STEM и признать их незаменимую роль в развитии технологий.
Ежегодно под именем Лавлейс организуются различные мероприятия в области информационных технологий: фестивали, воркшопы, лекции и вручение наград. В 2022 году NVIDIA признала дальновидное мышление Ады, запустив архитектуру чипа Ada Lovelace, которая используется в современных GeForce 40-й серии и профессиональных картах RTX 6000 Ada Generation.
Комментарии (11)
Yermack
12.05.2023 13:57Похоже на пересказ более подробной статьи https://habr.com/ru/companies/wolfram/articles/303552/
rg_software
12.05.2023 13:57Позволю себе немного раскрыть фразу "Несмотря на споры биографов о значении работ Ады" вот такой цитатой:
Ada Lovelace has sometimes been acclaimed as the "world's fist programmer" on the strength of her authorship of the notes to the Menabrea paper. This romantically appealing image is without foundation. All but one of the programs cited in her notes had been prepared by Babbage from three to seven years earlier. The exception was prepared by Babbage for her, although she did detect a "bug" in it. Not only is there no evidence that Ada Lovelace ever prepared a program for the Analytical Engine but her correspondence with Babbage shows that she did not have the knowledge to do so. Babbage seems to have deliberately employed independent persons to convey knowledge of the Analytical Engine to the wider public in exactly the same manner as, a decade earlier, he had used the well-known popularizer of science Dionysius Lardner to convey into print a detailed account of the purpose of the Difference Engine.
W. Aspray and A. G. Bromley, Eds., Computing before computers, 1. ed. Ames, Ia: Iowa State University Press, 1990.
gmtd
12.05.2023 13:57+1The exception was prepared by Babbage for her, although she did detect a "bug" in it.
Послушайте, дебажить программу (да еще чисто визуально код, без запуска) - это намного больший скил, чем писать её. Этим занимаются senior debeloper-ы
Я за Аду
rg_software
12.05.2023 13:57Тут проблема в атрибуции, то есть мы довольно условно знаем, что это делала конкретно она:
Not only is there no evidence that Ada Lovelace ever prepared a program for the Analytical Engine but her correspondence with Babbage shows that she did not have the knowledge to do so.
Почему вообще так?
Babbage seems to have deliberately employed independent persons
to convey knowledge of the Analytical Engine to the wider public in
exactly the same manner as, a decade earlier, he had used the
well-known popularizer of science Dionysius Lardner to convey into
print a detailed account of the purpose of the Difference Engine.То есть я не "против" Ады, мне тоже нравится этот "romantically appealing image", но надо понимать, что участие в проекте Бэббиджа дамы из высшего света с большими связами неслучайно. Что, разумеется, нисколько не отменяет того, что у неё, очевидно, был научный склад ума и большой интерес к работе Бэббиджа.
gmtd
12.05.2023 13:57Not only is there no evidence that Ada Lovelace ever prepared a program for the Analytical Engine but her correspondence with Babbage shows that she did not have the knowledge to do so.
Ну давайте воспользуемся современным законодательством об авторском праве.
Есть данные о публикации ею алгоритма. Есть ли у W. Aspray and A. G. Bromley доказательства, что кто-то опубликовал/обнародовал данный алгоритм до ней?
rg_software
12.05.2023 13:57Я не вижу смысла спорить в юридическом ключе. Патент на радио получил Маркони, но это совершенно не означает, что вопрос об авторстве радио закрыт. Мы обсуждаем историческую фигуру, поэтому помимо публикаций анализируются письма, разговоры современников и проч. Есть хорошая книжка "Ada. A life and legacy" by D. Stein, но я ещё не успел её внимательно прочесть, только какие-то кусочки.
gmtd
12.05.2023 13:57+1Дело не в патенте, а в том, стоит ли за предположениями авторов не очень известной книги что-то реальное
В указанных отрывках только их субъективное мнение, не подкрепленное ничем фактологическим
rg_software
12.05.2023 13:57+1Ну вы же не ожидали, что я буду тут пространно цитировать фрагменты переписки Ады, ранние работы Бэббиджа и прочее? Авторы процитированного куска ссылаются на биографию ниже, а это 350 страниц вполне серьёзной работы под грифом MIT Press. Она вполне доступна в интернете, можно ознакомиться.
Hivemaster
12.05.2023 13:57+6Ого! А мы-то и не знали! Как-то не заметили 100500 других статей на Хабре про неё.
estet
А ещё в этой первой программе, которую написала Ада, был баг из-за неправильного порядка операндов при делении.
https://twobithistory.org/2018/08/18/ada-lovelace-note-g.html