Бесплатно

Века сквозь математику, или Как математики раз за разом мир вертели

Текст
iOSAndroidWindows Phone
Куда отправить ссылку на приложение?
Не закрывайте это окно, пока не введёте код в мобильном устройстве
ПовторитьСсылка отправлена
Отметить прочитанной
Шрифт:Меньше АаБольше Аа

17.3

Лавлейс и Бэббидж

В 1822 году (вдумайтесь только: с тех пор прошло более 200 лет!) Бэббидж построил прототип своей разностной машины. И чуть позже он же разработал аналитическую машину – универсальный "вычислитель", способный не только на арифметические действия, а вполне полноценный компьютер.

В 1842 году Ада Лавлейс написала первую программу для аналитической машины Бэббиджа. Эти две даты сейчас считаются датами изобретения компьютера и возникновения программирования соответственно.

Чарльз Бэббидж родился в 1791 году, в возрасте 19 лет поступил в Тринити-колледж, альма-матер Ньютона, чтобы изучать математику. Но в изучении математики он опирался больше не на лекции преподавателей, а на книги (Ньютона, Лейбница, Эйлера....) и вскоре обогнал своих преподавателей по уровню знаний.

Он был очень разочарован уровнем знания математики в Англии и организовал "Аналитическое общество", которое постепенно произвело революцию в преподавании математики в Англии (Бэббидж ставил целью этого сообщества, чтобы преподавать математику в Англии стали не хуже, чем в Санкт-Петербурге – и Бэббидж считал, что своей цели добился). За это он получает должность Лукасовского профессора в Кэмбридже (помните, эту должность когда-то занимал Ньютон, а перед ним Барроу?) и звание иностранного члена-корреспондента Санкт-Петербужской Академии наук.


Рисунок 17.4: Чарльз Бэббидж. 1791–1871

В 1827 году он пережил большую трагедию, похоронил почти всю свою семью: жену, отца, из 8 его детей до взрослого возраста дожили только трое. После этой большой трагедии он всю свою профессиональную деятельность направил только на создание компьютера, статьи по математике (по функциональному анализу в основном) писать перестал, к идеям революции в образовании охладел.

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



Рисунок 17.5: Вычислительная машина Бэббиджа

В 1820 году Бэббидж заинтересовался идеей вычислений с большой точностью. Логарифмы и значения тригонометрических функций в те времена было принято смотреть по специальным составленным таблицам. Но такие таблицы составлялись вручную и потому содержали множество опечаток. Как же избежать опечаток? Надо, чтобы вычисления производила и составляла такие таблицы машина.

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

Бэббидж построил в 1822 году прототип – и пошел выбивать финансирование на создание полноценной машины. Деньги ему выделили, он обещал построить машину за 3 года. Однако же, как это часто бывает, с оценкой проекта он напутал. И за ближайшие 5 лет потратил на машину все финансирование (которое все просил и просил), и почти столько же еще собственных денег. А машина так и не возникла.

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

У аналитической машины была (по проекту) оперативная память, процессор, материнская плата (устройство, осуществляющее передачу информации между памятью, процессором и от или до устройств ввода-вывода), устройство ввода (через перфокарты) и устройство вывода.

В 1833 году же Бэббидж знакомится с Адой Лавлейс (ей было всего 18 лет, именно поэтому они не встретились раньше) – и заражает ее своим энтузиазмом! Наконец-то появляется человек, настолько же фанатично болеющий его аналитической машиной, как и он сам. Машину есть с кем обсуждать!

В 1842 году, наконец, правительство Великобритании прекращает финансирование проекта. При жизни Бэббиджа аналитическая машина так и не была построена. Но после его смерти сын по его чертежам достроил машину (в 1906 году, когда производство, наконец, развилось до необходимого уровня), и показал, что она полностью работает, как и задумывал отец.

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



Рисунок 17.6: Ада Лавлейс. 1815–1852

Настало время поговорить про Аду Лавлейс. Ее отец – эксцентричный, возможно даже немного безумный, гениальный поэт лорд Джордж Гордон Байрон. Ее мать – Аннабелла Байрон – единственная законная жена поэта (и потому Ада – его единственная законная дочь; сколько у поэта было незаконных детей подсчитать трудно). Аннабелла увлекалась математикой, за что Байрон ее прозвал "Королева Параллелограммов". Однако, брак распался еще до появления Ады на свет. Поэт видел свою дочь ровно один раз в жизни, когда той был примерно месяц от роду.

