Чтобы показать, как аналитическая машина могла генерировать числа Бернулли, Ада описала последовательность операций, а затем составила диаграмму, показывающую, как каждая из них может быть закодирована в машине. Попутно она помогла разработать концепцию подпрограмм (последовательности инструкций, которые выполняют определенную задачу, например вычисление косинуса или сложных процентов, и которые могут по мере необходимости вставляться в более крупные программы), а также рекурсивных вложенных циклов (последовательности повторяющихся инструкций). Это стало возможным сделать благодаря применению перфокарт. Для определения каждого числа Бернулли, как она объяснила, необходимо семьдесят пять карт, затем процесс становится итерационным, поскольку это число отправляется обратно и используется в процессе уже для получения следующего числа. Она пишет: «Очевидно, что те же самые семьдесят пять переменных карт могут быть использованы для вычисления каждого последующего числа». Она предвидела, что будет создана библиотека часто используемых подпрограмм, и действительно, спустя столетие ее интеллектуальные наследники, в том числе такие женщины, как Грейс Хоппер из Гарварда, а также Кей Макналти и Джин Дженнингс из Пенсильванского университета, создадут такую библиотеку. Кроме того, машина Бэббиджа позволяла переходить туда и обратно внутри последовательности команд на картах в зависимости от полученных промежуточных результатов, и таким образом появилось то, что в будущем станет операцией условного перехода — когда тот или иной тип инструкций выбирается в зависимости от условий.
Бэббидж помогал Аде с расчетами чисел Бернулли, но из ее писем видно, что она сама глубоко погрузилась в сущность задачи. «Я упорно ищу и тщательно анализирую все возможные способы вычисления чисел Бернулли, — писала она в июле, всего за несколько недель до того, как ее перевод и примечания были посланы в печать. — Я в таком смятении из-за того, что возникло такое странное затруднение и разочарование с этими числами, что я сегодня не могу ничего делать… Я в оцепенении и растерянности»<sup></sup>.
Когда эта проблема была решена, Ада сделала еще одну вещь, и она была в первую очередь ее собственным достижением, — составила таблицу и диаграмму, показывающую, как именно алгоритм, включающий два рекурсивных цикла, пошагово будет передаваться в компьютер. Это был пронумерованный список команд кодирования, который содержал указание регистров назначения, операции и комментарии — все, что сегодня знакомо любому работающему с языком C++. «Я работала непрерывно и очень успешно в течение всего дня, — написала она Бэббиджу. — Вы будете чрезвычайно довольны таблицей и диаграммой. Они были сделаны с особой тщательностью». Из всех писем видно, что она сделала таблицу сама — помощь приходила только от ее мужа, не знавшего математики, но готового методично обводить чернилами текст, который она писала карандашом. «Лорд Л. сейчас любезно переписывает чернилами все это для меня, — писала она Бэббиджу. — Мне пришлось делать это карандашом»<sup></sup>.
Главным образом из-за этой диаграммы, на которой был представлен сложный процесс генерации чисел Бернулли, Ада получила от своих почитателей звание «первого в мире компьютерного программиста». С этим определением довольно трудно согласиться. Бэббидж уже разработал, по крайней мере в теории, более двадцати обоснований процессов, которые машина могла со временем выполнить. Но ни одно из них не было опубликовано, и не существовало ясного описания способа установления последовательности операций. Таким образом, было бы справедливо сказать, что алгоритм и детальное описание программы для генерации чисел Бернулли были первой опубликованной компьютерной программой. И эта публикация была подписана инициалами автора — Ады Лавлейс. |