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

Автор оригинала: Sinclair Target
  • Перевод
image

Эпизод с основанием Microsoft – один из наиболее известных в компьютерной истории. В 1975 году Пол Аллен вылетел в Альбукерк, чтобы продемонстрировать интерпретатор BASIC, которые они с Биллом Гейтсом написали для микрокомпьютера Altair. Поскольку у них не было работающего компьютера Altair, они проверили свой интерпретатор при помощи написанного ими эмулятора, выполнявшегося на компьютерной системе Гарварда. Эмулятор был основан только на опубликованных спецификациях процессора Intel 8080. Когда Аллен, наконец, запустил интерпретатор на реальном компьютере Altair – перед человеком, который, как они надеялись, купит их ПО – он даже не знал, заработает ли программа. Она заработала. В следующем месяце Аллен и Гейтс официально основали новую компанию.

За более чем сто лет до интерпретатора BASIC Аллена и Гейтса, Ада Лавлейс написала и опубликовала компьютерную программу. Она тоже написала программу для компьютера, о котором знала только по описанию. Но её программа, в отличие от интерпретатора BASIC, никогда не выполнялась, потому что компьютер, для которого она была написана, так и не был построен.

Программу Лавлейс часто называют первой в мире компьютерной программой. Но не все согласны с тем, что её следует так называть. Наследие Лавлейс оказывается одной из самых горячо обсуждаемых тем компьютерной истории. Уолтер Айзексон писал, что диспут по поводу степени и достоинств её вкладов представляет «небольшую академическую важность». С неизбежностью диспут подогревает тот факт, что Лавлейс была женщиной. Историки цитировали всякого рода свидетельства, чтобы доказать, что оказываемые ей почести соответствуют случаю, или, наоборот, незаслуженны. Но они тратят гораздо меньше времени на объяснение технических деталей её опубликованной работы, что обидно, поскольку именно технические детали представляют самую интересную часть этой истории. Кому же неинтересно было бы узнать, как должна была работать программа, написанная в 1843 году?

Честно говоря, программу Лавлейс тяжело объяснить обывателям. Но именно запутанность её программы делает её такой примечательной. Достойна она зваться первым программистом, или нет, её программа была записана с такой точностью, которая превзошла всё, что было до этого. Она тщательно продумала, какие операции можно объединить в группы, которые можно будет повторять – изобретя, таким образом, цикл. Она поняла, как важно отслеживать состояние изменяющихся переменных, и придумала запись, отражающую эти изменения. Я, как программист, поражён тем, насколько работа Лавлейс напоминает опыт написания софта сегодня.

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

Суммы степеней


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



Один камень, за которым идёт ряд из двух камней, вместе составляют треугольник из трёх камней. Добавьте ещё один ряд из трёх камней, и получится треугольник из шести камней. Эту процедуру можно продолжать, каждый раз добавляя ряд с количеством камней, увеличивающимся на единицу. Треугольник из шести рядов содержит 21 камень. А сколько камней будет в треугольнике из 423 рядов?

Пифагорейцы искали способ подсчитать сумму следующего ряда, не проводя суммирование:

1+2+3+⋯+n

В итоге они поняли, что если расположить два треугольника одинакового размера рядом друг с другом так, чтобы они образовали прямоугольник, можно найти площадь прямоугольника и разделить её на два, чтобы получить количество камней в каждом из треугольников:

1+2+3+⋯+n = n(n+1)/2

Архимед изучал схожую проблему. Его интересовала следующая последовательность:

12+22+32+⋯+n2

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



Три пирамидки можно составить вместе, чтобы они сформировали прямоугольную призму, с одного конца которой есть небольшой выступ в один кубик высотой. Этот выступ представляет собой треугольник, подчиняющийся тем же правилам, что и каменные треугольники пифагорейцев. Поэтому объём всей фигуры задаётся следующим уравнением:

3(12+22+32+⋯+n2) = (n+1)n2+(1+2+3+⋯+n)

Подставляя уравнение пифагорейцев для суммы первых n целых чисел, и проведя некоторые алгебраические операции, получим:

12+22+32+⋯+n2=n(n+1)(2n+1)/6

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

13+23+33+⋯+n3=(1+2+3+⋯+n)2

Формулу для суммы первых n положительных целых чисел в четвёртой степени опубликовали только 500 лет спустя.

