Виникнення програмування
Мене милий не цілує,
Не сідає близько.
Він же чистий математик,
а я - програмістка.
За своє довге життя Чарльз Беббідж написав понад 70 нотаток, статей та книг з різних питань. Проте докладний виклад принципів роботи різницевої та аналітичної машин зроблено не їм (Беббідж говорив, що надто зайнятий створенням машин, щоб займатися ще й їх описом). Зокрема, аналітична машина була досить детально описана в "Нарисі аналітичної машини." Л. Ф. Менабреа*1, перекладеному з італійської англійською мовою леді Лавлейс. Вона не лише зробила переклад, а й доповнила його власними "Примітками", що свідчать про чудове розуміння принципів роботи обчислювальних машин Беббіджа. Крім того, вона навела ряд прикладів їх практичного використання: висловлюючись сучасною мовою, склала кілька програм для аналітичної машини.
*1 Див. попередню статтю циклу (PC Week/RE, N 1/2006, c. 36; N2/2006, c. 37).
У той час як праця Менабреа стосується переважно технічної сторони справи, "Примітки" Лавлейса присвячені в основному математичним питанням. З цієї причини "Нарис" представляє зараз лише історичний інтерес, оскільки сучасні обчислювальні машини побудовані на зовсім інших технічних принципах, тоді як леді Лавлейс висловлені ідеї, що не втратили свого значення і в наш час.