Однако, сложно сказать, что он не повлиял на ее воспитание. Назвали девочку Августа Ада, но Августа – это было имя сестры Байрона, поэтому называли в семье и потом ее всегда только Ада, имя Августа было под запретом. Воспитывалась Августа Ада в семье родителей Байрона, которые считали того воплощением Сатаны, и в их очень обширной и приличной библиотеке не было ни одного его произведения (что было нонсенсом для образованных людей того времени в Англии). Вообще, на всякий случай всю поэзию объявили злом. И как же отвлечь ребенка от поэзии? Правильно, пусть занимается математикой.

Для Ады пригласили очень хороших учителей: Огастеса де Моргана (того самого, именем которого называются в математической логике "формулы де Моргана") и Мэри Сомервилль, которая стала для Ады примером подражания ("Женщины тоже могут в математику, оооо!") и познакомила Аду с Бэббиджем52.

В 1833 году Ада знакомится с изобретателем аналитической машины53. Ада и Бэббидж становятся добрыми друзьями на всю жизнь.

Бэббидж в своем особняке устраивал шикарные приемы, куда приглашал только самые сливки общества. За деньги на такие приемы было попасть невозможно. Гости строго отбирались (и первым признаком отбора был ум). На таких приемах бывали премьер-министры Англии, великие ученые и писатели (Диккенс, Фарадей…). Конечно, сюда были вхожи и де Морган и Сомервилль, которые и привели Аду. В гостиной у Бэббиджа стоял собранный прототип разностной машины. Вот тут Ада и пропала.

Через пару лет Ада вышла замуж за лорда Лавлейса. Замужество и трое детей совершенно не помешали Аде заниматься математикой. И даже наоборот: от обожающего ее супруга она получает отличный источник финансирования (кстати, мужа она постепенно разорила, вкладываясь в Аналитическую машину Бэббиджа и в свои собственные изыскания по теории вероятностей).



Главный вклад Ады Лавлейс в историю математики – уже упомянутые комментарии к ее переводу лекций Бэббиджа. Комментарии были на 52 страницы (то есть длиннее, чем текст самих лекций). В этих комментариях она доходчиво объясняет принцип действия машины Бэббиджа и пишет пример программы, которая могла бы быть реализована на такой машине.

Ада написала 3 компьютерных программы. Самая первая, самая простая программа, решала систему двух линейных уравнений с двумя неизвестными. В комментариях к этой программе Ада вводит понятие "рабочая ячейка" (ячейка памяти, которая хранит изменяемую по ходу программы переменную). Вторая программа вычисляла тригонометрические функции. Для этого требовалось некоторые операции повторять много раз. И Ада вводит понятие "цикл". Третья программа – для вычисления чисел Бернулли. В этой программе пришлось использовать рекуррентные вложенные циклы. И Ада вводит понятие "рекурсия".

 

Именно Ада была первой, кто сказал, что вычислительные машины могут работать не только с числами, но и другими объектами. Что с помощью компьютеров можно будет писать музыку, рисовать картины и прочее.54

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

17.4. XX век. Появление "настоящих" компьютеров.

После фактического изобретения компьютера Бэббиджем события понеслись вскачь и трудно отделить одну веху в изобретениях от другой. Компьютеры развивались и развивались, плавно и последовательно. Кто-то пытается пересобрать с новыми условиями производства деталей машины Бэббиджа, кто-то пытается использовать что-то абсолютно новое. Однако со времени изобретения компьютера Бэббиджем (в 1840 году, напомню, он прочитал уже курс лекций по изобретенной им машине) проходит целых сто лет, когда появляется наконец машина, которая сейчас считается первым работающим компьютером (да и то, с "настоящим" современным компьютером те устройства имеют чисто теоретическое сходство; как Homo Erectus, который, конечно, человек, но до Homo Sapiens’a, до человека разумного, ему еще миллионы лет эволюции и вообще как до Луны пешком).

