Программа ады лавлейс для машины бэббиджа

Как дочь великого английского поэта Байрона стала первым в мире программистом. История Ады Лавлейс

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

О детстве, отрочестве и немного о личном

10 декабря 1815 года в Лондоне, в семье известного английского поэта Джорджа Гордона Байрона и Анны Изабеллы, баронессы Уэнворт, родилась девочка. Надо сказать, что лорд Байрон очень ждал «славного мальчика» и был весьма разочарован, когда ему сообщили о рождении дочери. При рождении девочке дали имя Августа, в честь сестры Байрона, однако, позже, когда её родители разойдутся, девочку будут называть Адой.

Родители Ады разошлись, когда ей было всего-то пять недель. Ада должна была остаться с отцом — по правилам того времени в случае развода мужчина получал полную опеку над своими детьми, но в случае с семейством Байронов всё сложилось иначе. Лорд Байрон не особо рвался оставить дочь у себя, и когда жена увезла девочку к своим родителям в Киркби Мэллори, не предпринял никаких попыток отстоять свои родительские права. По итогу, отношения Ады с отцом так и не сложились, а может и не успели сложиться — поэт умер в 1824 году, когда Аде было всего восемь лет. Не получилось у нее и близких отношений с матерью. Леди Байрон часто оставляла дочь на попечении своей бабушки, миссис Джудит Хон. Информация в источниках сильно разнится, одни говорят, что несмотря ни на что, мать всё же была у Ады на первом месте, и что леди Байрон принимала участие в воспитании своей дочери; другие говорят, что их встречи была весьма редкими. Но факт, миссис Байрон пригласила для своей дочери хороших учителей:

Чем старше становилась Ада, тем теснее становилась её дружба с Мэри Сомервилль. Именно она в 1833 году познакомила Аду Лавлейс с Чарльзом Бэббиджем — английским математиком, который изобрёл первую аналитическую вычислительную машину. Среди других знакомых Ады были писатель Чарльз Диккенс, учёный-любитель Эндрю Кросс, шотландский физик Дейвид Брюстер, физик Чарльз Уитстон. В возрасте семнадцати лет Ада Лавлейс была представлена при дворе и получила титул «popular bell of the season» (красавица сезона). Отчасти это звание было дано из-за блестящего ума Ады. К 1843 году девушка стала завсегдатаем королевских мероприятий.

Чарльз Бэббидж и его аналитическая вычислительная машина

14 июня 1822 года Чарльз Бэббидж представил Королевскому обществу Великобритании свою модель разностной машины. По замыслу Бэббиджа, его чудо-машина должна была с большой точностью вычислять корни многочленов, вплоть до шестой степени. К сожалению, математик не смог воплотить свою задумку в жизнь, это за него сделал шведский изобретатель Георг Штутцу. Однако, Штутцу опирался на советы и опыт Бэббиджа и, по итогу, даже взялся за куда более амбициозный проект.

Читайте также: Как гитарист стал биологом, а потом придумал философию современных компьютеров. История великого Алана Кея

Ада Лавлейс — известность и признание

Известность к Аде пришла с переводом статьи Луиджи Менабреа — признанного инженера, который написал много работ по механике и математике. Среди них были его заметки о разностной машине Бэббиджа. В 1843 году эта статья Менабреа была опубликована с заметками Ады Лавлейс (собственно, она её и перевела). В заметках Лавлейс писала, что машина, подобная аналитической машине Бэббиджа, когда-нибудь сможет обрабатывать не только цифры, но и любые другие объекты: например, создавать музыку, живопись, формулы. Надо сказать, что заметки Лавлейс получились куда объёмнее и шире самой статьи Менабреа. В том же 1843 году Ада Лавлейс написала программу для подсчёта чисел Бернулли.

Примечание: Числа Бернулли — последовательность рациональных чисел, впервые рассмотренная Якобом Бернулли в связи с вычислением суммы последовательных натуральных чисел, возведённых в одну и ту же степень.

Программа Ады весьма запутанна. По сути, Ада продумала операции, которые можно объединить в группы. В свою очередь, эти группы могли повторяться, что образовывало рекуррентные вложенные циклы. Таким образом, программа Ады отслеживала состояние изменяющихся переменных и записывала эти изменения.

