История создания Microsoft — один из самых известных эпизодов в
вычислительная история. В 1975 году Пол Аллен вылетел в Альбукерке, чтобы продемонстрировать
интерпретатор BASIC, который он и Билл Гейтс написал для Альтаира
микрокомпьютер. Потому что ни у кого из них не работал Альтаир, Аллен и Гейтс
протестировали их интерпретатор, используя эмулятор, который они написали, и побежали в Гарварде
компьютерная система. Эмулятор был основан не что иное, как опубликованный
спецификации для процессора Intel 8080. Когда Аллен, наконец,
переводчика на реальном Альтаире перед человеком, которого он и Гейтс надеялись бы
купите свое программное обеспечение — он понятия не имел, будет ли это работать. Но это было так. В следующем месяце,
Аллен и Гейтс официально основали свою новую компанию.
За сто лет до того, как Аллен и Гейтс написали своего переводчика BASIC, Ада
Лавлейс написал и опубликовал компьютерную программу. Она также написала программу для
компьютер, который был только описан ей. Но ее программа, в отличие от
Microsoft BASIC-переводчик никогда не запускался, потому что компьютер, которым она был
таргетинг никогда не строился.
Программа Лавлейса часто называют первой в мире компьютерной программой. Не
все согласны с тем, что его следует называть так. Оказалось, что наследие Лавлейса,
является одним из самых горячих дебатов по истории. Уолтер Исааксон
что спор о степени и заслугах ее вкладов
представляет собой «второстепенную академическую специальность». Неизбежно тот факт, что
Лавлейс была женщиной, которая сделала этот спор заряженным. Историки цитировали
все виды первичных доказательств, чтобы утверждать, что кредит, предоставленный Лавлейсу,
либо надлежащим, либо незаслуженным. Но они, похоже, тратят меньше времени на объяснение
технические подробности ее опубликованного письма, что является неудачным, потому что
технические детали — самая захватывающая часть истории. Кто бы
хотите точно знать, как должна была работать программа, написанная в 1843 году?
Справедливости ради, программа Лавлейса нелегко объяснить непрофессионалу без
некоторые ручные махали. Это тонкости ее программы, хотя и делают это так
замечательный. Должна ли она быть известна как «первый программист», ее
программа была указана со степенью строгости, которая намного превосходила все, что
раньше. Она внимательно изучила, как операции могут быть организованы в
группы, которые могут быть повторены, тем самым изобретая цикл. Она поняла, как
важно было отслеживать состояние переменных по мере их изменения, вводя
чтобы проиллюстрировать эти изменения. Будучи программистом, я поражен
посмотрите, сколько из того, что сделал Лавлейс, напоминает опыт написания
программное обеспечение сегодня.
Итак, давайте подробнее рассмотрим программу Лавлейса. Она разработала его для расчета
числа Бернулли. Чтобы понять, что это такое, мы должны вернуться
пара тысячелетий до генезиса одной из самых старых проблем математики.
Содержание статьи
Суммы держав
Пифагорейцы жили на берегах Средиземного моря и поклонялись
номера. Одним из их игр было создание треугольников из гальки.
Один камешек, за которым следует ряд двух гальков, образует треугольник
содержащий три гальки. Добавьте еще одну строку из трех гальков, и вы получите
треугольник, содержащий шесть гальки. Вы можете продолжать так, каждый раз добавляя
строка с еще одним галькой в ней, чем предыдущая строка. Треугольник с шестью рядами
содержит 21 гальку. Но сколько гальки делает треугольник с 423 рядами
содержит?
То, что искали пифагорейцы, было способом рассчитать следующее
не делая все дополнение:
В конце концов они поняли, что если вы разместите два треугольника одинакового размера
друг против друга, так что они образуют прямоугольник, вы можете найти область
прямоугольник и разделите на два, чтобы получить количество гальки в каждом из
треугольники:
Архимед позже исследовал аналогичную проблему. Его интересовало следующее
серия:
Вы можете визуализировать эту серию, представив стопку более
квадраты (сделанные из крошечных кубиков), один поверх другого, образуя пирамиду.
Архимед хотел узнать, есть ли простой способ рассказать, сколько кубов
необходимо построить пирамиду с, скажем, 423 уровнями. Он записал решение
что также допускает геометрическую интерпретацию.
Три пирамиды могут быть собраны вместе, чтобы сформировать прямоугольную призму с крошечным,
экструзия с одним кубом на одном конце. Эта небольшая экструзия оказывается
треугольник, который подчиняется тем же правилам, которые пифагорейцы использовали для создания своих
галечные треугольники. (Это видео
может быть более полезным объяснением того, что я имею в виду.) Таким образом, объем всего
форма определяется следующим уравнением:
Подставив уравнение Пифагора для суммы первого n
целые числа и выполнение некоторой алгебры, вы получите следующее:
В 499 году индийский математик и астроном Ариабхата опубликовал работу
известный как Aryabhatiya который включал формулу для вычисления суммы
Кубики:
Формула для суммы первых n положительных целых чисел, поднятых до четвертой
власть не была опубликована еще 500 лет.
Возможно, вам стоит подумать, есть ли общий метод для поиска
сумма первых n целых чисел, поднятых до мощности kth .
Математики тоже задавались вопросом. Иоганн Фолхабер, немецкий математик и
слегка скучный нумеролог, смог вычислить формулы для сумм
целые до 17-й степени, которые он опубликовал в 1631 году. Но это может иметь
занял его много лет, и он не сказал общего решения. Блез Паскаль
наконец, изложил общий метод в 1665 году, хотя он зависел от первого знания
как вычислить сумму целых чисел, поднятых до каждой меньшей мощности. к
вычислить сумму первых n положительных целых чисел, поднятых до шестой степени,
например, вам сначала нужно знать, как рассчитать сумму первого
n положительные целые числа, поднятые до пятой степени.
Более практичное общее решение было указано в посмертно опубликованной работе
швейцарского математика Якоба Бернулли, умершего в 1705 году. Бернулли начал с
получая формулы для вычисления сумм первого n положительных
целые числа к первой, второй и третьей степени. Они дали
полиномиальной формы, поэтому они выглядели следующим образом:
Используя Треугольник Паскаля, Бернулли понял, что эти полиномы следуют за
предсказуемой картины. По сути, Бернулли разбил коэффициенты каждого
на два фактора, один из которых он мог бы определить с помощью Паскаля
Треугольник и другие, которые он мог бы извлечь из интересного свойства, которое
все коэффициенты в многочлене, казалось, всегда добавляли к одному. Выяснение
из экспоненты, которые должны быть прикреплены к каждому термину, не было проблемой,
потому что это также следовало предсказуемой схеме. Коэффициент каждого
коэффициент, который должен был быть рассчитан с использованием правила sum-to-one, сформировал
последовательность, которая стала известна как числа Бернулли.
Открытие Бернулли не означало, что теперь было тривиально рассчитать сумму
от первого положительного n целых чисел к любой заданной мощности. Чтобы рассчитать
сумма первых положительных n целых чисел, поднятых к мощности kth
вам нужно знать каждое число Бернулли до кт Бернулли
номер. Каждое число Бернулли могло быть рассчитано только в том случае, если предыдущий
Числа Бернулли были известны. Но вычисление длинной серии Бернулли
числа были значительно проще, чем выработка формулы суммы сумм сил в
так что открытие Бернулли было большим успехом для математики.
Беббидж
Чарльз Бэббидж родился в 1791 году, спустя почти столетие после смерти Бернулли. Я
всегда была какая-то неопределенная идея о том, что Бэббидж разработал, но не создал механическую
компьютер. Но я никогда не понимал, как этот компьютер должен был
Работа. Основные идеи, как это бывает, не так сложно понять, что
хорошие новости. Программа Lovelace была разработана для работы на одной из машин Babbage,
поэтому нам нужно сделать еще один быстрый обход, чтобы поговорить о том, как эти машины
работал.
Бэббидж разработал две отдельные механические вычислительные машины. Его первая машина
был назван Разностным движком. Перед изобретением кармана
калькулятор, люди полагались на логарифмические таблицы, чтобы вычислить произведение
большое количество. (Существует хороший Numberphile
видео о том, как это было сделано.) Большая логарифмическая
таблицы не сложно создать, по крайней мере концептуально, но простое число
расчетов, которые необходимо сделать для их создания, означает, что в
Время Бэббиджа часто содержало ошибки. Бэббидж, разочарованный этим, искал
для создания машины, которая могла бы механически вставлять логарифмы и, следовательно,
без ошибок.
The Difference Engine не был компьютером, потому что все, что он сделал, это добавить и
вычитать. Он воспользовался методом, разработанным французским математиком
Гаспар де Прони, нарушивший процесс табуляции логарифмов в
небольшие шаги. Эти небольшие шаги включали только сложение и вычитание,
это означает, что небольшая армия людей, не имеющих особых математических способностей
или обучение может быть использовано для производства таблицы. Метод Де Прони, известный как
метод разделенных разностей, можно использовать для табулирования любого многочлена.
Полиномы, в свою очередь, могут быть использованы для аппроксимации логарифмических и
тригонометрические функции.
Чтобы понять, как этот процесс работал, рассмотрите следующие простые
полиномиальная функция:
Метод разделенных различий включает в себя поиск разницы между каждым
последовательная величина y для разных значений x . Различия
между этими различиями, и, возможно, различия между
эти следующие различия сами по себе, пока не появится постоянная разница. Эти
разности можно затем использовать для получения следующего значения полинома просто путем
добавления.
Поскольку вышеупомянутый многочлен — это только многочлен второй степени, мы можем
найти постоянную разницу только после двух столбцов различий:
х | у | Diff 1 | Diff 2 |
---|---|---|---|
1 | 2 | ||
2 | 5 | 3 | |
3 | 10 | 5 | 2 |
4 | 17 | 7 | 2 |
5 | ? | ? | 2 |
… | … | … | … |
Теперь, поскольку мы знаем, что постоянная разница равна 2, мы можем найти значение
y когда x имеет значение 5 только путем добавления. Если мы добавим 2 к 7, последняя запись в
столбец «Diff 1», получаем 9. Если мы добавим 9 к 17, последняя запись в y
колонке, получаем 26, наш ответ.
Двигатель разброса Babbage имел, для каждого столбца разницы в таблице, как
один выше, физический столбец передач. Каждая передача была десятичной цифрой и одной
целая колонка была десятичной. Двигатель разницы имел восемь столбцов
передач, поэтому он может табулировать полином до седьмой степени. Столбцы
были первоначально заданы со значениями, соответствующими ранней строке в таблице различий,
разработан заранее. Затем человеческий оператор поворачивал коленчатый вал,
заставляя постоянную разность распространяться через машину в качестве значения
сохраненные на каждом столбце, были добавлены к следующему.
Бэббидж смог построить небольшую часть разностного двигателя и использовать его
чтобы продемонстрировать свои идеи на вечеринках. Но даже потратив некоторое количество
государственные деньги равны стоимости двух крупных военных кораблей, он никогда не строил все
машина. Бэббидж не смог найти никого в начале 1800-х годов, который мог бы сделать
количество необходимых ему передач с достаточной точностью. Рабочая разница
Двигатель не будет построен до 1990-х годов, после появления точности
обработка. Существует отличное видео на
YouTube демонстрирует работу
Разностный двигатель в кредит в Музей истории компьютеров в Маунтин-Вью,
который стоит посмотреть даже просто, чтобы послушать чудесные звуки машины
делает, пока он работает.
Бэббидж в конце концов потерял интерес к разностному движку, когда понял, что
может быть построена гораздо более мощная и гибкая машина. Его аналитический движок
была машиной, которую мы знаем сегодня как механический компьютер Бэббиджа.
Аналитический движок был основан на тех же столбцах передач, используемых в разнице
Engine, но в то время как у Difference Engine было только восемь столбцов,
Аналитический двигатель должен был иметь еще много сотен. Аналитический
Двигатель может быть запрограммирован с использованием перфокарт, таких как жаккардовый шлем, и может
умножать и делить, а также добавлять и вычитать. Для выполнения одного из
эти операции, участок машины, называемый «мельница», будет изменяться
сам в соответствующую конфигурацию, прочитайте операнды других
столбцы, используемые для хранения данных, а затем записывать результат обратно в другой
колонка.
Бэббидж назвал свою новую машину аналитическим движком, потому что он был мощным
достаточно, чтобы сделать что-то похожее на математический анализ. Двигатель разницы
может приводить в соответствие многочлен, но аналитический движок сможет
вычислить, например, коэффициенты полиномиального разложения другого
выражение. Это была потрясающая машина, но британское правительство мудро
отказался финансировать его строительство. Поэтому Бэббидж отправился за границу в Италию, чтобы попытаться
барабанная поддержка его идеи.
Примечания переводчика
В Турине Бэббидж встретился с итальянским инженером и будущим премьер-министром Луиджи
Menabrea. Он убедил Menabrea написать схему того, что аналитическое
Двигатель может выполнить. В 1842 году Менабреа опубликовал документ по этой теме в
Французский. В следующем году Лавлейс опубликовал перевод книги Менабреа
бумага на английском языке.
Лавлейс, известный тогда как Ада Байрон, впервые встретил Бэббиджа на вечеринке в 1833 году, когда
ей было 17 лет, а ему было 41 год. Лавлейс был очарован Бэббидж
Разностный движок. Она также могла понять, как это работает, потому что она
в детстве она многократно обучалась математике. Ее мать,
Аннабелла Милбанк, решила, что прочная основа математики
отвлечься от дикой, романтической чувствительности, которая обладала отцом Лавлейса, Господом
Байрон, знаменитый поэт. После встречи в 1833 году Лавлейс и Бэббидж остались
часть одного и того же социального круга и часто писали друг другу.
Ада Байрон вышла замуж за Уильяма Кинга в 1835 году. Король позже стал графом Лавлейса,
превратив Аду в графиню Лавлейса. Даже после трех детей она
продолжил свое образование по математике, используя Августа де Моргана, который
обнаружил законы Де Моргана как своего наставника. Лавлейс увидел потенциал
Аналитическая машина Бэббиджа немедленно и была готова работать с ним
продвигать эту идею. Друг предложил ей перевести статью Менабре в
Английская аудитория.
В статье Менабре была дана краткий обзор того, как работал Разностный двигатель,
затем показал, как Analytical Engine будет намного более совершенной машиной.
Аналитический движок был бы настолько мощным, что он мог бы «сформировать произведение двух
числа, каждая из которых содержит двадцать фигур, в три минуты " (акцент в
оригинал). Менабреа дал дополнительные примеры возможностей машины,
демонстрируя, как он может решить простую систему линейных уравнений и
развернуть произведение двух биномиальных выражений. В обоих случаях Menabrea
при условии, что Лавлейс назвал «диаграммами развития», в котором перечислены
последовательность операций, которые необходимо выполнить для вычисления правильного
Ответ. Это были программы в том же смысле, что и собственная программа Лавлейса
была программа, и они были первоначально опубликованы годом ранее. Но поскольку мы
будут видеть, программы Менабре были лишь простыми примерами того, что было возможно.
Все они были тривиальны в том смысле, что они не требовали каких-либо
ветвления или петли.
Лавлейс приложил ряд заметок к ее переводу статьи Менабре, которая
вместе работали намного дольше, чем оригинальная работа. Именно здесь она сделала ее
большой вклад в вычисления. В примечании А, к которому Лавлейс присоединяется к
Первоначальное описание Menabrea Аналитического Двигателя, Lovelace объяснено в
некоторой длины и часто на лирическом языке обещание машины, которая могла бы
выполнять произвольные математические операции. Она предвидела, что машина, подобная
Аналитический двигатель не ограничивался цифрами и фактически мог действовать
любые объекты, чьи взаимные фундаментальные отношения могут быть выражены
абстрактная наука о действиях и которая также должна быть восприимчива к
адаптации к действию действующей нотации и механизма
двигатель ». Она добавила, что машина может однажды создать, например,
Музыка. Это понимание было тем более примечательным, что Менабреа видел
Аналитический двигатель прежде всего как инструмент для автоматизации «длинных и засушливых
вычисление ", которое освободило бы интеллектуальные возможности блестящих
ученых для более продвинутого мышления. Чудесное предвидение, которое
Лавлейс, продемонстрированный в Примечании А, является одной из основных причин ее празднования
сегодня.
Другая известная заметка — примечание G. Лавлейс начинает примечание G, утверждая, что,
несмотря на его впечатляющие полномочия, аналитическую машину нельзя сказать
«Подумайте». Эта часть примечания G — это то, что позднее Алан Тьюринг назвал «Леди
Возражение Лавлейса ». Тем не менее, Лавлейс продолжает, машина может сделать
необычные вещи. Чтобы проиллюстрировать его способность обрабатывать еще более сложные
проблемы, Лавлейс дает свою программу, вычисляющую числа Бернулли.
Полная программа, в расширенном формате «диаграммы развития», который Lovelace
объясняется в примечании D, можно увидеть
Вот.
Программа представляет собой, по существу, список операций, указанных с использованием обычного
математические символы. Не кажется, что Бэббидж или Лавлейс дошли до
что-то вроде набора op-кодов для Analytical Engine.
Хотя Лавлейс описывал метод вычисления всей последовательности
Бернулли числится до определенного предела, программа, которую она только иллюстрировала
один шаг этого процесса. Ее программа рассчитала число, которое она назвала B7,
которые современные математики знают как восьмое число Бернулли. Ее программа
таким образом, стремилось решить следующее уравнение:
В приведенном выше выражении каждый член представляет собой коэффициент в формуле многочлена для
сумма целых чисел к определенной мощности. Здесь эта сила равна восьми, поскольку
восьмое число Бернулли впервые появляется в формуле для суммы положительных
целые числа до восьмой степени. Номера B и A представляют два вида
факторы, обнаруженные Бернулли. От B1 до B7 все разные Бернулли
номера, индексированные в соответствии с индексацией Лавлейса. A0-A5 представляют собой
коэффициенты коэффициентов, которые Бернулли мог бы вычислить с использованием метода Паскаля
Треугольник. Ниже приведены значения A0, A1, A3 и A5. Здесь n представляет
индекс числа Бернулли в последовательности нечетных чисел Бернулли
числа, начинающиеся с первого. Программа Лавлейса использовалась n = 4.
Я создал
перевод
программы Лавлейса на C, что может быть легче следовать. Программа Лавлейса
сначала вычисляет A0 и продукт B1A1. Затем он вводит цикл, который повторяется
дважды для расчета B3A3 и B5A5, поскольку они формируются в соответствии с
идентичный рисунок. После того, как каждый продукт рассчитан, он добавляется со всеми
предыдущих продуктов, так что к концу программы полная сумма была
получен.
Очевидно, перевод C не является точным воссозданием программы Лавлейса.
Он объявляет переменные в стеке, например, в то время как переменные Ловеласа
больше напоминают регистры. Но это делает очевидными части программы Лавлейса
которые были настолько предсказуемыми. Программа C содержит две в то время как
петли, одна вложенная
внутри другого. В программе Лавлейса не было тогда как
петли точно, но
она делала группы операций и в тексте своей записки указывала, когда они
следует повторить. Переменная v10
в исходной программе и в C
перевод, функционирует как счетная переменная, которая уменьшается с каждым циклом, а
построить любого программиста. Фактически, помимо
изобилие переменных с бесполезными именами, перевод С Lovelace's
программа не выглядит совсем чужой.
Другая вещь, о которой стоит упомянуть, заключается в том, что перевод программы Лавлейса
в C было не так сложно, благодаря деталям, представленным на ее диаграмме.
В отличие от таблиц Menabrea, ее таблица включает столбец с надписью «Индикация
изменение значения на любой переменной ", что значительно упрощает
мутация государства во всей программе. Она добавляет индекс сверху
каждая переменная указывает на последующие значения. Верхний индекс
два, например, означает, что значение, используемое здесь, является вторым значением, которое
был присвоен переменной с начала программы.
Первый программист?
После того, как я перевел программу Lovelace на C, я смог запустить ее на своем
собственный компьютер. К моему разочарованию, я продолжал получать неправильный результат. После некоторых
отладки, я наконец понял, что проблема не в том, что у меня был
написано. Ошибка была в оригинале!
В своей «диаграмме развития» Лавлейс дает четвертую операцию как
v5 / v4
. Но правильный порядок здесь v4 / v5
. Возможно, это было
ошибка набора, а не ошибка в программе, разработанной Lovelace. Все
то же самое, это должно быть самая старая ошибка в вычислениях. Я удивился, что за десять
минут или около того, бессознательно, я боролся с этой первой ошибкой.
Джим Рэндалл, еще один блоггер, который перевел программу Лавлейса в
Python отметил
эта ошибка деления и две другие проблемы. Что говорится об Аде Лавлейсе
что ее опубликованная программа содержит незначительные ошибки? Возможно, это показывает, что она
пытался писать не просто демонстрацию, а настоящую программу. В конце концов,
вы действительно можете писать что-то большее, чем игрушечные программы, если вы не
написав много ошибок?
Одна статья в Википедии призывает Лавлейса первыми опубликовать «сложный
программы ». Возможно, это правильный способ подумать о Лавлейсе,
достижение. Менабреа опубликовал «диаграммы развития» в своей статье
за год до того, как Лавлейс опубликовал свой перевод. Бэббидж также написал больше, чем
двадцать программ, которые он никогда не публиковал. Так что не совсем точно сказать
что Лавлейс написал или опубликовал первую программу, хотя всегда есть место
чтобы понять, что именно представляет собой «программу». Несмотря на это, Лавлейс
программа была в милях впереди всего, что было опубликовано ранее.
что Menabrea представила 11 операций и не содержит
петли или ветви; Программа Lovelace содержит 25 операций и вложенную петлю
(и, следовательно, ветвление). Менабреа написал следующее в конце своей статьи:
Когда двигатель будет построен, трудность будет
сводится к созданию карт; но поскольку это всего лишь перевод
алгебраических формул, с помощью некоторых простых обозначений будет легко
поручают исполнение их работнику.
Ни Бэббидж, ни Менабреа не были особенно заинтересованы в применении
Аналитический механизм для проблем, выходящих за рамки непосредственных математических задач, которые
сначала вел Бэббидж, чтобы построить вычислительные машины. Лавлейс увидел, что
Аналитический двигатель был способен гораздо больше, чем Бэббидж или Менабреа
представить. Лавлейс также понял, что «изготовление карт» не будет
просто задумчивость и что это может быть сделано хорошо или сделано плохо. Это трудно
оценить, не понимая ее программу из примечания G и
сама забота, которую она вложила в ее разработку. Но, сделав это, вы можете
согласитесь, что Лавлейс, даже если она не была первым программистом, была
первый программист заслуживает титула.
Если вам понравился этот пост, больше похоже, что он выходит каждые две недели! следить
@TwoBitHistory
в Twitter или подписаться на
Новостная лента
чтобы убедиться, что вы знаете, когда новый пост отключен.
Ранее на TwoBitHistory …
Сообщение этой недели: престижная родословная Parsing Vim! Https: //t.co/1YUszI5dIC
— TwoBitHistory (@TwoBitHistory) 5 августа 2018 года