К этому времени у вас мог появиться вопрос – а нет ли какого-нибудь универсального метода для вычисления суммы первых n целых чисел, возведённых в степень k? Математики тоже этим интересовались. Йохан Фаульхабер, немецкий математик, слегка подвинутый на нумерологии, смог вывести формулы для суммы целых вплоть до 17-й степени, опубликовав их в 1631 году. Но это заняло у него много лет, и общего решения он не дал. Блез Паскаль, наконец, придумал обобщённый метод в 1665 году, который, правда, зависел от подсчёта суммы целых чисел, возведённых в предыдущие степени. К примеру, для подсчёта суммы первых n положительных целых чисел, возведённых в 6-ю степень, вам нужно было сначала узнать, как подсчитать сумму первых n положительных целых чисел, возведённых в 5-ю степень

Более практичное обобщённое решение было приведено в посмертно опубликованной работе швейцарского математика Якоба Бернулли, умершего в 1705. Бернулли начал с того, что вывел формулы для подсчёта сумм первых n положительных целых чисел, возведённых в первую, вторую, третью и четвёртую степени. Он записал их в виде многочленов:

1+2+3+⋯+n = 1/2n2+1/2n

12+22+32+⋯+n2=1/3n3+1/2n2+1/6n

13+23+33+⋯+n3=1/4n4+1/2n3+1/4n2

Используя треугольник Паскаля, Бернулли понял, что эти многочлены следуют предсказуемой закономерности. По сути, Бернулли разбил коэффициенты каждого члена на два множителя, один из которых он мог определить при помощи треугольника Паскаля, а другой – вывести из интересного свойства, по которому все коэффициенты в многочлене в сумме равнялись единице. Понять, какую экспоненту поставить у каждого члена, было несложно, поскольку они тоже следовали предсказуемой закономерности. Множители каждого коэффициента, которые нужно было вычислять по правилу «сумма равна единице», сформировали последовательность, которая стали известна, как числа Бернулли.

Открытие Бернулли не означало, что сумму первых n положительных целых чисел, возведённых в любую степень, теперь можно было вычислить тривиально. Чтобы подсчитать сумму первых n положительных целых чисел, возведённых в степень k, необходимо было узнать все числа Бернулли вплоть до k-того. А каждое число Бернулли можно было подсчитать, только зная все предыдущие. Но высчитывать длинную последовательность чисел Бернулли было несравненно легче, чем подсчитывать каждую сумму возведённых в степень чисел, поэтому открытие Бернулли стало большим прорывом для математики.

Бэббидж


Чарлз Бэббидж родился в 1791 году, почти через сто лет после смерти Бернулли. У меня всегда было такое представление о нём, что он разработал, но не построил механический компьютер. Но я никогда точно не понимал, как этот компьютер должен был работать. Как оказалось, основные идеи понять довольно легко. Программа Лавлейс должна была работать на одной из машин Бэббиджа, поэтому нам надо сделать ещё одно небольшое отступление и поговорить о том, как эти машины работали.

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

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

Чтобы представить себе, как работал этот процесс, рассмотрим следующую простую полиномиальную функцию:

y = x2+1

Метод разделённых разностей находит разницу между последовательными значениями y для разных значений x. Затем находятся разницы между этими разностями, и затем, возможно, ещё разницы между последними разностями, до тех пор, пока не появляется постоянная разность. Эту разность затем можно использовать для получения следующего значения полинома через сложение.

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

x y 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 – наш ответ.

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

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


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

Бэббидж назвал её аналитической машиной, поскольку она была достаточно мощной для того, чтобы заниматься чем-то, напоминающим матанализ. Разностная машина могла выдавать таблицы полиномов, но аналитическая машина могла бы подсчитать, к примеру, коэффициенты полиномиального размножения другого выражения. Это была удивительная машина, но британское правительство приняло мудрое решение отклонить запрос на её финансирование. Поэтому Бэббидж направился за границу, в Италию, чтобы там попробовать найти себе поддержку.

Примечания переводчицы


В Турине Бэббидж познакомился с итальянским инженером и будущим премьер-министром Луиджи Федерико Менабреа. Он убедил Менабреа написать обзор возможностей аналитической машины. В 1842 Менабреа опубликовал работу по этой теме на французском языке. В следующем году Лавлейс опубликовала перевод работы Менабреа на английский.

Лавлейс, известная тогда, как Ада Байрон, познакомилась с Бэббиджем на вечеринке в 1833 году, когда ей было 17, а ему 41. Лавлейс была поражена разностной машиной Бэббиджа. Но она смогла разобраться, как та работает, поскольку в детстве её активно обучали математике. Её мать, Анабелла Милбанк, решила, что твёрдая математическая основа образования дочки отвадит от неё дикую и романтическую натуру, которой обладал её отец лорд Байрон, знаменитый поэт. После знакомства в 1833 году Лавлейс и Бэббидж оставались в общем социальном кругу и часто переписывались.

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

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

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

