Ада Лавлейс: история женщины, которая создала первую в мире программу

В 19 веке, когда еще не было компьютеров и программирования, в Великобритании появилась первая программа. Ее создала дочь знаменитого поэта Джорджа Байрона — женщина-математик Ада Лавлейс.

757f05af33a35b1e4e19a5f00ecb0d68.jpg

В этом материале рассказываем, кто такая Ада, какой алгоритм она разработала и как ее труды повлияли на современную науку и технологии.

Кто такая Ада Лавлейс и как плохой характер отца сделал из нее математика

Ада родилась 10 декабря 1815 года. Ее отцом был знаменитый поэт лорд Джордж Байрон. Он был неординарной личностью и, как выяснилось позже, скверным мужем и отцом. Лорд хотел, чтобы родился мальчик, поэтому рождение Ады его разочаровало. Когда девочке было пять недель, Байрон приказал своей жене и матери ребенка Анабелле взять дочь и отправиться в дом к его родителям. Вскоре Джордж Байрон подписал акт о разводе.

Хотя по британским законам опека над ребенком переходила к отцу, Байрон не стремился забрать Аду и после ее отъезда больше не видел дочь. А когда девочке было 8 лет, ее отец скончался. После развода Анабелль получила полную опеку над Адой, но материнской привязанности к ней так и возникло. Любовь и душевную теплоту девочке компенсировала ее бабушка Джудит Милбенк.

Ада была с детства болезненным ребенком. В восемь лет у нее начались головные боли, которые мешали ей видеть. В июне 1829 года ее парализовало из-за приступа кори, поэтому три года Ада провела в постели. Выздоровела она только ближе к своим 17 годам.

Портрет Ады Байрона Источник: digitalcollections.nypl.org

Мать Ады не хотела, чтобы дочь пошла характером в отца и занималась творчеством, поэтому в обучении дочери она решила сделать упор на естественные науки и математику. С 17 лет Аду обучал физик Уильяма Кинга и специалистка в области математики и астрономии Мэри Сомервилль, а в 1840-х ее консультировал математик и логик Огастес де Морган.

В 1835 году Ада Байрон вышла замуж за Уильяма Кинга-Ноэля, который позже унаследовал титул лорда Лавлейса. От ученого она родила троих детей, но замужество и материнство не помешали ей продолжить заниматься наукой, тем более у нее появился источник финансирования в виде фамильной казны графов Лавлейсов. Но свою известность она получила во многом благодаря работе с Чарльзом Бэббиджем.

Знакомство с Чарльзом Бэббиджем и как Ада стала первой программисткой

В 17 лет Ада впервые вышла в свет, чтобы ее представили королю и королеве, а позже и другим выдающимся личностям той эпохи. В их числе был 41-летний профессор кафедры математики Кембриджского университета Чарльз Бэббидж, который работал над созданием разностной машины. Проект заинтересовал Аду, а Бэббидж высоко оценил ее умственные способности. Именно эта встреча стала судьбоносной для обоих ученых. Чтобы история была более объективной, стоит отдельно рассказать о Чарльзе Бэббидже и его проектах.

Разностная машина

Разностная машина состояла из ряда столбцов с зубчатыми колесами, каждое из которых представляло цифру в десятичной системе. Эти колеса были соединены через набор шестеренок и могли поворачиваться для выполнения операций сложения и вычитания.

В основе работы разностной машины лежал математический метод конечных разностей, который позволял вычислять широкий спектр функций, используя только основные арифметические операции.

Чтобы использовать разностную машину, оператор устанавливал начальные значения на колесах, а затем машина автоматически выполняла вычисления для создания нужной математической таблицы. После завершения вычислений машина могла выдать результаты в печатном виде.

Высота разностной машины составляет в высоту около 60 сантиметров и имеет около двух тысяч латунных компонентов Источник: writings.stephenwolfram.com

Высота разностной машины составляет в высоту около 60 сантиметров и имеет около двух тысяч латунных компонентов
Источник: writings.stephenwolfram.com

Правительство Великобритании финансировало разработку Чарльза десять лет. В итоге он лишился поддержки государства и постепенно потерял интерес к проекту. Только между 1847 и 1849 годами ученый вернулся к первоначальной разработке и создал разностную машину №2.

Разностная машина №2, построенная в соответствии с оригинальными чертежами, состоит из 8000 деталей, весит пять тонн и имеет длину 11 футов Источник: computerhistory.org

Разностная машина №2, построенная в соответствии с оригинальными чертежами, состоит из 8000 деталей, весит пять тонн и имеет длину 11 футов
Источник: computerhistory.org

Машину построили в Лондоне только в 2002 году, через 153 года после того, как ее придумал Чарльз. Посмотрите, как она работает.

Аналитическая машина

Новая разработка Чарльза — «Аналитическая машина» была способна не только табулировать логарифмы, но и вести другие вычисления. Машина программировалась с помощью перфокарт, аналогичных тем, которые использовали в ткацком станке Жаккарда.

Внешний вид перфокарты Источник: scienceandindustrymuseum.org.uk

Машина состояла из двух основных частей: хранилища (магазина) и мельницы. Хранилище выполняло функцию памяти, а мельница отвечала за выполнение арифметических и логических операций. Эти два компонента взаимодействовали друг с другом, как это делают современные компьютерные память и процессоры. Визуализацию аналитической машины можно посмотреть по ссылке.

Перевод статьи и комментарии Ады

В 1842 году Бэббидж презентовал проект «Аналитической машины» в Туринском университете. Выступление Чарльза вдохновило итальянского инженера Луиджи Менабреа (который через 27 лет стал премьер-министром Италии) написать на основе лекции статью на французском языке. Материал опубликовали в академическом журнале Bibliothèque universelle de Genève.

