18 лет назад 5 октября 2006 в 12:23 1268

Ленивый гений

В 1947 году на экраны кинотеатров СССР вышел фильм Григория Александрова «Весна». Напомню кратко, что в центре сюжета фильма — история о том, как маститый режиссер Громов пытается снять фильм об ученой Никитиной, занимающейся проблемами получения солнечной энергии. Поучая актрису, как должен себя вести «настоящий ученый», Громов говорит: «Ученый — это человек, который живет в замкнутом мире своих формул. Это пустынник в большом городе. В строгом уединении творит он будущее, презрев сегодняшние земные радости». А Никитина доказывает Громову, что «настоящий советский ученый» живет в самой гуще современной жизни и ничто человеческое ему не чуждо.
Забавно, но спустя почти полвека нашелся ученый, который почти слово в слово повторил сентенции режиссера Громова. «Большинство ученых занимаются наукой, потому что боятся жизни.

Прекрасно участвовать в научном творчестве, поскольку таким образом вы ограждаете себя от столкновения с людьми и от боли как результата этих столкновений. Ученый живет в стерильном мире, далекий от реальной жизни». Слова эти принадлежат не какому-то мизантропу, а человеку, который самым существенным образом повлиял на развитие компьютерной техники. Имя этого человека — Джон Бэкус (John Backus).

Джон Бэкус родился в 1924 году в Филадельфии в семье главного инженера-химика в фирме по производству нитроглицерина. Бэкус-старший начинал свою карьеру скромным служащим, но сильно продвинулся по служебной лестнице во время Первой мировой войны, когда благодаря его техническим изобретениям была предотвращена серия взрывов на заводах. Так что тяга к исправлению неэффективных процессов, можно сказать, у Джона была в крови. Однако поначалу ничто не указывало на то, что от Бэкуса-младшего хоть когда-нибудь будет малейшая польза. Как позднее вспоминал он сам, несмотря на то, что родители определили его в престижную школу, процесс обучения вызывал у него отвращение. Проще говоря, Джон Бэкус в детстве и юности был самым настоящим обалдуем. Когда в 1942 году он поступил в Университет Виржинии, то единственным занятием, которое он посещал раз в неделю, были классы по музыке.

К концу его второго семестра, в 1943 году, руководство университета решило, что дальнейшее пребывание молодого лодыря в стенах учебного заведения излишне, и без проволочек Бэкус был отчислен. В это время в мире бушевала Вторая мировая война и США уже полтора года вели боевые действия против Японской империи. Молодой Джон Бэкус, который фактически не получил никакого образования, в чине капрала поступил в силы ПВО на Тихом океане. Непосредственно в район боевых действий он, правда, не попал. Врачебная комиссия поставила ему диагноз — опухоль черепной кости, и врачи ему в голову вмонтировали металлическую пластину. По мнению Бэкуса, пластина была сделана ненадлежащим образом. Он связался с техниками, которые занимались такими пластинами, и заказал им новую по собственным чертежам.

Обзаведясь металлическим колпаком собственного производства, демобилизованный Бэкус отбыл в Штаты и поселился в Нью-Йорке. Дальше он стал думать о том, чем бы ему таким заняться в жизни. Ничто, кроме музыки, его не привлекало. Поскольку ему сильно хотелось иметь хорошую аппаратуру для прослушивания музыки, он поступил в школу радиотехники, чтобы самому сделать для себя все нужные устройства.
В школе один преподаватель попросил Джона Бэкуса помочь ему с построением графиков частотных характеристик усилителя. Вычисления были несложными, но их обилие утомляло. Неожиданно эти повторяющиеся математические операции заинтересовали Бэкуса, и он поступил на математические курсы Колумбийского университета.