Другое знаменитое примечание – примечание G. Лавлейс начинает его, утверждая, что, несмотря на впечатляющие возможности, нельзя сказать, что аналитическая машина «думает». Именно это примечание Алан Тьюринг позже будет называть «возражением Ады Лавлейс». Тем не менее, продолжает Лавлейс, машина способна на удивительные вещи. Для демонстрации возможности обработки более сложных задач, Лавлейс предлагала свою программу для вычисления чисел Бернулли.

Полный её текст, в виде расширенной «диаграммы развития», формат которой Лавлейс описывает в примечании D, можно посмотреть тут. Это, по сути, список операций, обозначенных математическими символами. Не похоже, чтобы Бэббидж или Лавлейс зашли так далеко, чтобы разработать набор операционных кодов для аналитической машины.

Хотя Лавлейс описывала метод вычисления полной последовательности чисел Бернулли до определенного предела, приведённая ею программа показывала только один шаг этого процесса. Она подсчитывала число, которое она назвала B7, известное современным математикам, как восьмое число Бернулли. Поэтому её программа решала следующее уравнение:

B7=−1(A0+B1A1+B3A3+B5A5)

Тут каждый член представляет коэффициент в полиномиальной формуле для суммы целых чисел, возведённых в определённую степень. Тут речь идёт о восьмой степени, поскольку восьмое число Бернулли впервые появляется в формуле для суммы целых положительных чисел, возведённых в восьмую степень. Числа B и A представляют два вида множителей, открытых Бернулли. Числа от B1 до B7 – различные числа Бернулли, пронумерованные согласно Лавлейс. Числа от A0 до A5 представляют собой множители коэффициентов, которые Бернулли мог вычислить при помощи треугольника Паскаля. Значения A0, A1 и A3 приведены ниже. Здесь n обозначает индекс числа Бернулли в последовательности нечётных чисел Бернулли, начинающихся с первого. В программе Лавлейс n = 4.

A0=−1/2⋅(2n−1)/(2n+1)

A1=2n/2

A3=2n(2n−1)(2n−2)/(2⋅3⋅4)

A5=2n(2n−1)(2n−2)(2n−3)(2n−4)/(2⋅3⋅4⋅5⋅6)

Я перевёл программу Лавлейс на язык C, и так, наверное, её будет проще читать. Сначала её программа вычисляет A0 и результат умножения B1A1. Затем начинается цикл, повторяющийся дважды, для вычисления B3A3 и B5A5, поскольку они считаются по одной схеме. После подсчёта каждого перемножения, результат добавляется к предыдущим, поэтому к концу программы получается полная сумма.

Очевидно, что перевод на C не может быть точным воспроизведением программы Лавлейс. Он объявляет переменные в стеке, а переменные Лавлейс больше были похожи на регистры. Но он делает более очевидной наиболее пророческую часть программы Лавлейс. В программе на C есть два цикла while, один внутри другого. У программы Лавлейс не было циклов while, но она сгруппировала операции, и описала в примечании, почему они должны повторяться. Переменная v10 из оригинальной программы и в переводе на C, работает счётчиком, уменьшающимся с каждым проходом цикла – подобная конструкция знакома каждому программисту. В общем, кроме изобилия переменных с непонятными именами, программа на C не выглядит чем-то незнакомым.

Стоит также отметить, что перевод программы Лавлейс на C был не очень сложным, благодаря одной детали в её диаграмме. В отличие от таблиц Менабреа, в её таблице есть столбец «признак изменения значения переменной», благодаря которому гораздо проще отслеживать изменение состояния. Она добавляет каждой переменной надстрочный индекс, чтобы обозначить хранящиеся в них последовательные значения. Индекс 2, к примеру, означает, что используемое значение – это второе значение, присвоенное переменной с начала программы.

Первый программист?


После того, как я перевёл программу Лавлейс на язык C, я смог запустить её на компьютере. К моему разочарованию, результат получался неверный. После поиска ошибок я, наконец, понял, что проблема была не с моим кодом – баг содержался в изначальной программе!

В «диаграмме развития» Лавлейс пишет в четвёртой операции v5 / v4. Но правильно будет v4 / v5. Эта ошибка могла появиться при печати, а не у Лавлейс. Так или иначе, это самый старый компьютерный баг. Я удивился тому, что порядка десяти минут потратил на поиск самого первого бага в истории.