Так вот, первым прямо "компьютером" без сомнений считается электро-механический компьютер Z3, созданный немецким инженером Конрадом Цузе в 1941 году55. Конрад Цузе в своем Z3 представил ряд новшеств. Главное из которых – двоичная система счисления. Уход от десятичной системы счисления делает механику процесса на много порядков проще! А еще одно гениальное новшество: числа с плавающей запятой. Единственный работающий экземпляр Z3 использовался при конструировании самолетов и запуске ракет, и был уничтожен в 1945 году.



Рисунок 17.7: Электромеханический компьютер Z3. 1941 год.

Великая Война прервала работу Цузе над созданием копьютеров. Следующая модель (Z4) была представлена только в 1950 году. Однако же, с другой стороны, разработку компьютеров в других странах Война только подстегнула.

В 1941 году в Великобритании появляется ЭВМ «Колосс». Это не универсальный компьютер (с помощью него можно делать не все), но это электронное вычислительное устройство, которое помогает британским (можно уже сказать) программистам расшифровывать немецкие шифровки. Зато Колосс становится первым полностью электронным (не механическим и не электронно-механическим, а электронным, хоть и пока на лампах) устройством.

Во время Второй Мировой Войны и много лет после этого основные разработки компьютеров переносятся в США, ввиду удаленности от военных действий. Впрочем, очень много отраслей человеческой культуры во время Войны переезжает в США. Множество ученых разных специальностей (в том числе, конечно, и математиков), множество художников, поэтов и писателей....

С 1943 году в США появляются полноценные полностью электронные компьютеры (Марк-1, Эниак…), но они во многом еще не идеальны. Например, они не умеют хранить программы в памяти.

В 1948-49 году в Великобритании появляются первые компьютеры, которые уже всем хороши. Первый компьютер в СССР, разработанный независимо, появляется в 1950 году. Такой компьютер размером с дом, называется «Малая электронная счетная машина», построили его в городе Феофания под Киевом. Компьютер Z4 Конрада Цузе считается первым универсальным компьютером на Евразийском континенте (также создан в 1950 году), однако он был электро-механическим. "МЭСМ" – первая ЭВМ на континенте.

В 1947 году изобретают транзисторы. И появляется идея компьютеров второго поколения – компьютеров не на лампах и релейных схемах, а на полупроводниках. Первые компьютеры второго поколения появляются в 1959 году. Появление компьютера на полупроводниках позволяет с течением времени сделать компьютер персональным.

Ну, а кроме того, чему нас учит практика? Да, Цузе построил свои первые версии компьютеров еще до Войны, но его Z1, Z2 и даже Z3 вообще никому не были нужны. Скорее, воспринимались не как что-то нужное, а как некое абстрактное достижение науки. Да, в военные годы правительства стали интересоваться компьютерами в плане военных применений: расшифровка сообщений, автоматическая бомбардировка и прочее. Но в целом только с такими задачами компьютеры на данный момент не развились бы до современного уровня. Очень мощным толчком к развитию (и к захватыванию компьютерами мира) послужило то, что компьютеры попали не только в оборонку и научно-исследовательские институты, а распространились по предприятиям, по банкам, а постепенно – и по домам. А это стало возможно благодаря их уменьшающемуся размеру. Менее, чем за 100 лет машины размером с дом эволюционировали до устройства размером с ладонь, которое еще и во много раз производительнее своего гигантского предка!

Считается, что первый персональный компьютер изобрел Стив Возняк в 1970-х годах.



17.5

Алан Тьюринг

Если говорить об истории программирования и информатики, то как раз подошло время рассказать о таком замечательном математике, как Алан Тьюринг. Алану Тьюрингу выпала очень нелегкая судьба, про которую можно посмотреть в фильме "Игра в имитацию" (2014 года), я же сконцентрируюсь только на вкладе Тьюринга в наше общее дело.

В 1936 году Алан Тьюринг придумал так называемую "Машину Тьюринга". Машина Тьюринга состоит из бесконечной ленты с ноликами и единичками. По ленте бегает читающе-пишущая каретка. У машины есть состояния: в начале работы машина всегда в состоянии S0, SN – конечное состояние, и сколько угодно промежуточных. В зависимости от текущего состояния и того, что написано в ячейке ленты, где стоит каретка, каретка может переписать ячейку (с 0 на 1, с 1 на 0), сменить состояние, сдвинуться вправо или влево.



