Историю программирования принято связывать, самое ранее, с Чарльзом Бэббиджом, с его "Аналитической машиной", и Адой Лавлейс[1]. Сразу следует оговориться, что когда речь заходит именно о программировании, под ним понимается не сам феномен, а скорее языки программирования или род прикладной деятельности. Здесь же речь пойдет о способе мышления, об общей методике решения тех или иных задач, представления функций, при этом совершенно не обязательно математических.
Во-вторых, будет сделана попытка отделить программирование как область знаний от информатики, кибернетики и всего что связано с физическим воплощением вычислительных устройств. Дело в том, что программы в чистом виде, как некие алгоритмы - как абстрактный порядок действий - известны людям, конечно же, задолго до появления каких бы то ни было вычислительных устройств, и, вообще говоря, даже раньше математики как науки.
Таким образом, в этом варианте изложения истории программирования точку отсчета следует брать где-нибудь с появления первых документальных источников, содержащих в себе эти самые алгоритмы, а именно с такого средневекового мыслителя как Мухаммад ибн Муса аль-Хорезми аль-Маджуси. Разумеется, логично предположить, что алгоритмы существовали и задолго до аль-Хорезми, на что есть указания прямо в трудах самого ученого.
"Основную задачу своего арифметического трактата ал-Хорезми формулирует так: «Когда увидел я, что индийцы составляли из .IX. букв любое свое число, благодаря расположению, какое они установили, я пожелал раскрыть, если будет угодно богу, что получается из этих букв для облегчения изучающему»" [2]
Нет сомнений, что аль-Хорезми был знаком и с такими трудами античных философов как "Альмагест" Клавдия Птолемея и "Метафизика" Аристотеля.
В истории порой бывает крайне сложно установить чье-либо первенство в формулировке той или иной идеи, правила, в открытии закона. Однако именно документальные подтверждения существования самого феномена дошли до нас только начиная с работ указанного гражданина. Ни кто не утверждает, что аль-Хорезми первому удалось составить алгоритмы (адаптированное на латынь "аль-Хорезми" — араб. Хорезмский) решения квадратных уравнений или придумать с нуля алгебру ("аль-джабр" — араб. восполнение). Ученому заслуженно приписывают именно систематизацию имеющихся знаний и сведение их в одну стройную и понятную систему, которая смогла лечь в основу трудов последователей. Собрать воедино индийскую систему исчисления, достижения арабской науки того времени, связать это всё с массивом знаний пришедших из Древней Греции, и Рима, до него, судя по всему, не удавалось еще ни кому.
В системном подходе аль-Хорезми к существующим знаниям так же можно усмотреть особый склад мышления. Очевидно, без формального, рефлексивного подхода к собственной деятельности, обойтись тут не могло. Собственно, скорее всего, это и позволило, совершить, по тем временам, прорыв в области формализации и систематизации знаний. А что это как не автоматизация собственной деятельности — метапрограммирование на уровне организации знаний?
Нынче кажется, что методика получения алгоритмов путем формализации самого процесса это достижение современных программистов. Однако, конечно же, надо понимать, что люди были способны размышлять таким же образом достаточно давно — еще до эпохи сложных информационных теорий. Последователи аль-Хорезми были вдохновлены скорее именно общим подходом, а не конкретными арифметическими алгоритмами.
Так, спустя четыре века, труды аль-Хорезми были переведены на латынь[3] и с тех пор являлись неотъемлемой частью развития математической науки, и, в том числе, вычислительной математики, в последствии превратившуюся в теорию численных методов решения задач при помощи уже вычислительных устройств.
С ростом потребности во всё более и более точных вычислениях в эпоху Великих географических открытий, а затем и в эпоху Возрождения, придумывались всё более и более изощренные алгоритмы и методы вычисления. Наконец дело дошло до Нового времени и до таких ученых как Рене Декарт, Иоганн Кеплер, Готфрид Вильгельм Лейбниц, Карл Фридрих Гаусс. Куда же без Исаака Ньютона.
Называть великих математиков того времени программистами было бы притягиванием за уши. Тем не менее следует помнить кто вывел методику вычисления характеристик орбит космических объектов, решений систем линейных уравнений, площадей криволинейных трапеций. Необходимо помнить кто ответственен за алгебру в том виде которую мы знаем нынче, комбинаторику, математическую логику, двоичное счисление, биномиальное разложение и прочие замечательные вещи, которые сыграют непосредственную роль как в возникновении информатики, так и в более практических приложениях программирования.
Разбирать европейскую историю математики, как предтечу современной информатики и теории формальных языков и алгоритмов не хватит и всей жизни. Благо, что литературы посвященной этому отрезку исторического процесса имеется в избытке. Поэтому данный внушительный временной промежуток, насыщенный интереснейшими событиями здесь, наверное, можно пропустить, перейдя непосредственно к фигуре Чарльза Бэббиджа, и тому почему именно он считается праотцом современной вычислительной техники, а Ада Лавлейс, эдакой матерью программирования. Хотя, в общем-то, формально ни первый ни вторая не сильно выделяются среди своих современников размером вклада в появление программ и вычислительных устройств.
Во времена трудовой деятельности Бэббиджа далеко не только он один был озабочен автоматизацией вычислений. Получением более точных значений тех же логарифмических таблиц и чисел Бернулли были озабочены большое число математиков.
"Все изобретатели 17-го и 18-го веков строили машины для выполнения арифметических действий, которые мы сейчас отнесли бы к так называемым калькуляторам." - пишет в своей хрестоматии Яков Ильич Фет[4].
Связано это было не с каким-то спортивным интересом или чисто теоретическими изысканиями, а с вполне насущными проблемами народного хозяйства. Огромное развитие тогда претерпевали как-раз приложения математики к совершенно конкретным областям экономики. Оперирование более точными расчетами давало ощутимое преимущество в инженерном деле, навигации, финансах. Бэббидж в данном случае, наверное, впервые предпринял попытку создать именно универсальный, до какой-то степени программируемый механизм, и, надо сказать, почти преуспел. С другой стороны, программируемые ткацкие станки, идею которых, собственно, и развил Бэббидж, уже тогда широко использовались[5]. А специализированные вычисления успешно производились на счетных машинах и арифмометрах, например, тех же Блеза Паскаля[6] и Готфрида Лейбница[7].
Что же касается Ады Лавлейс, можно конечно её инструкцию по получению чисел Бернулли считать первой программой воплощенной для конкретной машины. Однако дальнейшая деятельность девушки не выделяется ни чем особенно примечательным. Так же нельзя сказать, что кто-либо из её современников воспользовался её выводами или как-то вдохновился на продолжение изысканий в области составления алгоритмов для вычислительных устройств. До определенной поры, новаторская история с "Аналитической машиной" в общем не получала продолжения.
Впрочем, имя леди Лавлейс, без никаких скидок, значительно опередившей свое время, будет увековечено в названии языка программирования. А имя английского математика в последствии сыграет роль и окажет непосредственное влияние на другой процесс связанный с информационными технологиями, о котором обязательно будет упомянуто в следующих главах.
1. History of programming languages [Электронный ресурс] // Википедия : Свободная энциклопедия. URL : https://en.wikipedia.org/wiki/History_of_programming_languages#Early_history (дата обращения: 05.06.22)
2. Володарский А. И. Ал-Хорезми и индийская математика // Общественные науки в узбекистане : Сборник статей / под. ред. Маркман И. А. — Ташкент : Изд-во «Фан» УзСССР, 1983. №7. С. 34
3. Юшкевич А. П. История математики в средние века. — М.: Гос. изд-во физико-математической литературы, 1961. — С. 156, 191, 331.
4. Фет Я. И. Чарльз Бэббидж и Ада Лавлейс. // Хрестоматия по истории информатики, отв. ред. Михайленко Б. Г. — Новосибирск : Академическое изд-во «Гео», — С. 15 - 17
5. Jacquard machine [Электронный ресурс] // Википедия : Свободная энциклопедия. URL : https://en.wikipedia.org/wiki/Jacquard_machine
6. Pascaline [Электронный ресурс] // Britannica. URL : https://www.britannica.com/technology/Pascaline
7. Leibniz's Calculating Machine [Электронный ресурс] // Encylopedia Britannica 2002, Expanded Edition DVD URL : http://www.gwleibniz.com/calculator/calculator.html
Запощено под Depeche Mode - Violator