Джим Рэндал, другой блогер, переведший программу Лавлейс на Python, также отметил этот баг с делением и две других проблемы. О чём говорят нам небольшие ошибки в опубликованной программе Ады Лавлейс? Возможно, о том, что она пыталась написать не просто демонстрацию, а настоящую программу. Ведь нельзя же писать что-то, кроме игрушечных программ, избегая ошибок?

В одной из статей Википедии написано, что Лавлейс первая опубликовала «сложную программу». Возможно, именно так и стоит воспринимать её достижение. Менабреа в своей работе опубликовал «диаграммы развития» за год до публикации перевода Лавлейс. Бэббидж также написал более двадцати программ, так и не опубликованных. Поэтому не совсем верно писать, что Лавлейс написала или опубликовала первую программу, хотя всегда можно поспорить о том, что считать программой. И всё равно, программа Лавлейс намного опередила всё, что было опубликовано до неё. В самой длинной программе Менабреа было 11 операций и не было циклов и ветвлений. В программе Лавлейс было 25 операций и вложенный цикл (а, следовательно, и ветвление). Менабреа в конце своей работы написал следующее:

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

Ни Бэббидж, ни Менабреа особенно не интересовались применением аналитической машины к задачам, выходящим за пределы математических проблем, которые и подвигли Бэббиджа к созданию вычислительных машин. Лавлейс поняла, что аналитическая машина была способна на гораздо большее, чем могли представить себе Бэббидж и Менабреа. Лавлейс также уловила, что «изготовление карточек» не станет механической работой, и что этим можно заниматься плохо или хорошо. Сложно оценить это, не понимая её программу из примечания G, и не видя, сколько заботы она проявила при её разработке. Но, проделав это, вы можете согласиться с тем, что Лавлейс, даже не будучи самым первым программистом, была первым программистом, заслужившим это название.
Поддержать автора
Поделиться публикацией