Рисунок 17.8: Алан Тьюринг. 1912-1954.

Машина Тьюринга – это умозрительный, теоретический компьютер.

До создания нормальных ЭВМ никто не строил машину Тьюринга (однако же, на ней программировали). Конечно, в современности можно найти много эмуляторов машины Тьюринга для современных компьютеров и еще забавное ее продолжение – Тьюрмита.

В 10-х, 20-х и 30-х годах XX века наконец очень остро назрел вопрос «А что же такое вообще алгоритм?» И ученые математики пытались дать интуитивному понятию алгоритм строгое формальное определение. Машина Тьюринга позволила это сделать. Примерно в 1936 году сформулирован Тезис Черча (он же определение алгоритма). Алгоритм – это то, что может быть произведено на Машине Тьюринга. И примерно сразу же было показано, что все, существующие на тот момент определения, сводятся к этому (либо очевидно неправильные).

С тех пор критерием истинности "компьютера" является именно это: умение делать все то же, что теоретическая, умозрительная Машина Тьюринга. Наши с вами компьютеры в миллионы раз сложнее, чем лента с пишущей кареткой. А вот делать они могут абсолютно то же самое, и (с теоретической точки зрения) не больше! Правда, намного быстрее и могут показывать результат, понятный обычному человеку.

Идея универсальной машины для всего была очень оригинальной! В те годы над таким не задумывались. Считалось, что должны существовать отдельные "калькуляторы" для всего подряд. То есть одна конструкция, заточенная для расшифровки немецких шифровок, другая – для запуска баллистических ракет. И так далее. Когда мы пишем, что придуманная Бэббиджем машина была универсальной – это действительно так, но Бэббидж сам об этом не думал. Когда мы пишем, что Ада Лавлейс предсказывала, что компьютеры будут рисовать картины и сочинять музыку – она думала, что будет отдельный компьютер для рисования картин, а другой будет сочинять музыку.

С момента формализации понятия "алгоритм" стало возможно доказать, что для некоторых задач алгоритма в принципе не существует. Например, сам Алан Тьюринг доказал, что проблема остановки в общем случае неразрешима. То есть, нельзя написать такую программу, которая берет произвольную программу и по ее тексту говорит, на всех ли входных параметрах программа остановится, или на некоторых будет работать бесконечно (про некоторые программы можно сказать, что они точно остановятся; про некоторые можно точно сказать, что они зациклятся на каких-то данных, но общего алгоритма не бывает в принципе).

В годы Второй Мировой войны Тьюрингу пришлось много заниматься криптоанализом – он расшифровывал немецкие шифровки. Именно он разработал спецификацию, по которой построили первый дешифратор – Bombe (вычислитель не для всего, только для шифров). У немцев шифровальная машина усложнилась, Bombe справляться перестал – Тьюринг участвовал в создании новой ЭВМ – Колосс.

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

Мечтой Алана Тьюринга было превратить компьютер в универсальный музыкальный аппарат, и впоследствии научить его сочинять музыку.



17.6

Языки программирования

Компьютеры создали. Это раз. Некое программирование появилось еще раньше. С этим тоже разобрались. Но полноценно "разговаривать" с компьютером, давать ему указания, человек стал, когда появились языки программирования.

Сначала у машины были базовые команды. У первых машин они вообще ограничивались механикой (помните перфокарты? Есть дырочка – нитку пропусти снизу; нет дырочки – сверху).

В машины посложнее были "встроены" какие-то базовые команды. Язык машинных кодов, команды Машины Тьюринга, язык Assembler… Например, Аде Лавлейс и вовсе приходилось делать тройную работу: написать программу, потом наколоть перфокарту, а потом отдельно человеческим языком написать, чего ее программа делает.

Следующий несомненный виток в истории компьютеров и большой опять толчок в развитии – появление языков программирования высокого уровня. Язык программирования высокого уровня не привязан к конкретной машине, их привязывает к конкретной машине другая программа (компилятор или интерпретатор; который переводит программу с языка программирования в язык машинных кодов). Это очень удобно, потому что компьютеры и даже совершенно новые архитектуры к ним развиваются очень быстро. И до изобретения языков высокого уровня каждый раз приходилось переписывать все программы заново. Все программы писались индивидуально под тот компьютер, на котором будут выполняться. Конечно, это сильно тормозило прогресс.

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