Так получилось, что Ада написала эту программу для потомков — ведь компьютеров тогда еще не было. Уже в наше время программисты пробовали переложить программу Ады на Python и C, но без результатов. В итоге разработчики даже нашли ошибку в расчётах Ады. Вот вам собственно и первый баг! Как отметил блогер Джим Рэндал, переложивший программу Ады на Python: «в «диаграмме развития» Лавлейс пишет v5/v4, но правильно будет v4/v5. Эта ошибка могла появиться при печати, а не у Лавлейс».

Язык программирования «Ада»

В 1979-1980 годах, в рамках проекта Министерства Обороны США был создан объектно-ориентированный язык программирования «Ада», названный в честь Лавлейс. Этот язык имеет компиляторы под практически любую операционную систему. В него включены поддержки параллельного исполнения, настройка модулей, обработка исключений. Синтаксис у «Ады» вполне читаемый:

Почти все ошибки улавливаются на этапе компиляции. Основным требованием к языку была максимальная читаемость кода в распечатанном виде, что, в общем, сделало его негибким и тяжеловесным. В наше время на программных разработках «Ады» сидит авиация. Также «отголоски Ады» можно видеть в банковских системах и софте для атомных станций.

Послесловие

Ада Лавлейс скончалась 18 ноября 1852 года; как и её отец, она умерла в возрасте 36 лет. Причиной смерти стала кровопотеря. В то время было очень «модным» любой недуг лечить кровопусканием, что, собственно, Аду и убило. Но с другой стороны, если бы она не умерла от кровопотери, то умерла бы от рака — у Ады был рак матки. По распоряжению Лавлейс, ее похоронили рядом с отцом в церкви Святой Марии Магдалины в Хакнелле, Ноттингемшир, в семейном склепе Байронов.

Источник

Ада Лавлейс. Первая в мире программа и взгляд в будущее

10 декабря 1815 года на свет появилась Ада Лавлейс, большинству из нас известная как самый первый в мире программист. Так уж получилось, что это звание принадлежит представительнице прекрасного пола. Сегодня исполняется двести один год со дня рождения этого человека. И в этом посте я бы хотел немного рассказать о самых интересных моментах из ее жизни, не отделываясь обрывочными фразами, но и не слишком уж углубляясь в детали. Материал можно найти, где угодно, имея под рукой Интернет. Однако мало кто полезет искать его просто ради интереса. Поэтому кому интересно, добро пожаловать под кат.

Учась в школе, сидя на уроках литературы, я прекрасно знал, кто такой Джордж Байрон.

Мы читали и по желанию заучивали его стихотворения. Спустя время, выбрав себе профессию я узнал о том, кем была загадочная Ада Лавлейс – первая девушка-программист, дочь того самого лорда Джорджа Байрона. Тогда для меня это оказалось удивительным открытием. Я на всю жизнь запомнил, кем была Ада и, как-то совсем незаметно для самого себя, забыл о самом Байроне.

Августа Ада Кинг (впоследствие графиня Лавлейс, но об этом чуть позже) – была дочерью английского поэта лорда Джорджа Гордона Байрона и его жены – Анны Изабеллы Байрон. Однако Байрон спустя месяц после рождения своей дочери покинул их, и они больше никогда не виделись. Сам Байрон умер, когда Аде было восемь лет. Сам он еще не раз вспоминал свою дочь в своих стихах.

Видно, что Ада сама росла в довольно талантливой семье. Ее мать, Анна Изабель, еще до рождения дочери сильно интересовалась математикой, за что когда-то получила от мужа забавное прозвище – “королева параллелограммов”. Это была действительно необычная семья. Анне после ухода мужа все же удалось воспитать дочь в одиночку и вот что из этого получилось.

В двенадцать лет Ада собрала свой летательный аппарат! До этого двенадцатилетняя девочка некоторое время запиралась от матери в комнате и что-то писала. Мать боялась, что она начнет зачитываться стихами отца и пойдет той же дорогой. Однако все это время она чертила.

Математическая логика занимала ее больше всего остального. Однажды Ада заболела и три года провела в постели. Но все это время она хотела и продолжала учиться. К ней приходили самые разные доктора и учителя. Одним из них был Август де Морган – известный математик и логик (да-да, закон де Моргана назван в его честь). С тех пор Ада еще больше погрузилась в мир математики.