Комментарии 74

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

        Пытаюсь представить себе внутреннее состояние Ады, потребное для такого мысленного проектирования. Потрясающе.
          +1
          О том ведь и речь, что написанная программа не была правильно работающей.
            +6
            Насколько я понял из сообщения, неправильно работала бы ОПУБЛИКОВАННАЯ версия программы. При этом во-первых это могла быть техническая ошибка при публикации (типографская опечатка);
            Во-вторых, принципиальная логика программы ведь была правильной, за исключением этой ошибки. Полагаю, имей Ада возможность выполнять программу аппаратно, а не мысленно, она бы вероятно нашла бы ошибку.
            0
            «Подумай о компиляторе, компилирующем самого себя»
            Мастер Юань-Ма, «Книга программирования»
              +3

              gcc так и компилируется — в два этапа. Сначала системным компилятором, потом он пересобирает сам себя.
              https://ru.wikipedia.org/wiki/Раскрутка_компилятора

                0
                Спасибо. Всю жизнь силюсь понять как это происходит.
              0
              Ну не знаю. В 80х не испытывал трдностей с тем, что сначала нужно всё написать на бумажке, а потом ввести машинный код. К стати, очень дисциплинировало, и ошибок почти небыло (не то что сейчас)
                0
                К тому моменту, когда Вы могли писать на листочке программы, у Вас уже была большая практика работы на реальном устройстве. Сомневаюсь, если бы Вы знали про ЯП (пердполагаю бейсик) только со слов, вы написали бы более-менее сложную программу без ошибок.
                  0
                  В 80е могло и не быть никакой предварительной практики «на реальном устройстве».

                  Или одно устройство могло быть на группу из, скажем, 20 человек — так что вы получали доступ на час в неделю.
                    0
                    Небыло практики. Была теория. Дорватся до чего-то сложнее калькулятора — было удачей. Иногда приходилось изучать что-то типа ЯМБ или глазки строить тете в 2 раза старше ;)
                      0
                      Практика писания на листочке, и то не сразу. Знали не со слов — из книг.
                        0
                        Моё программирование началось в середине 80х по программам для программируемого калькулятора Б3-34 из журнала «Техника молодёжи». Кроме художественного рассказа и приложенной программы о сюжете, без объяснений что какая из команд означает. Было весьма увлекательно разгадывать те ребусы. :-)
                +8
                Тот случай когда историю читать интересно втройне. Спасибо за статью.
                  –1
                  Эти шаги требовали только сложения и вычитания, что означало, что для построения таблицы можно задействовать небольшую армию людей, не обладавших способностями к математике.

                  Зачем переводить всё так буквально? :) Заглянем в оригинал:
                  These small steps involved only addition and subtraction, meaning that a small army of people without any special mathematical aptitude or training could be employed to produce a table.

                  По идее, речь идет о небольшой группе людей.
                    0
                    P.S. Небольшое обсуждение значения словосочетания small army:
                    small army [=«small» or «big»?] | WordReference Forums
                      +3
                      «Небольшая армия» — это как раз большая группа людей. Такая большая, что могла бы роботать армией — пусть и для маленького государства…
                        0
                        Выше я привел ссылку на обсуждение. Рискну предположить, что в данном случае small army — это человек десять, а то и меньше, то есть от силы отряд. :)

                        P.S. Как мне кажется, словосочетание «небольшая армия» из-за своей неопределенности только сбивает с толку читателей, не владеющих английским языком.
                          +2
                          Нашел дополнительную информацию:
                          Невероятные приключения Лавлейс и Бэббиджа: (Почти) правдивая история… — Сидни Падуа — Google Books (см. первый абзац)

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

                          Итак, мое предположение о том, что в данном случае «небольшая армия» — это десяток человек, оказалось ошибочным.
                          +1
                          Эта «небольшая группа» привела к тому, что в СССР наоткрывали мехматов, выпускавших множество математиков, которые ни для чего, кроме как ручного расчёта для нужд космоса и ядерной оружейной физики, не были нужны. Нужда пропала прежде, чем начался этот массовый выпуск математиков (даже первые компьютеры сразу устранили эту нужду), а мехматы остались. И продолжали тысячами выпускать математиков, которых потом распихивали по школам (забивая микроскопом их знаний гвозди школьной программы).
                            0
                            del
                              +2

                              Пес его знает, но все выпускники мехматов, с которыми я контактировал, учились совсем другому, а именно математическому моделированию в самом широком смысле. Т.е. предполагалось, что выпускники мехматов будут не считать что-то там вручную (для космоса или чего еще, неважно), а строить математические модели, по которым будут считать другие (те же компьютеры по программам, которые напишут программисты по разработанным выпускниками мехматов моделям).
                              В школы выпускники мехмата шли по разным причинам. Кого-то привлекали льготы для молодых преподавателей. Кто-то просто так "хорошо" учился, что по специальности работать не мог. Кто-то просто находил таким образом работу возле дома или в родном городе.
                              И в тех вузах, про которые я знаю, мехматян, которые нормально учились и в школу не стремились, в принципе не распределяли в школы.

                                0
                                Я сам — выпускник мехмата, и в курсе и того, как и чему учили, и того, куда направляли и куда хотели. Направляли — в школы, куда, безусловно, не стремились.
                                Вы, похоже, пишете о выпускниках либо недавних, либо давних, но — отделения прикладной математики. Эти действительно занимались матмоделированием, а распределяли их простыми программистами по ВЦ.
                                Были ещё отделения механики. Народа там было мало — одна группа, и распределение (кроме тех, кого забирали в ближайшие НИИ) было почти свободным — что сам найдёшь, туда и пишут направление.
                                А вот именно математиков — в школы, в школы. Тем более, что у них даже предмет на педагогическую тему был, семестр или два. Так что формально они в учителя годились.

                                Что же касается того, зачем создавали мехматы, можно найти и в инете в разных историях, и — по рассказам старых преподов (старых ещё в 70-е годы).
                                +1
                                В научном подходе утверждения обосновываются на фактах. Например, «вот мой отец или дядя или ещё кто-то смог устроиться на работу после мехмата-матмеха только в школу».
                                Факты из жизни (от инженеров и кадровиков с заводов): в СССР постоянно требовались расчёты на производстве. Например, расчёт статических напряжений — что собранная машина не развалится под своим весом, расчёт динамических напряжений — что собранная машина не развалится при своей работе, к этому можно добавить расчёт колебаний и нагрузок в переходных режимах. Собственно, любая механическая передача имеет свой КПД, который желательно рассчитать.
                                Т.ж. производились расчёты напряжений в деталях с целью их облегчения — убрать материал, не несущий основных нагрузок (методы МКЭ или МГЭ).
                                Всем этим занимались выпускники мехматов.
                                  0
                                  Чуть выше — ответил. Мне нет нужды ссылаться на кого-то, я сам мехматовец 75го-80го годов. И о том, чему учили и куда распределяли, знаю.
                                  А вот Вы, похоже, не знаете. Расчёты, производимые на производстве к тому, чему учат на мехмате, имеют, но очень и очень отдалённое отношение. Как сопромат к теории упругости (кстати, и то, и то на мехмате было в курсах только одной группы из десяти, группы механиков. У математиков и прикладников ничего подобного не было).

                                  И ещё: «смог устроиться только в школу» — звучит, поверьте, смешно. Вы совсем не в курсе былых советских реалий…
                                    0
                                    Вы знаете, советские реалии в разные годы весьма и весьма отличались. (Удивительно, да?)
                                    я сам мехматовец 75го-80го годов

                                    Ну, тут всё ясно. Застой, потеря курса, идейное и моральное разложение.
                                      0
                                      Ясно, вы совершенно не в теме, только лозунги и ярлыки.
                                    0
                                    Всем этим занимались выпускники мехматов


                                    Этими расчетами занимались простые инженеры (пяти семестров «вышки» для этого было вполне достаточно)
                                    У выпускников мехмата для этого просто не было необходимых инженерных знаний.
                                      0
                                      Именно так. Просто человек представляет математику по «вышке» в четырёхлетке.

                                      Подобная невостребованность, впрочем, имела и положительную сторону. Жёсткий отсев «или ты прорвёшься, или иди в школу» — был неплохим стимулом для действительно стоящих ребят.
                                +4
                                Поскольку у них не было работающего компьютера Altair, они проверили свой интерпретатор при помощи написанного ими эмулятора, выполнявшегося на компьютерной системе Гарварда. Эмулятор был основан только на опубликованных спецификациях процессора Intel 8080. Когда Аллен, наконец, запустил интерпретатор на реальном компьютере Altair – перед человеком, который, как они надеялись, купит их ПО – он даже не знал, заработает ли программа. Она заработала.

                                Вот ведь насколько в то время было развито внимание к деталям, что можно было по спецификациям сделать точный эмулятор. А сейчас выходит обновление, его тестируют на всём что можно и всё равно оно потом не работает на половине устройств. Куда мы катимся?
                                  +11
                                  Сложность же увеличилась на порядки. Ну, нельзя же сравнивать такие вещи в лоб…
                                    –2
                                    Вряд ли писать на ассемблере было проще чем на джаве. Подозреваю, что тут, как впрочем и везде, работает теория разбитых окон.
                                      +4
                                      Писать на ассемблере было сложнее, но воспроизводимость, в мире, где в C64C, выпущенном в 1992м все биты и такты были в точности такими же, как в C64, выпущенном в 1982м — была, разумеется, выше на порядки.

                                      В своё время C128 ругали жутко за то, что они совместимость с C64 поломали… ну там, внутренние процедуры в реализации бейсика стали другими и PEEK/POKE трюки перестали работать.

                                      Как вы думаете — каков шанс, что программа, напрямую лащающая и правящая «не глядя» файлы операционки вообще удастся продать сегодня до то, чтобы получить, 90% возвратов? А в те времена… гляньте, хотя бы, вот на эту книжечку. Или вот эту. Какие, к бесу, «разбитые окна»?
                                        +1
                                        Писать сложнее, но и объём увеличился на порядки. Многое из того, что сейчас «пишется на Джаве», написать на ассемблере не возможно в принципе (теоретически — возможно, практически — ресурсы человека ограничены, как и количество человек, могущих и хотящих в такое).
                                      +2
                                      А сейчас выходит обновление, его тестируют на всём что можно и всё равно оно потом не работает на половине устройств.
                                      Но на половине-то работает.

                                      Куда мы катимся?
                                      В рынок, детка, в рынок. С 1976го по 1995й, за почти 20 лет Apple выпустила 5 моделей Apple ][ (и ещё примерно столько же минорных вариаций), а сегодня столько же моделей за полгода выпускается каждым производителем — а количество минорных вариаций исчисляется сотнями.

                                      Там где этого нет (XBox, PS3/PS4) — и проблем с совместимостью меньше, чем было во времена Altair'а…
                                        0
                                        А чего минусуете молча, господа?
                                          0
                                          А смысла разводить очередную политоту?..
                                            +2
                                            Не хотите разводить политоту — приводите примеры случаев, когда «подходы 80х», использованные современными программистами, дают сбой. Ну там PS3 когда перестаёт исполнять программы или какий-нибудь Arduino с Raspberry PI отказывается с новой версией работать.

                                            Потому что все случаи несовместимости после выхода обновлений, которые «тестируют на всём что можно и всё равно оно потом не работает на половине устройств» — это либо случаи проблем с «зоопарком» устройств, на которых масса всего бывает, всего просто не протестируешь — либо с софтом… а тут тоже «старые» подходы куда как менее надёжны.

                                            Как пример: кто из вас сегодня вообще задумывается в какой слот PCI-Express или USB подключать устройство? А в те «благословенные» времена, когда Билл Гейтс писал свой Бейсик — внимание к таким вещам было скорее нормой, чем исключением…
                                              +1
                                              Так с технической частью я согласен. Если (кхм… да!) включить голову, то и вообще с комментарием согласен, а зацепился взглядом за интонацию.
                                              Неправ, каюсь. Извинился в карму.
                                        0

                                        Никуда не катимся. Сотни людей с крайне высоким вниманием к деталям, способные написать интерпретатор под микроконтроллер и сейчас найдутся. Просто программирование стало очень массовой профессией. У нас теперь не десять программ в год, а десять миллионов. Да и количество деталей возросло.

                                          0
                                          Здрям, Возможно не «в тему», вспоминается история, почти как байка: для того, что-бы программы для определенного эмулятора корректно работали — разработчикам эмулятора пришлось воссоздать все баги оригинальной архитектуры. Статья — класс! — как в «железе» представить абстрактные функции
                                            +1
                                            В топку эмулятор. Вы лучше про 65816 вспомните. Это — 16-битный процессор, потому увеличение счётчика команд он может всегда делать за один такт. А на 6502 при переходе с адреса, скажем, 1023 на 1024 происходит задержка на один такт, так как сумматор там реально 8-битный и нужен дополнительный такт, чтобы увеличить второй байт.

                                            Так вот в режиме эмуляции 65C02 — эта задержка воспроизводится в точности. А почему? А потому что иначе тайминги слетят и программы работать не будут.

                                            А сейчас человек жалуется, что у него игрушка глючит при том, что у него «такой же комп, как у его приятеля… ну только видеокарта и CPU от AMD, вместо Intel'а и nVidia, и другого звукового чипа… а так — ну совсем такой же, в таком же прямоугольном корпусе».

                                            P.S. А эмуляторы — да, там всё такт-в-такт приходится воспроизводить… Так как в той же PS2 (а тем несколько процессоров) очень часто никакой синхронизации нету — разработчики просто знают что векторный процессор выполняет их программу за 105 тактов, а скалярный — свою за 106… и потому данные появляются в нужном месте в нужное время…
                                            +1
                                            А оно точно тестируется на всём, чём можно? У большинства просто нет устройств, более одного (иногда и одного нет), если речь о мобильной разработке. Если речь о десктопах, то, возможно, вам стоит перечитать спецификации используемого софта и не запускать на непредназначенных платформах.
                                            0
                                            Что удивительного в баге, который нашли ещё в 90-х, и который описан в литературе?
                                              +1
                                              Удивительна та программа, в которой баг сделан. Его наличие делает её настоящей.
                                                +1
                                                С этим не спорю. Странно, что автор статьи, спустя почти 30 лет, нашёл его независимо, хотя, очевидно, изучал материалы по данному вопросу.
                                                  +3
                                                  Зато он получил удовольствие, тот случай, когда это лучше, чем прочитать в книжке.
                                                    0
                                                    Автору потребовалось 30 лет, чтобы найти баг в этом псевдокоде? Теперь мне интересно, сколько раз её прочитали, чтобы понять написанное.
                                                      0
                                                      Автору потребовалось 30 лет, чтобы найти баг в этом псевдокоде?

                                                      Где Вы вычитали такую дичь?

                                                  0
                                                  Интересно, почему до 90-х не нашли. Или речь про XIX-й век?
                                                    0
                                                    Я могу ошибаться, надо бы перечитать источник.
                                                  0
                                                  Лавлейс была поражена разностной машиной Бэббиджа.
                                                  И, согласно тому же Айзексону (в «Инноваторах»), первой оценила потенциал машины, способной работать с произвольными символьными последовательностями, а значит не только числами, но и текстами, музыкой и любыми другими данными, которые могут быть представлены в этом виде…
                                                    0

                                                    В статье об этом тоже говорится.

                                                    0
                                                    Когда впервые прочитал про леди Аду, первая мысль была — «Гений, которому не дали раскрыться», на мой субъективный взгляд, Беббидж по сравнению с ней, был довольно зауряден.
                                                      0

                                                      По этому поводу есть замечательная книга Ю.Л. Полунова "От Абака до компьютера: судьбы людей и машин".

                                                        0
                                                        Меня больше всего интересует, а можно ли найти эту работу? В смысле книгу. Я знаю что она была относительно недавно продана на аукционе за 125 000 $ Но неужели до этого ее экземпляра ни у кого не было? Ладно частные куркули, их дело, но библиотеки университетов, хоть кто-то же должен был ее сохранить.
                                                          0
                                                          Тоже это интересует.
                                                          –7
                                                          Ну сделала ошибку барышня, подумаешь, с какой женщиной не бывает.
                                                            +3
                                                            Я перевёл программу Лавлейс на язык C

                                                            Почему не на язык Ада? :)
                                                              +1
                                                              Читал где-то, что разностную машину Бэббидж строил по заказу Адмиралтейства (для рассчёта навигационных астрономических таблиц). С таким заказчиком — не исключено, что она была-таки воплощена «в железе».
                                                                +1

                                                                Там же технологическая проблема возникла в невозможности соблюсти требуемую точность шестерён.

                                                                  0
                                                                  Вроде как не «по заказу Адмиралтейства», а «благодаря спонсорству Адмиралтейства»: инициатива исходила именно от Бэббиджа.
                                                                  Когда первоначально выделенных денег не хватило, энтузиазм спонсоров поубавился, и достраивать ему было не на что.
                                                                    0
                                                                    Наверное уже есть такой закон в своде Паркинсона: «Как только обращаешь на что-то внимание — оно само начинает попадаться на глаза». Вот и вчера, читаю у 1500PY470 (https://1500py470.livejournal.com/383087.html?nojs=1):
                                                                    «Первая модель [разностной машины], построенная между 1820 и 1822 гг., состояла из 6 разрядов и применяла вторые разности. В 1823 г. было начато конструирование машины с 26-значными цифрами и 6-ми разностями.
                                                                    Конструирование продолжалось до 1833 г., когда правительственная субсидия работе прекратилась».
                                                                    И список литературы в конце цитируемой статьи.
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                      +1
                                                                      Нет, вроде всё правильно — Гейтс тогда учился в Гарварде, видимо, там и писали интерпретатор с эмулятором.
                                                                      0
                                                                      В книге «100 великих изобретений» без указания конкретного источника (в конце книги библиография примерно на 200..250 названий, включая 19 и начало 20 века) написано, что действующий образец разностной машины был создан в 1822 году. При этом, уже около 60 лет был известен морской хронометр (https://ru.wikipedia.org/wiki/%D0%A5%D1%80%D0%BE%D0%BD%D0%BE%D0%BC%D0%B5%D1%82%D1%80, те-же шестерёнки).
                                                                      Думаю, что это чушь про шестерёнки.

                                                                      Промахнулся местом комментария.
                                                                        0
                                                                        Там, видимо, проблема была изготовить множество одинаковых шестеренок. У хронометра-то повторяемость конструкции необязательна, спусковой механизм только нужно подрегулировать после сборки.
                                                                          0
                                                                          Проблема в том, что встречающееся сейчас примерно повсеместно эвольвентное зацепление — изобрели если не в конце, то точно во второй половине XIX века. А до того — не было теории, позволявшей разработать передачу из двух колёс с одинаковым профилем зуба — колёса были парными друг другу. И, соответственно, за отсутствием теории, не могло существовать технологии их массового производства.
                                                                          0
                                                                          Спасибо за статью. Историю с комментариями леди Лавлейс читал ещё в детстве, в книжке Гутера и Полунова «От абака до компьютера», но фотокопии таблицы с программой там, кажется, всё же не было.
                                                                          Посмотрел таблицу — всё-таки программа. Алгоритм написан настолько формально, насколько это можно было вообще сделать до появления современных вычислительных архитектур, до появления понятия «код операции» и др.
                                                                            0
                                                                            В России был введен праздник День программиста — 256-й день года, кот. очень неудобен, т.к. плавающий (12 или 13 сент. — в зависимости от високосности года). В мире существует много разных дат празднования Дня программиста — официальных и неофициальных; и один из них — День рождения Ады Лавлейс — первого в мире программиста и разработчика основ программирования (в т.ч. изобрела цикл). И я считаю, что правильнее было бы сделать официальным праздником программистов — именно этот день.
                                                                              0

                                                                              Как то интересно-то.


                                                                              Оказывается машину придумал Менабреа, он же был первым программистом.

                                                                                +1

                                                                                хорошо написано, надо кино снять

                                                                                  0
                                                                                  Спасибо за статью. Было очень интересно.

                                                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                  Самое читаемое