Первая программа для вычисления на машине была написана в каком году
Ада Лавлейс. Первая в мире программа и взгляд в будущее
10 декабря 1815 года на свет появилась Ада Лавлейс, большинству из нас известная как самый первый в мире программист. Так уж получилось, что это звание принадлежит представительнице прекрасного пола. Сегодня исполняется двести один год со дня рождения этого человека. И в этом посте я бы хотел немного рассказать о самых интересных моментах из ее жизни, не отделываясь обрывочными фразами, но и не слишком уж углубляясь в детали. Материал можно найти, где угодно, имея под рукой Интернет. Однако мало кто полезет искать его просто ради интереса. Поэтому кому интересно, добро пожаловать под кат.
Учась в школе, сидя на уроках литературы, я прекрасно знал, кто такой Джордж Байрон.
Мы читали и по желанию заучивали его стихотворения. Спустя время, выбрав себе профессию я узнал о том, кем была загадочная Ада Лавлейс – первая девушка-программист, дочь того самого лорда Джорджа Байрона. Тогда для меня это оказалось удивительным открытием. Я на всю жизнь запомнил, кем была Ада и, как-то совсем незаметно для самого себя, забыл о самом Байроне.
Августа Ада Кинг (впоследствие графиня Лавлейс, но об этом чуть позже) – была дочерью английского поэта лорда Джорджа Гордона Байрона и его жены – Анны Изабеллы Байрон. Однако Байрон спустя месяц после рождения своей дочери покинул их, и они больше никогда не виделись. Сам Байрон умер, когда Аде было восемь лет. Сам он еще не раз вспоминал свою дочь в своих стихах.
Видно, что Ада сама росла в довольно талантливой семье. Ее мать, Анна Изабель, еще до рождения дочери сильно интересовалась математикой, за что когда-то получила от мужа забавное прозвище – “королева параллелограммов”. Это была действительно необычная семья. Анне после ухода мужа все же удалось воспитать дочь в одиночку и вот что из этого получилось.
В двенадцать лет Ада собрала свой летательный аппарат! До этого двенадцатилетняя девочка некоторое время запиралась от матери в комнате и что-то писала. Мать боялась, что она начнет зачитываться стихами отца и пойдет той же дорогой. Однако все это время она чертила.
Математическая логика занимала ее больше всего остального. Однажды Ада заболела и три года провела в постели. Но все это время она хотела и продолжала учиться. К ней приходили самые разные доктора и учителя. Одним из них был Август де Морган – известный математик и логик (да-да, закон де Моргана назван в его честь). С тех пор Ада еще больше погрузилась в мир математики.
В итоге Ада выросла уникальной девушкой. Она была красива и умна, точно также как и ее мама занималась математикой, а в разговорах на научные темы обходила даже ребят из Кембриджа и Оксфорда. Среди других людей, в основном женского пола, это вызвало скрытую злость и зависть. О ней нередко говорили как о чем-то темном, даже дьявольском. Надо сказать, что Ада и сама в себе чувствовала необычные силы (забавно, но на русском ее имя звучит и правда немного дьявольски). Но в этом нет ничего необычного, так как девушка-математик в высшем английском обществе того времени – со стороны это действительно выглядело странно. А многие мужчины меж тем были от нее без ума.
Математика математикой, но как же так вышло, что помнят о ней в первую очередь именно программисты? Одной из самых судьбоносных встреч Ады Лавлейс стала встреча с Чарльзом Бэббиджем – изобретателем первой аналитической вычислительной машины.
В то время, во Франции, куда и прибыл Бэббидж, был развернут крупномасштабный проект по созданию таблиц значений логарифмов и тригонометрических функций. Бэббидж стал мечтать о том, чтобы автоматизировать этот труд, заодно исключив возможные человеческие ошибки, так как в то время именно люди вручную занимались созданием таких таблиц. Так Бэббидж задумался о построении своей разностной машины (вычисление многочлена с помощью разностного метода).
Им было создано огромное количество чертежей, а сам прототип закончен в 1832 году, тот самый, который Ада Лавлейс увидит спустя год.
В 1835 году Ада выйдет замуж за очень достойного человека – барона Уильяма Кинга, который впоследствии был удостоен титула графа, а сама Ада стала графиней Лавлейс. Спустя четыре года у них уже было трое детей – два сына и дочь. Сыновьям Ада дала имена в честь отца – одного назвали Ральфом Гордоном, а другого – Байроном.
А как же с той самой первой в мире программой? И какова судьба машины Бэббиджа? В 1842 году итальянский ученый Луис Манебреа напишет книгу о машине Бэббиджа. Ада по просьбе Бэббиджа займется ее переводом. Во время перевода самой книги она сделала огромное количество замечаний, видя в этой машине кажется больше, чем сам Бэббидж.
Вот ее слова: «Суть и предназначение машины изменятся от того, какую информацию мы в нее вложим. Машина сможет писать музыку, рисовать картины и покажет науке такие пути, которые мы никогда и нигде не видели» Алан Тьюринг впоследствие читал ее записи, введя в свои работы термин возражение леди Лавлейс относительно способности машин мыслить.
В то же самое время, при описании машины Бэббиджа именно Ада ввела в обиход такие компьютерные термины как цикл и ячейка. Она также составил набор операций для вычисления чисел Бернулли. Именно это по сути и стало самой первой компьютерной программой. Бэббидж так и не построил свою машину, она была собрана уже после его смерти и сейчас хранится в Музее науки в Лондоне.
Сама Ада Лавлейс умерла 27 ноября 1852 года всего в возрасте 36 лет. Ровно столько, сколько прожил ее отец. Ее похоронили в фамильном склепе вместе с отцом, которого она так и не узнала.
В честь Ады Лавлейс был назван разработанный в 1980-х годах Министерством Обороны США язык программирования Ада.
P.S. Наверное, тем людям, у которых фраза “Первым программистом была девушка” вызывает недовольство или улыбку, стоит хотя бы раз поинтересоваться биографией этого человека. О таких людях, как Ада Лавлейс или Алан Тьюринг и о многих других стоит помнить. А для кого-то эти истории еще один повод понять, что в мире нет ничего невозможного.
Спасибо тем, кто прочел эту статью. Делитесь своими мнениями, комментариями или замечаниями).
Компьютерная грамотность с Надеждой
Заполняем пробелы — расширяем горизонты!
Леди Ада Лавлейс и первая компьютерная программа
Графиня
Ада Лавлейс
На технологической выставке в 1834 г. Чарльз Бэббидж впервые публично заявил о своей новой разработке – аналитической машине, прабабушке современного компьютера.
Естественно, его речь была насыщена математическими терминами и логическими выкладками, которые неподготовленному человеку понять было сложно.
А Ада Лавлейс (1815-1852) не только все поняла, но и забросала Чарльза вопросами по существу проблемы.
Бэббидж был поражен остротой ума девушки, к тому же, Ада была почти ровесницей его рано умершей дочери.
Кто же была эта девушка?
Ада Августа Лавлейс, урожденная Байрон, родилась 10 декабря 1815 года в семье известного английского поэта лорда Байрона и его жены Анабеллы. Через месяц после рождения ребенка лорд Байрон покинул семью и никогда больше не видел свою дочь.
Анабелла сделала все возможное, чтобы ее дочь никогда не стала поэтессой. Она нанимала дочери выдающихся в то время учителей, чтобы заинтересовать ее математикой и музыкой, и вполне в этом преуспела. Во время тяжелой болезни Ада, на три года потерявшая способность ходить, продолжала свои занятия.
В 1834 году на технологической выставке одержимость юной леди математикой обрела воплощение. Открылась новая, отличная возможность при помощи математики заставить машину помогать человеку решать математические задачи! Впоследствии Бэббидж руководил научными занятиями Ады, посылал ей статьи и книги, представляющие интерес, и знакомил со своими работами.
Забегая далеко вперед, по своему опыту могу сказать, что когда я в студенческие годы начала писать свои первые программы на ЭВМ, то тоже была буквально потрясена возможностями машины в области математических расчетов. И по объему вычислений, и по быстродействию, и по отсутствию ошибок в расчетах ЭВМ, конечно, все делала классно!
В 1835 году Ада выходит замуж за лорда Кинга, который впоследствии получил титул графа Лавлейса. У них родилось два сына и дочь, но ни дети, ни муж, ни светская жизнь не могли оторвать Аду от ее любимой математики. Не зря ее называли «Повелительницей чисел»!
В 1842 г. итальянский математик Луис Менебреа, преподаватель баллистики Туринской артиллеристской академии, опубликовал «Очерк Аналитической машины, изобретенной Чарльзом Бэббиджем». Книга была написана на французском языке, и Бэббидж обратился к Аде Августе с просьбой перевести ее на английский язык.
Графиня Лавлейс, резонно рассудив, что ее матери вполне достаточно, чтобы заниматься с внуками и с многочисленным штатом домашней прислуги, с радостью вернулась в мир математики. Ада Августа решила полностью посвятить себя любимой науке, работе над машиной Бэббиджа и ее широкой популяризации.
Кстати, муж ее полностью поддерживал. Наверное, поэтому его фамилия вошла в историю вычислительной техники.
В течение девяти месяцев графиня работала над текстом книги, попутно дополнив ее собственными комментариями и замечаниями. Именно эти комментарии и замечания сделали ее известной в мире науки, а заодно и ввели в историю.
В одном из своих примечаний она самостоятельно написала первую в истории человечества компьютерную программу — алгоритм, представляющий собой список операций для вычисления чисел Бернулли.
Предвосхищая «этапы» компьютерного программирования, Ада Лавлейс, так же как и современные математики, начинает с постановки задачи, затем выбирает метод вычисления, удобный для программирования, и лишь затем переходит к составлению программы.
«Примечания» Лавлейс заложили основы современного программирования. Одним из важнейших понятий программирования служит понятие цикла, которому она дает следующее определение:
«Под циклом операций следует понимать любую группу операций, которая повторяется более одного раза».
Организация циклов в программе значительно сокращает ее объем. Без такого сокращения практическое использование аналитической машины было бы нереальным, т. к. она работала с перфокартами, и требовалось бы огромное их количество для каждой решаемой задачи.
«Можно с полным основанием сказать, Аналитическая машина точно так же плетет алгебраические узоры, как ткацкий станок Жаккарда воспроизводит цветы и листья»
— писала графиня Лавлейс. Она была одна из немногих, кто понимал, как работает машина и каковы ее перспективы.
Уже в то время Ада Лавлейс отдавала себе полный отчет в колоссальных возможностях универсальной вычислительной машины.
Вместе с тем она прекрасно понимала границы этих возможностей:
«Желательно предостеречь против преувеличения возможностей аналитической машины. Аналитическая машина не претендует на то, чтобы создавать что-то действительно новое. Машина может выполнить все то, что мы умеем ей предписать. Она может следовать анализу; но она не может предугадать какие-либо аналитические зависимости или истины. Функции машины заключаются в том, чтобы помочь нам получить то, с чем мы уже знакомы».
Вместе с тем уже в 40-х годах 19 века она разглядела в машине то, о чем боялся думать ее изобретатель Бэббидж: «Суть и предназначение машины изменятся от того, какую информацию мы в нее вложим. Машина сможет писать музыку, рисовать картины и покажет науке такие пути, которые мы никогда и нигде не видели».
В своей первой и, к сожалению, единственной научной работе Ада Лавлейс рассмотрела большое число вопросов, актуальных и для современного программирования. Примечания графини Лавлейс к книге Луиса Менебреа занимают всего 52 страницы. Собственно, это все, что оставила Ада Лавлейс для истории. Но эта краткость — сестра огромного таланта. Даже 52 страницы могут перевернуть окружающий мир до неузнаваемости.
В середине 70-х гг. 20-го столетия министерство обороны США официально утвердило название единого языка программирования американских вооруженных сил. Язык носит название Ada.
С недавнего времени у программистов всего мира появился свой профессиональный праздник. Он так и называется — «День программиста» — и празднуется 10 декабря. Как раз в день рождения Ады Лавлейс.
P.S. Статья закончилась, но можно еще прочитать:
Нашли ошибку? Выделите фрагмент текста и нажмите Ctrl+Enter.
Что на самом деле делала программа Ады Лавлейс?
Эпизод с основанием Microsoft – один из наиболее известных в компьютерной истории. В 1975 году Пол Аллен вылетел в Альбукерк, чтобы продемонстрировать интерпретатор BASIC, которые они с Биллом Гейтсом написали для микрокомпьютера Altair. Поскольку у них не было работающего компьютера Altair, они проверили свой интерпретатор при помощи написанного ими эмулятора, выполнявшегося на компьютерной системе Гарварда. Эмулятор был основан только на опубликованных спецификациях процессора Intel 8080. Когда Аллен, наконец, запустил интерпретатор на реальном компьютере Altair – перед человеком, который, как они надеялись, купит их ПО – он даже не знал, заработает ли программа. Она заработала. В следующем месяце Аллен и Гейтс официально основали новую компанию.
За более чем сто лет до интерпретатора BASIC Аллена и Гейтса, Ада Лавлейс написала и опубликовала компьютерную программу. Она тоже написала программу для компьютера, о котором знала только по описанию. Но её программа, в отличие от интерпретатора BASIC, никогда не выполнялась, потому что компьютер, для которого она была написана, так и не был построен.
Программу Лавлейс часто называют первой в мире компьютерной программой. Но не все согласны с тем, что её следует так называть. Наследие Лавлейс оказывается одной из самых горячо обсуждаемых тем компьютерной истории. Уолтер Айзексон писал, что диспут по поводу степени и достоинств её вкладов представляет «небольшую академическую важность». С неизбежностью диспут подогревает тот факт, что Лавлейс была женщиной. Историки цитировали всякого рода свидетельства, чтобы доказать, что оказываемые ей почести соответствуют случаю, или, наоборот, незаслуженны. Но они тратят гораздо меньше времени на объяснение технических деталей её опубликованной работы, что обидно, поскольку именно технические детали представляют самую интересную часть этой истории. Кому же неинтересно было бы узнать, как должна была работать программа, написанная в 1843 году?
Честно говоря, программу Лавлейс тяжело объяснить обывателям. Но именно запутанность её программы делает её такой примечательной. Достойна она зваться первым программистом, или нет, её программа была записана с такой точностью, которая превзошла всё, что было до этого. Она тщательно продумала, какие операции можно объединить в группы, которые можно будет повторять – изобретя, таким образом, цикл. Она поняла, как важно отслеживать состояние изменяющихся переменных, и придумала запись, отражающую эти изменения. Я, как программист, поражён тем, насколько работа Лавлейс напоминает опыт написания софта сегодня.
Так давайте же поближе познакомимся с программой Лавлейс. Она разработала её для подсчёта чисел Бернулли. Чтобы понять, что это такое, необходимо вернуться на пару тысячелетий в прошлое, к началу одной из наиболее старых задач математики.
Суммы степеней
Пифагорейцы жили на берегах Средиземного моря и поклонялись числам. Одним из их хобби было составление треугольников из гальки.
Один камень, за которым идёт ряд из двух камней, вместе составляют треугольник из трёх камней. Добавьте ещё один ряд из трёх камней, и получится треугольник из шести камней. Эту процедуру можно продолжать, каждый раз добавляя ряд с количеством камней, увеличивающимся на единицу. Треугольник из шести рядов содержит 21 камень. А сколько камней будет в треугольнике из 423 рядов?
Пифагорейцы искали способ подсчитать сумму следующего ряда, не проводя суммирование:
В итоге они поняли, что если расположить два треугольника одинакового размера рядом друг с другом так, чтобы они образовали прямоугольник, можно найти площадь прямоугольника и разделить её на два, чтобы получить количество камней в каждом из треугольников:
Архимед изучал схожую проблему. Его интересовала следующая последовательность:
Её можно представить себе, как столбик из квадратов всё большего размера (состоящих из крохотных кубиков), стоящих один на другом в виде пирамиды. Архимед хотел узнать, есть ли лёгкий способ сказать, сколько кубиков потребуется для создания пирамиды с, допустим, 423 уровнями. Он записал решение задачи, которое тоже допускает геометрическую интерпретацию.
Три пирамидки можно составить вместе, чтобы они сформировали прямоугольную призму, с одного конца которой есть небольшой выступ в один кубик высотой. Этот выступ представляет собой треугольник, подчиняющийся тем же правилам, что и каменные треугольники пифагорейцев. Поэтому объём всей фигуры задаётся следующим уравнением:
3(1 2 +2 2 +3 2 +⋯+n 2 ) = (n+1)n 2 +(1+2+3+⋯+n)
Подставляя уравнение пифагорейцев для суммы первых n целых чисел, и проведя некоторые алгебраические операции, получим:
1 2 +2 2 +3 2 +⋯+n 2 =n(n+1)(2n+1)/6
В 499 году индийский математик и астроном Ариабхата опубликовал свою работу, известную, как Ариабхатия, в которой была приведена формула для вычисления суммы кубов:
1 3 +2 3 +3 3 +⋯+n 3 =(1+2+3+⋯+n) 2
Формулу для суммы первых n положительных целых чисел в четвёртой степени опубликовали только 500 лет спустя.
К этому времени у вас мог появиться вопрос – а нет ли какого-нибудь универсального метода для вычисления суммы первых n целых чисел, возведённых в степень k? Математики тоже этим интересовались. Йохан Фаульхабер, немецкий математик, слегка подвинутый на нумерологии, смог вывести формулы для суммы целых вплоть до 17-й степени, опубликовав их в 1631 году. Но это заняло у него много лет, и общего решения он не дал. Блез Паскаль, наконец, придумал обобщённый метод в 1665 году, который, правда, зависел от подсчёта суммы целых чисел, возведённых в предыдущие степени. К примеру, для подсчёта суммы первых n положительных целых чисел, возведённых в 6-ю степень, вам нужно было сначала узнать, как подсчитать сумму первых n положительных целых чисел, возведённых в 5-ю степень
Более практичное обобщённое решение было приведено в посмертно опубликованной работе швейцарского математика Якоба Бернулли, умершего в 1705. Бернулли начал с того, что вывел формулы для подсчёта сумм первых n положительных целых чисел, возведённых в первую, вторую, третью и четвёртую степени. Он записал их в виде многочленов:
1 2 +2 2 +3 2 +⋯+n 2 =1/3n 3 +1/2n 2 +1/6n
1 3 +2 3 +3 3 +⋯+n 3 =1/4n 4 +1/2n 3 +1/4n 2
Используя треугольник Паскаля, Бернулли понял, что эти многочлены следуют предсказуемой закономерности. По сути, Бернулли разбил коэффициенты каждого члена на два множителя, один из которых он мог определить при помощи треугольника Паскаля, а другой – вывести из интересного свойства, по которому все коэффициенты в многочлене в сумме равнялись единице. Понять, какую экспоненту поставить у каждого члена, было несложно, поскольку они тоже следовали предсказуемой закономерности. Множители каждого коэффициента, которые нужно было вычислять по правилу «сумма равна единице», сформировали последовательность, которая стали известна, как числа Бернулли.
Открытие Бернулли не означало, что сумму первых n положительных целых чисел, возведённых в любую степень, теперь можно было вычислить тривиально. Чтобы подсчитать сумму первых n положительных целых чисел, возведённых в степень k, необходимо было узнать все числа Бернулли вплоть до k-того. А каждое число Бернулли можно было подсчитать, только зная все предыдущие. Но высчитывать длинную последовательность чисел Бернулли было несравненно легче, чем подсчитывать каждую сумму возведённых в степень чисел, поэтому открытие Бернулли стало большим прорывом для математики.
Бэббидж
Чарлз Бэббидж родился в 1791 году, почти через сто лет после смерти Бернулли. У меня всегда было такое представление о нём, что он разработал, но не построил механический компьютер. Но я никогда точно не понимал, как этот компьютер должен был работать. Как оказалось, основные идеи понять довольно легко. Программа Лавлейс должна была работать на одной из машин Бэббиджа, поэтому нам надо сделать ещё одно небольшое отступление и поговорить о том, как эти машины работали.
Бэббидж придумал две отдельных механических вычислительных машины. Первая называлась разностной машиной. До изобретения карманных калькуляторов, люди полагались на логарифмические таблицы для подсчёта произведения больших чисел. Большие логарифмические таблицы принципиально не так уж сложно составить, но количество вычислений, требовавшееся для их составления, приводило к тому, что во времена Бэббиджа в них часто содержались ошибки. Раздражённый этим, Бэббидж решил создать машину, способную механически создавать таблицы логарифмов, не допуская ошибок.
Разностная машина была не компьютером, потому что она умела только складывать и вычитать. Она пользовалась методом, придуманным французским математиком Гаспаром де Прони, разбившим процесс построения таблицы на мелкие шаги. Эти шаги требовали только сложения и вычитания, что означало, что для построения таблицы можно задействовать небольшую армию людей, не обладавших способностями к математике. Метод де Прони, известный, как метод разделённых разностей, можно было использовать для составления таблицы по любому многочлену. А многочлены уже можно было использовать для приближённого вычисления логарифмических и тригонометрических функций.
Чтобы представить себе, как работал этот процесс, рассмотрим следующую простую полиномиальную функцию:
Метод разделённых разностей находит разницу между последовательными значениями y для разных значений x. Затем находятся разницы между этими разностями, и затем, возможно, ещё разницы между последними разностями, до тех пор, пока не появляется постоянная разность. Эту разность затем можно использовать для получения следующего значения полинома через сложение.
Поскольку указанный многочлен имеет лишь вторую степень, мы можем найти постоянную разность после всего лишь двух столбцов разностей:
Теперь, зная, что постоянная разность равна 2, мы можем найти значение y, когда x равно 5, при помощи одного сложения. Сложив 2 и 7, последнее значение в столбце Diff 1, мы получим 9. Сложив 9 и 17, последнее значение в столбце y, мы получим 26 – наш ответ.
У разностной машины Бэббиджа для каждого разностного столбца таблицы был свой физический столбец с шестерёнками. Каждая шестерёнка представляла десятичную позицию, а весь столбец – десятичное число. У разностной машины было восемь колонок с шестернями, поэтому она могла составлять таблицы полиномов вплоть до седьмой степени. Колонки изначально ставили на значения, совпадающие с ранним рядом таблицы разностей, просчитанным заранее. Оператор затем должен был поворачивать коленчатый вал, что заставляло постоянную разность перемещаться по машине, когда значения, хранившиеся в каждой из колонок, добавлялись к следующим.
Бэббидж сумел построить небольшую часть разностной машины и использовать её для демонстрации своих идей на вечеринках. Но, даже потратив столько денег, что их хватило бы на постройку двух крупных боевых кораблей, он так и не смог завершить свою машину. В начале XVIII века Бэббидж не нашёл никого, кто смог бы изготовить нужное ему количество шестерней с нужной точностью. Рабочую версию разностной машины построили лишь в 1990-х годах, после появления высокоточных станков.
В итоге Бэббидж потерял интерес к разностной машине, поняв, что можно создать куда как более мощную и гибкую машину. Его «аналитическая машина» сегодня известно, как механический компьютер Бэббиджа. Аналитическая машина основывалась на тех же колонках шестерней, что и разностная, но если у последней было всего восемь колонок, то у аналитической их должно было быть несколько сотен. Аналитическую машину можно было бы программировать при помощи перфокарт, как жаккардовый ткацкий станок, и она могла бы делить и умножать, а не только складывать и вычитать. Для выполнения одной из этих операций часть машины под названием «мельница» перестраивала бы себя в нужную конфигурацию, считывала бы операнды с других колонок, использовавшихся для хранения данных, а потом писала бы результат на другие колонки.
Бэббидж назвал её аналитической машиной, поскольку она была достаточно мощной для того, чтобы заниматься чем-то, напоминающим матанализ. Разностная машина могла выдавать таблицы полиномов, но аналитическая машина могла бы подсчитать, к примеру, коэффициенты полиномиального размножения другого выражения. Это была удивительная машина, но британское правительство приняло мудрое решение отклонить запрос на её финансирование. Поэтому Бэббидж направился за границу, в Италию, чтобы там попробовать найти себе поддержку.
Примечания переводчицы
В Турине Бэббидж познакомился с итальянским инженером и будущим премьер-министром Луиджи Федерико Менабреа. Он убедил Менабреа написать обзор возможностей аналитической машины. В 1842 Менабреа опубликовал работу по этой теме на французском языке. В следующем году Лавлейс опубликовала перевод работы Менабреа на английский.
Лавлейс, известная тогда, как Ада Байрон, познакомилась с Бэббиджем на вечеринке в 1833 году, когда ей было 17, а ему 41. Лавлейс была поражена разностной машиной Бэббиджа. Но она смогла разобраться, как та работает, поскольку в детстве её активно обучали математике. Её мать, Анабелла Милбанк, решила, что твёрдая математическая основа образования дочки отвадит от неё дикую и романтическую натуру, которой обладал её отец лорд Байрон, знаменитый поэт. После знакомства в 1833 году Лавлейс и Бэббидж оставались в общем социальном кругу и часто переписывались.
Ада Байрон вышла замуж за Уильяма Кинга в 1835. Кинг позднее стал графом Лавлейсом, вследствие чего Ада стала графиней Лавлейс. И даже родив троих детей, она продолжала обучаться математике, взяв в учителя Огастеса де Моргана, открывшего законы Моргана. Лавлейс сразу распознала потенциал аналитической машины, и с готовностью согласилась работать с ним для продвижения этой идеи. Её друг предложил ей перевести работу Менабреа для английской аудитории.
В работе содержалось краткое описание работы разностной машины, а потом было показано, насколько бы её превзошла аналитическая машина. Аналитическая машина должна была быть настолько мощной, что могла бы «сформировать результат перемножения двух чисел, каждое из которых состоит из двадцати знаков, всего за три минуты». Менабреа дал и другие примеры возможности машины, демонстрируя, как она решала бы простую систему линейных уравнений и раскладывала бы результат перемножения двух биномов. В обоих случаях Менабреа представил то, что Лавлейс назвала «диаграммами развития», описывавшими последовательность операций, необходимых для вычисления правильного ответа. Это были программы, в том же смысле, в каком программа Лавлейс была программой, и они были опубликованы за год до её работы. Но, как мы увидим, программы Менабреа были всего лишь примерами возможного. Все они были тривиальными в том смысле, что не требовали никакого разветвления или циклов.
Лавлейс добавила несколько примечаний к своему переводу работы Менабреа, и в сумме они оказались длиннее оригинальной работы. Именно там она сделала свой основной вклад в вычисления. В примечании А, которое Лавлейс сделала к изначальному описанию аналитической машины, она подробно, и иногда лирически объясняла, что эта машина сможет выполнять произвольные математические операции. Она предвидела, что машина, подобная этой, не будет ограничена работой с числами, и сможет обрабатывать любые объекты, «чьё взаимное фундаментальное взаимодействие можно выразить абстрактной наукой операций, и которые можно приспособить к операционным записям и механизму машины». Она добавила, что когда-нибудь такая машина сможет, например, сочинять музыку. Такое предвидение было тем более примечательно, что сам Менабреа считал эту машину лишь инструментом для автоматизации «длительных и скучных вычислений», который бы освободил интеллектуальные возможности гениальных учёных для более передовых исследований. Чудесное предвидение Лавлейс, продемонстрированное в примечании А, является одной из главных причин того, почему мы чествуем её сегодня.
Другое знаменитое примечание – примечание G. Лавлейс начинает его, утверждая, что, несмотря на впечатляющие возможности, нельзя сказать, что аналитическая машина «думает». Именно это примечание Алан Тьюринг позже будет называть «возражением Ады Лавлейс». Тем не менее, продолжает Лавлейс, машина способна на удивительные вещи. Для демонстрации возможности обработки более сложных задач, Лавлейс предлагала свою программу для вычисления чисел Бернулли.
Полный её текст, в виде расширенной «диаграммы развития», формат которой Лавлейс описывает в примечании D, можно посмотреть тут. Это, по сути, список операций, обозначенных математическими символами. Не похоже, чтобы Бэббидж или Лавлейс зашли так далеко, чтобы разработать набор операционных кодов для аналитической машины.
Хотя Лавлейс описывала метод вычисления полной последовательности чисел Бернулли до определенного предела, приведённая ею программа показывала только один шаг этого процесса. Она подсчитывала число, которое она назвала B7, известное современным математикам, как восьмое число Бернулли. Поэтому её программа решала следующее уравнение:
Тут каждый член представляет коэффициент в полиномиальной формуле для суммы целых чисел, возведённых в определённую степень. Тут речь идёт о восьмой степени, поскольку восьмое число Бернулли впервые появляется в формуле для суммы целых положительных чисел, возведённых в восьмую степень. Числа B и A представляют два вида множителей, открытых Бернулли. Числа от B1 до B7 – различные числа Бернулли, пронумерованные согласно Лавлейс. Числа от A0 до A5 представляют собой множители коэффициентов, которые Бернулли мог вычислить при помощи треугольника Паскаля. Значения A0, A1 и A3 приведены ниже. Здесь n обозначает индекс числа Бернулли в последовательности нечётных чисел Бернулли, начинающихся с первого. В программе Лавлейс n = 4.
Я перевёл программу Лавлейс на язык C, и так, наверное, её будет проще читать. Сначала её программа вычисляет A0 и результат умножения B1A1. Затем начинается цикл, повторяющийся дважды, для вычисления B3A3 и B5A5, поскольку они считаются по одной схеме. После подсчёта каждого перемножения, результат добавляется к предыдущим, поэтому к концу программы получается полная сумма.
Очевидно, что перевод на C не может быть точным воспроизведением программы Лавлейс. Он объявляет переменные в стеке, а переменные Лавлейс больше были похожи на регистры. Но он делает более очевидной наиболее пророческую часть программы Лавлейс. В программе на C есть два цикла while, один внутри другого. У программы Лавлейс не было циклов while, но она сгруппировала операции, и описала в примечании, почему они должны повторяться. Переменная v10 из оригинальной программы и в переводе на C, работает счётчиком, уменьшающимся с каждым проходом цикла – подобная конструкция знакома каждому программисту. В общем, кроме изобилия переменных с непонятными именами, программа на C не выглядит чем-то незнакомым.
Стоит также отметить, что перевод программы Лавлейс на C был не очень сложным, благодаря одной детали в её диаграмме. В отличие от таблиц Менабреа, в её таблице есть столбец «признак изменения значения переменной», благодаря которому гораздо проще отслеживать изменение состояния. Она добавляет каждой переменной надстрочный индекс, чтобы обозначить хранящиеся в них последовательные значения. Индекс 2, к примеру, означает, что используемое значение – это второе значение, присвоенное переменной с начала программы.
Первый программист?
После того, как я перевёл программу Лавлейс на язык C, я смог запустить её на компьютере. К моему разочарованию, результат получался неверный. После поиска ошибок я, наконец, понял, что проблема была не с моим кодом – баг содержался в изначальной программе!
В «диаграмме развития» Лавлейс пишет в четвёртой операции v5 / v4. Но правильно будет v4 / v5. Эта ошибка могла появиться при печати, а не у Лавлейс. Так или иначе, это самый старый компьютерный баг. Я удивился тому, что порядка десяти минут потратил на поиск самого первого бага в истории.
Джим Рэндал, другой блогер, переведший программу Лавлейс на Python, также отметил этот баг с делением и две других проблемы. О чём говорят нам небольшие ошибки в опубликованной программе Ады Лавлейс? Возможно, о том, что она пыталась написать не просто демонстрацию, а настоящую программу. Ведь нельзя же писать что-то, кроме игрушечных программ, избегая ошибок?
В одной из статей Википедии написано, что Лавлейс первая опубликовала «сложную программу». Возможно, именно так и стоит воспринимать её достижение. Менабреа в своей работе опубликовал «диаграммы развития» за год до публикации перевода Лавлейс. Бэббидж также написал более двадцати программ, так и не опубликованных. Поэтому не совсем верно писать, что Лавлейс написала или опубликовала первую программу, хотя всегда можно поспорить о том, что считать программой. И всё равно, программа Лавлейс намного опередила всё, что было опубликовано до неё. В самой длинной программе Менабреа было 11 операций и не было циклов и ветвлений. В программе Лавлейс было 25 операций и вложенный цикл (а, следовательно, и ветвление). Менабреа в конце своей работы написал следующее:
После постройки машины трудности сведутся к изготовлению карточек; но поскольку это всего лишь перевод алгебраических формул, посредством некоей простой записи будет довольно просто перепоручить их выполнение какому-нибудь рабочему.
Ни Бэббидж, ни Менабреа особенно не интересовались применением аналитической машины к задачам, выходящим за пределы математических проблем, которые и подвигли Бэббиджа к созданию вычислительных машин. Лавлейс поняла, что аналитическая машина была способна на гораздо большее, чем могли представить себе Бэббидж и Менабреа. Лавлейс также уловила, что «изготовление карточек» не станет механической работой, и что этим можно заниматься плохо или хорошо. Сложно оценить это, не понимая её программу из примечания G, и не видя, сколько заботы она проявила при её разработке. Но, проделав это, вы можете согласиться с тем, что Лавлейс, даже не будучи самым первым программистом, была первым программистом, заслужившим это название.