Весной 1949 года, за несколько месяцев до получения диплома, 25-летний Джон Бэкус все никак не мог определиться со своим будущим. Как-то раз в поисках перспективной работы его занесло в Компьютерный центр IBM на Мэдисон Авеню. Тогда слово «компьютер» (computer) обозначало совсем не то, что оно обозначает сегодня. В IBM Бэкус познакомился с проектом Selective Sequence Electronic Calculator (SSEC) — одной из первых разработок IBM в новой области электронных вычислительных устройств на вакуумных лампах. Этот, так сказать, компьютер не имел памяти, а весь ввод и вывод происходил посредством перфолент. После собеседования Джон Бэкус был принят на работу. Этот момент, можно сказать, самым серьезным образом повлиял на последующее развитие мирового программирования и как следствие всей вычислительной техники в целом.

В проекте SSEC Джона Бэкуса подключили к решению задачи вычисления положения Луны в 12-часовом интервале в любой момент на 200-летнем отрезке времени. Для вычисления каждой позиции Луны требовалось произвести 11 тысяч сложений и вычитаний, 9 тысяч умножений и выполнить 2 тысячи просмотров специальных таблиц, так что 13 тысяч огромных вакуумных ламп SSEC гудели как церковный орган. Различные узлы SSEC располагались вдоль трех стен комнаты размером 18 на 6 метров, так что служащие находились как бы внутри компьютера. Вычисления, выполненные, в том числе и Бэкусом, на SSEC, кстати, использовались в космической навигации НАСА в период с 1952 по 1971 годы. Позднее Бэкусу приходилось выполнять и более экзотические задачи — например, вычисление точных орбит пяти внешних планет Солнечной системы на временном интервале с 1653 по 2060 годы. Однако в 1952 году SSEC уже морально устарел и был демонтирован.

Команда SSEC разбежалась по различным подразделениям IBM. Джон Бэкус с группой программистов присоединился к проекту 701. Компания IBM настаивает на том, что созданная в 1952 году машина IBM 701 стала фактически первой ЭВМ с архитектурой, взятой за образец всеми последующими разработчиками. Это утверждение можно и оспорить. Но факт остается фактом: для самой IBM модель 701 действительно стала водоразделом, и все последующие модели мейнфреймов IBM были ее отдаленными потомками. А поскольку в итоге в мире победила архитектура IBM, появление IBM 701 действительно можно считать знаковым событием. В этой машине, кстати, разработчикам удалось реализовать технологию магнитной ленты. Различные попытки использования магнитной ленты были и до IBM 701, однако специалистам не удавалось сделать процесс считывания информации стабильным. Инженеры IBM справились с этой задачей. Таким образом, точно можно сказать, что эра магнитных накопителей началась именно с IBM 701.

Однако IBM 701 была все же ламповой машиной, и в 1954 году компания IBM запустила новый проект — 704. Это уже была машина нового поколения — поколения электронно-магнитной памяти. Машина IBM 704 предоставила программистам универсальный набор команд для работы, в том числе с числами с плавающей запятой. Те, кому когда-нибудь приходилось на «Ассемблере» писать алгоритмы обработки чисел с плавающей запятой, знают, как это нелегко. А программировать в ту пору приходилось в основном только математические формулы, и никаких математических сопроцессоров не было. Неудивительно, что в конечном итоге лентяй Джон Бэкус (как он впоследствии шутливо, а может, и не совсем шутливо вспоминал) стал все больше задумываться над тем, как создать независимый от архитектуры машины язык, который позволяет легко программировать математические формулы. Бэкус собрал группу из девяти дипломированных специалистов по математике, и они с энтузиазмом принялись за работу по созданию нового языка. Эти девять человек позднее вошли в пантеон программистской славы, а потому будет нелишним упомянуть их имена: Роберт Нельсон (Robert Nelson), Харлан Херрик (Harlan Herrick), Льюис Хэйт (Lois Haibt), Рой Нат (Roy Nutt), Ирвинг Циллер (Irving Ziller), Шелдон Бест (Sheldon Best), Дэвид Сэйр (David Sayre), Ричард Голдберг (Richard Goldberg) и Питер Шеридан (Peter Sheridan).

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