В итоге Ада выросла уникальной девушкой. Она была красива и умна, точно также как и ее мама занималась математикой, а в разговорах на научные темы обходила даже ребят из Кембриджа и Оксфорда. Среди других людей, в основном женского пола, это вызвало скрытую злость и зависть. О ней нередко говорили как о чем-то темном, даже дьявольском. Надо сказать, что Ада и сама в себе чувствовала необычные силы (забавно, но на русском ее имя звучит и правда немного дьявольски). Но в этом нет ничего необычного, так как девушка-математик в высшем английском обществе того времени – со стороны это действительно выглядело странно. А многие мужчины меж тем были от нее без ума.

Математика математикой, но как же так вышло, что помнят о ней в первую очередь именно программисты? Одной из самых судьбоносных встреч Ады Лавлейс стала встреча с Чарльзом Бэббиджем – изобретателем первой аналитической вычислительной машины.

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

Им было создано огромное количество чертежей, а сам прототип закончен в 1832 году, тот самый, который Ада Лавлейс увидит спустя год.

В 1835 году Ада выйдет замуж за очень достойного человека – барона Уильяма Кинга, который впоследствии был удостоен титула графа, а сама Ада стала графиней Лавлейс. Спустя четыре года у них уже было трое детей – два сына и дочь. Сыновьям Ада дала имена в честь отца – одного назвали Ральфом Гордоном, а другого – Байроном.

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

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

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

Сама Ада Лавлейс умерла 27 ноября 1852 года всего в возрасте 36 лет. Ровно столько, сколько прожил ее отец. Ее похоронили в фамильном склепе вместе с отцом, которого она так и не узнала.
В честь Ады Лавлейс был назван разработанный в 1980-х годах Министерством Обороны США язык программирования Ада.

P.S. Наверное, тем людям, у которых фраза “Первым программистом была девушка” вызывает недовольство или улыбку, стоит хотя бы раз поинтересоваться биографией этого человека. О таких людях, как Ада Лавлейс или Алан Тьюринг и о многих других стоит помнить. А для кого-то эти истории еще один повод понять, что в мире нет ничего невозможного.

Спасибо тем, кто прочел эту статью. Делитесь своими мнениями, комментариями или замечаниями).

Источник

Аналитическая машина Бэббиджа. Часть третья — заключительная

(Для начала советую прочесть первую и вторую части статьи.)
Разностная машина Чарльза Бэббиджа впервые позволила автоматизировать процесс вычислений и производить его в некоторой степени без вмешательства человека. Как было сказано в предыдущей части, для вычисления функций типа логарифма, тригонометрических функций и прочих, их необходимо было разбить на участки, каждый из которых представлялся своим многочленом, и только потом можно было произвести расчёт значений функции для данного участка. Переходя от одного многочлена к другому, оператор машины должен был вручную ввести все исходные значения регистров. К тому же машина позволяла производить только операцию сложения, что было не много даже по меркам 19го века.

Раздумывая над этой проблемой, Бэббидж пришёл к выводу, что можно построить такую машину, которая бы сама меняла значения исходных регистров в зависимости от значения результата. То есть сама бы могла управлять процессом вычислений. В дальнейшем, развивая эту идею, Бэббидж пришёл к мысли не просто сделать машину, которая бы табулировала функцию полностью автоматически, а создать машину которая бы позволяла решать весь класс вычислительных задач. Для этого алгоритм такой машины должен быть не жёстко зашит в её конструкцию, а задаваться извне, а сама машины должна уметь выполнять все арифметические операции, а также управлять ходом выполнения вычислений. Новую вычислительную машину Бэббидж назвал Аналитической.

Основными частями Аналитической машины являлись:
1.«склад» — устройство для хранения чисел, то есть память в современной терминологии;
2.«мельница» — устройства для выполнения арифметических действий (Арифметическое устройство);
3.устройство, управляющее операциями машины;
4.устройства ввода и вывода;

(Элемент «мельницы». Рисунок Генри Бэббиджа. Источник)

В такой архитектуре не сложно узреть прообраз современного компьютера с его памятью, процессором (мельница + устройство управления) и устройствами ввода вывода.

«Шину обмена» данными между АЛУ и памятью представлял собой набор зубчатых реек. Объём памяти должен был составлять тысячу чисел по 50 десятичных знаков. Для числа из 50-ти десятичных разрядов со знаком необходимо 168 бит, то есть объём ОЗУ был чуть больше двадцати килобайт. Для сравнения советую здесь посмотреть объём ОЗУ первых компьютеров.

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

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

Операции умножения и деления предполагалось реализовать как последовательные сложения или вычитания.

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

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

