Pull to refresh

Comments 78

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

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

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

Зачем переводить всё так буквально? :) Заглянем в оригинал:
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.

По идее, речь идет о небольшой группе людей.
«Небольшая армия» — это как раз большая группа людей. Такая большая, что могла бы роботать армией — пусть и для маленького государства…
Выше я привел ссылку на обсуждение. Рискну предположить, что в данном случае small army — это человек десять, а то и меньше, то есть от силы отряд. :)

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Интересно, почему до 90-х не нашли. Или речь про XIX-й век?
Я могу ошибаться, надо бы перечитать источник.
Лавлейс была поражена разностной машиной Бэббиджа.
И, согласно тому же Айзексону (в «Инноваторах»), первой оценила потенциал машины, способной работать с произвольными символьными последовательностями, а значит не только числами, но и текстами, музыкой и любыми другими данными, которые могут быть представлены в этом виде…
UFO just landed and posted this here
Когда впервые прочитал про леди Аду, первая мысль была — «Гений, которому не дали раскрыться», на мой субъективный взгляд, Беббидж по сравнению с ней, был довольно зауряден.

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

Меня больше всего интересует, а можно ли найти эту работу? В смысле книгу. Я знаю что она была относительно недавно продана на аукционе за 125 000 $ Но неужели до этого ее экземпляра ни у кого не было? Ладно частные куркули, их дело, но библиотеки университетов, хоть кто-то же должен был ее сохранить.
  • Babbage’s Calculating Engines, Being a Collection of Papers Relating to Them; Their History, and Construction. Charles Babbage, Edited by Henry P. Babbage, первое издание 1889 (переиздана в 2010)
    libgen.lc/edition.php?id=136443931
    Содержит: документы Чарльза Бэббиджа, выдержки из книг и публикаций Бэббидджа, перевод описания аналитической машины с комментариями Ады Лавлейс, фрагменты чертежей аналитической машины

  • скан журнала с публикацией перевода Менамбреа и комментарием Лавлейс:
    Scientific Memoirs, Selected from the Transactions of Foreign Academies of Science and Learned Societies and from Foreign Journals, Vol. III, 1843
    Edited by Richard Taylor, F.S.A.
    Publisher: Richard and John E. Taylor (London)
    Art. XXIX. — Sketch of the Analytical Engine invented by Charles Babbage, Esq. By L. F. MENABREA of Turin, Officer of the Military Engineers, p. 666
    archive.org/details/dli.granth.53369
    (скан выложен 11.07.2020, BOMBAY BRANCH OF THE Royal Asiatic Society. Digitized with financial assistance from the Government of Maharashtra on 28 March, 2016)

  • Картинка с диаграммой алгоритма, на которую все ссылаются:
    commons.m.wikimedia.org/wiki/File:Diagram_for_the_computation_of_Bernoulli_numbers.jpg
    Источник картинки (в Википедии, похоже, немного обработана):
    www.sophiararebooks.com/pictures/3544a.jpg

Предположительно относится к лоту с книгой (страница недоступна):
www.sophiararebooks.com/pages/books/3544/
Но на сайте сохранились сканы еще нескольких страниц:
www.sophiararebooks.com/pictures/3544.jpg (скан первой страницы перевода)
www.sophiararebooks.com/pictures/3544b.jpg
www.sophiararebooks.com/pictures/3544c.jpg
www.sophiararebooks.com/pictures/3544d.jpg
www.sophiararebooks.com/pictures/3544e.jpg
www.sophiararebooks.com/pictures/3544f.jpg

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

Я перевёл программу Лавлейс на язык C

Почему не на язык Ада? :)
Читал где-то, что разностную машину Бэббидж строил по заказу Адмиралтейства (для рассчёта навигационных астрономических таблиц). С таким заказчиком — не исключено, что она была-таки воплощена «в железе».
UFO just landed and posted this here
Вроде как не «по заказу Адмиралтейства», а «благодаря спонсорству Адмиралтейства»: инициатива исходила именно от Бэббиджа.
Когда первоначально выделенных денег не хватило, энтузиазм спонсоров поубавился, и достраивать ему было не на что.
Наверное уже есть такой закон в своде Паркинсона: «Как только обращаешь на что-то внимание — оно само начинает попадаться на глаза». Вот и вчера, читаю у 1500PY470 (https://1500py470.livejournal.com/383087.html?nojs=1):
«Первая модель [разностной машины], построенная между 1820 и 1822 гг., состояла из 6 разрядов и применяла вторые разности. В 1823 г. было начато конструирование машины с 26-значными цифрами и 6-ми разностями.
Конструирование продолжалось до 1833 г., когда правительственная субсидия работе прекратилась».
И список литературы в конце цитируемой статьи.
UFO just landed and posted this here
Нет, вроде всё правильно — Гейтс тогда учился в Гарварде, видимо, там и писали интерпретатор с эмулятором.
В книге «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, те-же шестерёнки).
Думаю, что это чушь про шестерёнки.

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

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


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

Спасибо за статью. Было очень интересно.
Sign up to leave a comment.

Articles