Джон Бэкус, конечно, шутит, когда говорит, что ничего не делал. Честь создания первого языка высокого уровня (HLL — High Level Language) принадлежит ему, и никто этих лавров у него никогда не отнимал. Спецификация нового языка появилась осенью 1954 года. Текст программы стал более простым, появились конструкции IF для организации ветвлений и циклы. Но самое главное — невероятно упростилось программирование формул. Например, формула D=B2-4AC, программирование которой даже на современном «Ассемблере» потребует десяток строк кода, на новом языке просто и изящно записывалась следующим образом: D=B**2-4*A*C. Неудивительно, что новый язык назвали транслятором формул (formula translator). Позднее в качестве официального названия закрепилось сокращение этой фразы — FORTRAN. В ноябре 1954 года Харлан Херрик на машине IBM 704 запустил и успешно выполнил первую «фортран»-программу, вообще-то говоря, первую HLL-программу.

Появление языка программирования высокого уровня, который не был привязан к машинам какой-то одной определенной архитектуры, послужило мощным стимулом для развития компьютерной техники. Теперь программисты могли за сравнительно небольшой промежуток времени писать программы, значительно превосходившие по объему вычислений то, что можно было сделать на «Ассемблере». Соответственно, возросли и требования к аппаратной части, что подстегивало изобретателей к созданию более мощных вычислительных систем.

Однако создание «Фортрана» — не единственный вклад Джона Бэкуса в развитие современного программирования. В 1960 году группа программистов из Цюриха, внеся некоторые изменения в спецификацию FORTRAN II, создала алгоритмический язык Algol-60. Джон Бэкус принял самое живое участие в обсуждении нового языка. Однако возникла проблема — английский язык, на котором изъяснялся Бэкус, был мало понятен швейцарским программистам. Для того чтобы исключить взаимное недопонимание, при описании конструкций языка были применены специальные диаграммы, которые Бэкус разработал совместно с Питером Науром (Peter Naur). С тех пор Форма Бэкуса-Наура (Backus-Naur Form — BNF) стала как бы эсперанто мирового программирования. Программисту, владеющему BNF, для знакомства с новым языком не нужно изучать толстенных фолиантов с описанием, достаточно изучить BNF этого языка.

И, наконец, Джон Бэкус создал язык FP, который, правда, не стал так же популярен, как «Фортран». FP — это так называемый чистый функциональный язык программирования, в котором программист сосредотачивается не на переменных и их значениях, а на «черных ящиках» — функциях, имеющих вход и выход. Идеи, использованные в языке FP, послужили материалом для размышления создателям языка LISP. Некоторые современные теоретики программирования считают, что за строгим функциональным программированием будущее, так как, используя этот метод, проще создавать «правильные программы», то есть такие, правильность которых может быть доказана уже путем анализа листинга, а не путем длительных тестов.

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

Универсальная IBM 704

Вычислительная машина IBM 704, имевшая 35-битные регистры, была создана в качестве универсального крупномасштабного компьютера, предназначенного как для научных вычислений, так и для коммерческого использования. В отличие от лампово-релейной IBM 701, IBM 704 имела память на магнитных сердечниках — прообраз современной DRAM. Память IBM 704 позволяла производить до 12 миллионов операций в секунду, однако сама машина не могла работать быстрее, чем со скоростью четыре тысячи операций в секунду. Это было то время, когда процессор сильно отставал по быстродействию от памяти.

В дополнение к памяти на магнитных сердечниках в IBM 704 был впервые применен так называемый магнитный барабан, который использовался для хранения выполняющихся программ и промежуточных результатов. Устройствами длительного хранения данных были накопители на магнитной ленте, а программы хранились в виде колод перфокарт. Таким образом, магнитные ленты и перфокарты IBM 704 можно уподобить винчестерам современных компьютеров, магнитный барабан — оперативной памяти, а память на магнитных сердечниках — кэш-памяти.

Для IBM 704 была разработана специальная консоль оператора, и любая команда могла быть послана машине с этой консоли с помощью кнопок и клавиш. Также в состав машины входило печатающее устройство. UP

Дмитрий Румянцев

Никто не прокомментировал материал. Есть мысли?