Ада Августа, заміжня графиня Лавлейс, була єдиною "дочкою будинку і серця" великого поета Джорджа Гордона Байрона (1788-1824). Вона прожила коротке життя (1815-1852), насичене пристрастями та трагічними подіями. Мабуть, найсвітлішою плямою в ній була дружба та співпраця з Чарльзом Беббіджем. Пекла з юних років захоплюваласямузикою, мовами та точними науками і подібно донні Інесе, створеної пером її батька, "мала розум математичний". Її вчитель, видатний британський логік Август де Морган (1806-1871), так високо говорив про здібності своєї учениці, що навіть порівнював її з Марією Аньезі, знаменитим італійським математиком.
Чарльз Беббідж щиро прив'язався до своєї нової знайомої. Він знаходив у ній головне, що цінував у людях, – гостроту розуму. Можливо, зіграло роль і те, що вона була майже ровесницею його дочки, яка рано померла. Беббідж стежив за науковими заняттями дівчини, посилав їй статті та книги. Відомий вчений Мері Соммервіл (1780-1872) згадувала, як вони разом з Адою "часто відвідували містера Беббіджа, який працював над обчислювальними машинами" і він завжди "привітно зустрічав їх, терпляче пояснював пристрій його машини і роз'яснював практичну користь автоматичних обчислень".
Щоб схилити уряд до фінансування робіт над створенням аналітичної машини, Беббіджу необхідно було отримати схвалення та підтримку його планів у різних колах суспільства, щоб створити громадський тиск на можновладців. Тому така важлива була популяризація ідеї автоматичних обчислень, чітке і закінчене, але зрозуміле для досить широких кіл виклад принципів дії аналітичної машини та її величезних переваг перед попередницею. У цьому полягав сенс наукового співробітництва Чарльза Беббиджа і Ади Августи Лавлейс.
"Через деякий час після появи його нарису, - згадував Беббідж, - покійна графиня Лавлейс повідомила мені, що зробила його переклад. Я запитав, чому вона не написала самостійної статті за з цього питання, з яким була так добре знайома, на це леді Лавлейс відповідала, що подібна думка неспала їй на думку. Тоді я запропонував їй додати деякі примітки до "Нарису". Ця ідея була нею негайно прийнята". План майбутньої роботи розроблявся спільно з Беббіджем: "Ми обговорювали разом різні ілюстрації, які могли бути використані; я запропонував кілька, але вибір вона зробила абсолютно самостійно.
*1 Див. Докладніше про "Примітки": Р. С. Гутер, Ю. Л. Полунов. Ада Августа Лавлейс та виникнення програмування. У кн.: Кібернетика та логіка. М: Наука, 1978, с. 57-102.
"Вивчаючи роботу аналітичної машини, ми виявляємо, що необхідно суворо розрізнятиоперації, об'єкти, над якими операції здійснюються, і результати операцій. Ми звертаємо на це увагу не тільки тому, що це абсолютно необхідно для розуміння роботи аналітичної машини і оцінки її можливостей, але також і тому, що це зазвичай мало береться до уваги при вивченні математики взагалі.Під словомопераціями розуміємо будь-який процес, який змінює взаємне відношення двох або більше речей, якого роду ці відносини це найбільш загальне визначення, що охоплює всі предмети у Всесвіті.Наука про операції, як те, що походить від математики, але більш спеціальна, є самостійна галузь знання, що має абстрактні істини та значення, незалежні від об'єкта, до якого ми застосовуємо свої міркування. , хто знайомий з цим, знають, що якщо вірні деякі основні положення, то з них обов'язково випливає справедливість деяких інших комбінацій та співвідношень; ці комбінації не обмежені у своїй різноманітності та масштабах. Та обставина, що самостійний характер науки про операції слабко відчувається багатьма, полягає у подвійному значенні багатьох символів, які у математичних позначеннях. По-перше, символиоперацій часто єтакожсимволами результатівоперації*1. По-друге, цифри - символи числових величин - служатьтакожсимволамиоперацій(наприклад, при зведенні до ступеня). Операційний механізм може бути приведений у дію незалежно від об'єкта, над яким має здійснюватися операція. Цей механізм може здійснювати дії не тільки над числами, а й над іншими об'єктами, основні співвідношення між якими можуть бути виражені за допомогою абстрактної науки про операції та які можуть бути пристосовані до операційних позначень та механізму машини. Припустимо, наприклад, що співвідношення між висотами звуків у гармонії та музичної композиції піддаються такій обробці; тоді машина зможе складати майстерно складені музичні твори будь-якої складності чи тривалості. Аналітична машина євтілення науки про операції; вона сконструйована спеціально для дій над абстрактними числами як об'єктами цих операцій.
*1 Аналогічний вислів належить проф. С. А. Яновський: "Діалектична єдність результату та шляхи, до нього провідного, широко використовується в сучасній математиці".
Ще одна важлива цитата:
"Багато людей, недостатньо знайомих з математичними дослідженнями, вважають, що, оскільки мета машини - видати результати вчисловій формі, характерїї процесівповинен бути відповідноарифметичнимабочисловим, а неалгебраїчниміаналітичнимЦе помилка Машина може впорядковувати і комбінувати числові величини так само, як якщо б вони були літерами або іншими символами більше загальної природи.
І далі: "Можна сказати, що аналітична машина тчеалгебраїчні візерунки, подібно до того як верстат Жаккара тче квіти ілистя".
Неважко помітити зв'язок між цими висловлюваннями та тією областю computer science, яку прийнято називати "аналітичним програмуванням". Щоправда, ці роботи розпочалися практично лише після широкого впровадження алфавітно-цифрових друкувальних пристроїв, проте їхня наявність не є необхідною. Пекла чудово це розуміла і ось що писала з цього приводу:
«Вона [машина] може створити три типи результатів: .символічні. Останнє навряд чи слід вважати бажаним доповненням до можливостей машини, зокрема тому, що пристрої, необхідні для реалізації цих можливостей, загрожують збільшити складність і розміри механізму настільки, що повністю знецінять переваги машин>числова мова загальних формул аналізу, закони освіти яких ми вже знаємо.Однак було б помилкою припустити, що оскількирезультат.виходить в позначення найбільш обмеженої науки *1, то іпроцеси>, отже, також обмежені цією наукою. Призначення машини полягає, по суті, в тому, щоб надати найбільшу практичну ефективність засобам цифрової інтерпретації вищої науки аналізу, оскільки вона [машина] використовує її процеси та комбінації ».
Дуже цікава думка Ади Лавлейс про можливості обчислювальних машин, така характерна для рівня знань її часу.
"Слід застерегти проти перебільшення можливостей аналітичної машини. При розгляді будь-якого нового предмета існує тенденція, з одного боку, переоцінити те, що ми вважаємо цікавим чи чудовим, а з іншого боку, тенденція до недооцінки справжнього становищаречей, коли ми виявляємо, що наші стійкі уявлення мають бути замінені. Аналітична машина не претендує на те, щоб створювати щось дійсно нове. Машина може виконати все те, що ми вміємо їй приписати. Вона може слідуватианалізу, але вона не можепередбачитибудь-які аналітичні залежності або істини, функції машини полягають у тому, щоб допомогти намотриматите, з чим ми вже знайомі".
Звісно, для ХІХ століття ці висловлювання були актуальними. Сучасний же фахівець з машинного інтелекту цілком справедливо назве їх хибними (ще в 1949 р. леді Лавлейс заперечував Алан Т'юрінг у своїй знаменитій статті "Чи може машина мислити?"). Але чи могла Ада передбачити створення та розвиток кібернетики, теорій алгоритмів та інформації та багато іншого, що змінило б її точку зору?
Автор наводить програму розв'язання системи двох лінійних рівнянь з двома змінними і при цьому вводить класифікацію осередків пам'яті машини, яка застосовується в програмуванні і в даний час, включаючи термінробочі комірки. Ада використовує ідею послідовної зміни значень осередків, від якої залишається один крок до оператора присвоєння - однієї з основних конструкцій всіх мов програмування.
Коментуючи іншу свою програму (обчислення доданків у деякій тригонометричній функції), Ада показує, що при обчисленні коефіцієнтів деяка послідовність операцій має виконуватися багаторазово. Для позначення такої послідовності, що повторюється, вводиться поняття циклу:
"Якщо є вираззагального члена, то існуєрекурентна група*1 операцій. Задля визначеності та стислості рекурентну групу назвемо циклом.Циклоперацій, такимчином, може розглядатися як позначення будь-якої групи операцій, яка повторюєтьсябільше ніж один раз. хоча б тільки двічі . Сутність циклу становить повторюваність операцій.
*1 Зрозуміло, термін "група" у леді Лавлейс не несе сучасного сенсу алгебри.
Наведене вище визначення циклу майже дослівно збігається з тим, що наводиться у сучасних підручниках програмування. Далі аналогічно будуються визначення циклу циклів, тобто циклів різної кратності, причому ці визначення практично не відрізняються від сучасних.
Але найпрекраснішою і найскладнішою програмою, яку ми знаходимо в "Примітках", є програма обчислення чисел Бернуллі, що викликала захоплення Беббіджа. Вона будується як складний подвійний цикл: зовнішній цикл виконується за індексом числа Бернуллі, усередині нього є невеликий вкладений цикл для обчислення множників при числах Бернуллі з попередніми індексами, причому множення і розподіл виконуються послідовно, що перешкоджає накопиченню помилок округлення.
Зізнаюся: мені дуже хотілося б прийняти думку останніх (згадаймо Михайла Свєтлова: "Я сам краще кинуся під паровоз, ніж кину на рейки героя"). Але після багатьох років дати абсолютно точні відповіді на згадані питання неможливо.
*1 Наприкінці 1970-х років за завданням Міністерства оборони США було розроблено мову програмування, яку на згадку про леді Лавлейс було названо АДА.