В 1842–1843 годах, по просьбе Чарльза Уитстона, леди Лавлейс перевела статью Менабреа на английский язык, дополнив перевод собственными соображениями. Работа была опубликована в одном из номеров журнала Scientific Memoirs под инициалами A.A. L. Из 66 страниц материала на 41 из них были примечания Ады. Заметку G многие ученые сегодня считают ее первой в истории компьютерной программой.

Какую программу написала Лавлейс

В своих комментариях к статье Ада упоминала числа Бернулли. Это ряд рациональных чисел, который часто использовали в математическом анализе. Лавлейс объяснила, как машина Бэббиджа могла бы вычислять эти числа, если бы она была построена.

Выбор чисел Бернулли был намеренным. Science Focus объясняет, что они хорошо подходят для машинных вычислений благодаря своему рекурсивному определению. Это означает, что знание первого числа позволяет вычислить второе, а знание второго позволяет вычислить третье.

Для достижения этой цели существовало несколько подходов, но Лавлейс выбрала более сложный метод. Ее главной целью было как можно нагляднее продемонстрировать возможности вычислительной машины.

В своих заметках об аналитическом двигателе Ада Лавлейс продемонстрировала свой алгоритм, используя пошаговый процесс, известный как «таблица алгоритма».

В таблице отображались данные, переменные и промежуточные результаты на разных этапах вычислений Источник: galanix.com

В таблице отображались данные, переменные и промежуточные результаты на разных этапах вычислений
Источник: galanix.com

Эта таблица была не программой, а трассировкой — пошаговым выполнением программы. Вот упрощенная схема алгоритма:

  1. Начните с начальных значений переменных.

  2. Выполните ряд арифметических операций (сложение, вычитание, умножение и деление) над этими переменными для вычисления промежуточных значений.

  3. Используйте циклы (повторение набора инструкций) и условные ветвления (выбор между различными инструкциями на основе определенных условий) для управления потоком вычислений.

  4. Продолжайте процесс до тех пор, пока не будет выполнено условие остановки, означающее завершение вычислений.

  5. Выведите конечный результат, который будет являться искомым числом Бернулли.

Сегодня записку Ады можно сжать до нескольких строк кода, но в то время термин «программа» не использовали. Если бы он существовал тогда, то мог бы обозначать набор перфокарт.

Алгоритм Лавлейс и Аналитическая машина Бэббиджа

Чтобы подробно объяснить алгоритм Ады Лавлейс для вычисления восьмого числа Бернулли (B7) на Аналитической машине, нужно углубиться в тонкости компонентов и механических операций машины.

Числа Бернулли и коэффициенты для работы алгоритма

Числа Бернулли — это последовательность рациональных чисел, глубоко связанных с теорией чисел и математическим анализом. Первые несколько нечетных чисел Бернулли имеют индексы: B1 = -½, B3 = 0, B5 = 0 и так далее. Четные числа Бернулли имеют индексы: B0 = 1, B2 = 1/6, B4 = -1/30, B6 = 1/42 и так далее.

Множители коэффициентов, вычисленных с помощью треугольника Паскаля: A0-A5. Значения A0, A1, А3 и А5 приведены ниже:

A0 = -½ * (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). Карточки располагались по порядку и подавались в считывающее устройство машины.

Механически этот процесс происходил следующим образом:

  1. Перфокарты, расположенные в определенной последовательности, подавались в считывающее устройство аналитического двигателя.

  2. Каждая карта содержала рисунок отверстий, которые представляли собой определенные инструкции или данные для машины.

  3. Когда карта проходила через считывающее устройство, ряд стержней или штифтов либо проходил через отверстия, либо блокировался твердыми частями карты.

  4. Движение этих стержней или штифтов приводило в действие ряд взаимосвязанных механических компонентов, таких как рычаги, шестерни и зубчатые колеса в аналитическом двигателе.

  5. Механические компоненты реагировали на положение стержней или штифтов, которые, в свою очередь, преобразовывали рисунок отверстий на картах в действия или вычисления, которые выполняла машина.

Этап 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-минутное видео с визуализацией работы машины.

Также Падула создала комикс «Захватывающие приключения Лавлейс и Бэббиджа».

Страница из комикса «Захватывающие приключения Лавлейс и Бэббиджа» Источник: sydneypadua.com

Страница из комикса «Захватывающие приключения Лавлейс и Бэббиджа»
Источник: sydneypadua.com

По сюжету комикса ученые оказываются в альтернативной вселенной, где успешно создали Аналитическую машину и используют ее для борьбы с преступностью.

Влияние разработок Ады на современную науку и технологии

Общество оценило достижения Ады Лавлейс только спустя столетие после ее смерти (она умерла от рака матки в 1852 году). Несмотря на споры биографов о значении работ Ады, многие ее считают первым программистом и новатором в области компьютерных наук.

В 1980 году Министерство обороны США разработало универсальный язык программирования военного назначения, который получил название ADA. С 2009 года каждый второй вторник октября отмечается Международный день Ады Лавлейс, чтобы подчеркнуть выдающиеся достижения женщин в областях STEM и признать их незаменимую роль в развитии технологий.

Ежегодно под именем Лавлейс организуются различные мероприятия в области информационных технологий: фестивали, воркшопы, лекции и вручение наград. В 2022 году NVIDIA признала дальновидное мышление Ады, запустив архитектуру чипа Ada Lovelace, которая используется в современных GeForce 40-й серии и профессиональных картах RTX 6000 Ada Generation.

© Habrahabr.ru