Но в самом начале, конечно, это тоже была революционная идея, не слишком популярная. Очевидно же, что программа сразу написанная на машинном языке, работает быстрее, ведь компьютеру не надо делать двойную работу! /*Это, конечно, очевидно, только это неправильно. Но это предмет для отдельного разговора.*/ А быстрота работы программы – это самое главное.

Одним из первых высокоуровневых языков программирования (и это первый язык программирования, получивший повсеместное применение) стал язык Фортран, разработанный примерно в 1957 году группой программистов под началом Джона Бэкуса.

 

Однако, в 1952 году в СССР появился высокоуровневый язык "Операторный метод А.А.Ляпунова" – о котором Ляпунов читал лекции в МГУ. Достаточно быстро к этому языку написали и интерпретаторы, и парой лет позже появления компьютера МЭСМ, советские программисты уже программировали на этом самом "Операторном методе".

Однако, "операторный метод" – это уже часть истории, а вот Фортран с 1957 года используется до сих пор! Ведь на нем написана уйма математических программ.

Языки программирования тоже развивались, и развивались очень стремительно. Изменялись сами принципы написания программ. Кому интересно – очень рекомендую посмотреть ролик [63] про популярные языки программирования.

Но история творится прямо на наших глазах! Искусственный интеллект, который в 1950 году предрекал Алан Тьюринг, наконец, развился до степени, когда отрицать существование искусственного интеллекта стало трудно. 30 ноября 2022 года был запущен ИИ "ChatGPT" – искусственный интеллект, с которым можно общаться. Он может придумать и рассказать вашему ребенку сказку на ночь, может написать за вас реферат про отмену крепостного права в России, лучше специализированных программ-переводчиков переводит тексты с одного языка на другой, может заменить психоаналитика; с осени 2023 года он уже работает не только с текстовой, но и с аудиовизуальной информацией56. И (почему же он встречается в этой главе) – ChatGPT умеет писать программы, при этом пользователь может разговаривать с ним человеческим языком57. Таким образом, искусственный интеллект в скором будущем, возможно, заменит специализированные языки программирования, а пользователи будут учиться четко и ясно ставить задачи на своем родном языке, не утруждая себя изучением специализированного языка программирования.

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

Но, конечно, совершенно невозможно предсказать, как история повернется в будущем. И это не дело этой книги. Дело этой книги – рассказать, как мы дошли до жизни такой от времен собирательства, охоты и – что гораздо важнее! – наскальной живописи и счетных палочек.



52Известный анекдот про Мэри Сомервилль такой. Однажды в переписке Лаплас написал Сомервилль: «Я знаю только трех женщин в мире, понимающих мои труды. Это вы, мадам Сомервилль, Каролина Гершель и некая миссис Грейг, о которой, к сожалению, мне ничего особо не известно.» "Ничего особо не было известно" Лапласу про миссис Грейг по той простой причине, что все просвещенное сообщество знало миссис Грейг под ее именем от второго брака: Сомервилль.
53Я крайне рекомендую почитать по поводу приключений Ады и Байрона книжку [61], в которой в жанре графического романа сначала рассказывается правдивая история создания первого в мире компьютера, а потом добавлена фантастическая часть (но ее можно не читать тем, кто не хочет). В книжке с большим юмором рассказывается про этих замечательных людей.
54Ясное дело, в этой главе один из портретов Ады нарисован компьютером. Второй – маслом.
55Кстати, только в 1998 году удалось научно доказать, что та машина была "полноценным универсальным компьютером". До этого, были споры, действительно ли на Z3 можно реализовать любой алгоритм.
56нет, ChatGPT не стал первым ИИ, рисующим картины и понимающим человека на слух. Такие были и раньше. Но те обычно делали что-то одно: один ИИ рисовал картины. Другой – распознавал человеческую речь и так далее. ChatGPT – универсальный, один интеллект, одна система для всего!
57Возможно, не любым человеческим языком, но близко к тому. Совершенно точно, с ChatGPT пользователь может общаться на любом из распространенных человеческих языков.