(Ткацкий станок с картами Жаккара. Источник)

Во время прибывания Бэббиджа в Италии к нему обратился метематик, профессор Мосотти. «Он заметил, что теперь вполне готов поверить в способность механизма овладеть арифметическими и даже алгебраическими соотношениями в любой нужной степени. Но он добавил что не может понять, как машина может сделать выбор, который часто необходим при аналитическом исследовании (то есть в процессе вычислений), когда представляются два или более путей, особенно в том случае, когда правильный путь, как это часто бывает, неизвестен до тех пор, пока не проделаны предшествующие вычисления». На этот случай в Аналитической машине была предусмотрена возможность организации условного выполнения и циклов. Для этого механизм переноса последнего разряда управлял движением перфокарт и мог заставить этот механизм повторить действие либо пропустить его.

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

Работая над аналитической машиной, Бэббидж сделал более 200 чертежей её различных узлов и около 30 вариантов компоновки машины. Однако размер замысла, и сложный характер изобретателя отсрочили рождение его изобретений на добрую сотню лет. Если взглянуть на разностную машину, которая по замыслу Бэббиджа должна был табулировать до 20-го знака функции с постоянными седьмыми разностями, то близкая по возможностям машина появилась в 1934-м году — она табулировала функции с постоянными разностями седьмого порядка и с точностью до 13 знаков. Что же говорить об исполинских возможностях задуманной аналитической машины…

(Часть печатающего механизма машины. Источник)

После смерти Чарльза Бэббиджа, его сын, Генри, занялся аналитической машиной, решив сосредоточиться на двух узлах — «мельнице» и печатающем устройстве. В 1888-м году были готовы данные узла машины, которые смогли вычислить и напечатать произведение на числа натурального ряда с 29 знаками. При вычислении 32-го члена машина выдала неверный результат из-за сбоя в механизме переноса. Всю оставшуюся жизнь Генри продолжал работу над аналитической машиной отца, а также занимался популяризацией идей вычислительных машин.

Не смотря на то, что Бэббидж за свою жизнь написал немало книг и статей, он так и не создал подробного изложения принципов работы разностной и аналитической машины, так как считал создание машин более важным занятием, нежели их описание. Подробное описание разностной машины было дано Дионисием Ларднером, а аналитическая машина была описана в статье Луиджи Фредериго Менабреа. Именно эта статья и привела к тому, что на свет появилась первая в мире программа и первый программист. Честь носить такое звание имеет Ада Августа Лавлейс, дочь поэта Байрона. Чарльз Бэббидж был знаком с семьёй юной талантливой девушки и всячески поощрял её тягу к науке. Однажды Ада заинтересовалась вычислительными машинами Бэббиджа и взялась за перевод статьи Менабреа. Работая над переводом, Ада, дополнила её своими комментариями, примерами практического использования машин, а также составила «программу» вычисления чисел Бернулли. Имя Ады было увековечено в названии одного из языков программирования — Ада (Ada). Подробнее углубляться в биографию Ады я не буду, т.к. данная тема уже была раскрыта на хабре.

Судьба Чарльза Бэббиджа была не менее сложная, чем судьба его вычислительных машин. Отношение современников к этому учёному со временем менялось от гения до чудака и даже до изобретателя, повредившегося рассудком на почве вычислительных машин. За свою жизнь он создал большое количество разнообразных изобретений, таких как спидометр, динамометр, придумал единый почтовый тариф и прочее. Президент Королевского общества лорд Росс писал что «Бэббидж только своими изобретениями в области машиностроения вполне возместил те средства, которые правительство вложило в строительство его разностной машины».

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

PS: Всем кому интересны механические вычислительные машины, их история создания, описание конструкции и принципов работы и зарождение их электронных собратьев рекомендую найти и прочитать книгу «От абака до компьютера» за авторством Р. С. Гутера и Ю. Л. Полунова 1981 года издания.

Источник

Что на самом деле делала программа Ады Лавлейс?

Эпизод с основанием 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, и не видя, сколько заботы она проявила при её разработке. Но, проделав это, вы можете согласиться с тем, что Лавлейс, даже не будучи самым первым программистом, была первым программистом, заслужившим это название.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • программа адобе флеш плеер для чего нужна
  • программа адобе ридер для чего нужен
  • программа адобе акробат для чего нужна
  • Программа адепт проект для чего
  • Программа адгуард что это

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии