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

Эдсгер Вайб Дейкстра

2 февраля 2005 года с космодрома Куру во Французской Гвиане стартовала ракета-носитель «Ариан-5 ECA». Ракета из-за технических накладок была выведена на орбиту с задержкой в сутки.

Стоимость программной ошибки

Но самая крупная катастрофа ракеты типа «Ариан-5» произошла 4 июня 1996 года. Пятидесятиметровая громадина стартовала, неся четыре спутника на борту. Через 30 секунд полета ракета отклонилась от траектории, и, чтобы предотвратить ее падение на город Кура, пришлось взорвать ее командой с Земли. Обломки «Ариан-5» были разбросаны в радиусе 17 км. Катастрофа нанесла не только денежный ущерб — сотни миллионов долларов, но и не поддающийся подсчетам экологический ущерб: люди, проживающие в радиусе 25 км от места взрыва, в течение трех суток жаловались на жжение в глазах и проблемы со слухом.

Как показало расследование, причиной аварии «Ариан-5» стала ошибка программиста. В одной из подпрограмм системы инерциальной ориентации содержался некорректный код преобразования 64-битного числа с плавающей точкой в 16-битное целое со знаком. Ошибка программиста уничтожила аппарат стоимостью в сотни миллионов долларов! Воистину, этот случай по праву достоин того, чтобы быть занесенным в Книгу рекордов Гиннеса.

Однако, строго говоря, несправедливо винить во всем лишь одного программиста, писавшего код. Ответственность в полной мере несут и разработчики компилятора, из-за которого стала возможной подобная ошибка. Ибо по-настоящему надежный компилятор должен отлавливать такие баги еще на стадии трансляции.

Роль личности в истории

Само существование современной компьютерной индустрии опровергает старый коммунистический тезис, гласивший, что роль личности в истории ничтожна и полностью подчинена движущим силам народных масс. Как бы не так! Микропроцессоры перевернули мир. Управление государством, экономические процессы, социальные изменения — все это сегодня происходит совершенно иначе, чем 50 лет назад, поскольку практически любому жителю более или менее развитой страны доступно какое-либо устройство связи и обработки информации. Даже плохенькую революцию сегодня невозможно совершить, не имея доступа в интернет.

Разумеется, уже не так важно, кто стоит во главе Intel, или AMD, или той же Apple. Но не будь на свете Федерико Фэджина, все могло бы развиваться совершенно иначе. Даже имея в своем распоряжении микропроцессор, компания Intel долгое время рассматривала его как некий побочный продукт. До тех пор, пока не начался бум микрокомпьютеров. Этот бум, в свою очередь, был обусловлен не столько появлением первых ПК, сколько наличием доступного интерпретатора языка BASIC компании Microsoft.

А разве стали бы Гейтс и Аллен разрабатывать этот самый интерпретатор, если бы Джон Кемени и его друг Том Куртц не изобрели сам язык в начале 1960-х? Но и Джон Кемени ничего бы не создал, если бы в свое время его руководитель — Альберт Эйнштейн — не сказал бы ему: «Если ты хочешь, чтобы люди считались с твоим мнением, сделай сперва себе имя в какой-либо новой отрасли науки». Именно эти слова побудили Кемени отправиться в Дартмутский колледж, а это, в свою очередь… и т. д., и т. п. Так что, граждане, порой Личность способна одной своей фразой изменить будущее.

Сделай сам

На рубеже 50-х и 60-х годов прошлого века большинство разработчиков поняли, что программное обеспечение становится узким горлышком, замедляющим свободное развитие компьютерной индустрии. Гордон Мур еще не до конца сформулировал свою идею (усилиями инженеров из Intel превратившуюся в «закон»), но уже тогда было ясно, что транзисторы многократно усилят мощности ЭВМ. Переход на новую аппаратную базу, в свою очередь, неминуемо должен был привести к тому, что привычные методы разработки программ оказались бы бесполезными. Это связано с… впрочем, дадим слово одному из признанных авторитетов в программировании.

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

Автор этих строк — датчанин Эдсгер Вайб Дейкстра (Edsger Wybe Dijkstra). Ему же принадлежит еще немало едких сентенций. Вот две из них: «Программирование — одна из наиболее трудных областей прикладной математики; чистым математикам в ней делать нечего — пусть лучше занимаются чистой математикой» и «Об использовании языка программирования можно сказать так: невозможно остро отточить карандаш тупым топором, и уж совершенно бесполезно пытаться выполнить эту задачу десятью тупыми топорами». Но место в пантеоне компьютерной славы он заслужил навечно отнюдь не благодаря этим текстам.

Эдсгер В. Дейкстра родился 11 мая 1930 года в семье ученых (его отец был химиком, мать — математиком). Поначалу он хотел выучиться на юриста и представлять Данию в ООН. Позже, поступив в Лейденский университет на факультет теоретической физики, Дейкстра решил, что обессмертит свое имя, став физиком-теоретиком. В 1951 году он, считая, что знаменитому физику-теоретику не помешает знакомство с ЭВМ, поступил на трехнедельные компьютерные курсы в Кембридже. С 1952 года Дейкстра уже работает программистом в Математическом центре Амстердама.
В 1956 г. Дейкстра участвует в создании ЭВМ X1.

В группу разработчиков, кроме него, входили еще два конструктора. Они спроектировали ее от начала до конца. Это была чистой воды кустарщина, но через год ЭВМ работала (интересно в этой связи вспомнить, что в то же самое время в Москве Н. П. Брусенцов и Е. А. Жоголев приблизительно в таких же условиях создавали ЭВМ «Сетунь»). Создавая X1, Дейкстра написал алгоритм, который сегодня носит его имя, — алгоритм минимизации пути в графе. Этот логический принцип имел практическое назначение: он должен был использоваться для оптимального проектирования линий на плате. Позднее Дейкстра вспоминал по этому поводу: «На много лет в широких кругах алгоритм поиска кратчайшего пути был основным источником моей славы, что мне всегда казалось странным, ведь он был создан даже без карандаша и бумаги, за чашкой кофе на солнечной террасе кафе в Амстердаме, в качестве демонстрации решения проблемы с X1 для моей жены…»

Структурное программирование

Летом 1959 года Дейкстра начинает работать над проектом по созданию нового языка. Поскольку к тому времени сфера использования ЭВМ разделилась на два направления — научное и коммерческое, очень многие программисты стали всерьез утверждать, что и языки программирования должны быть разными — как математическими (типа Фортрана), так и чисто коммерческими. Однако такие ученые, как Эдсгер В. Дейкстра, были уверены в том, что необходим единый универсальный язык программирования. В ноябре 1958 года в немецком городе Майнц прошла конференция, в которой участвовало около 40 человек из различных стран.

Целью конференции была выработка первичных спецификаций для нового алгоритмического языка. Этот язык так и назвали: Алгол-60 (Algorithmic Language). Окончательное его описание было опубликовано в декабре 1960 года (отсюда «порядковый номер»). В работе по созданию языка принимали участие ученые, из которых далеко не все свободно владели английским языком, поэтому впервые для описания его синтаксиса была применена так называемая форма Бэкуса-Наура (BNF) — специальная нотация, формализующая описание любого языка (Дж. В. Бэкус и П. Наур были одними из разработчиков). Работая над Алголом-60, Дейкстра ввел в программистский лексикон такие слова, как «стек» и «рекурсия».

После Алгола-60 Дейкстра принял участие в разработке системы THE. «Создавая THE, мы знали, что творим историю, потому что это была первая в мире ОС, основанная на независимых синхронизируемых взаимодействующих процессах с защитой от тупиковых ситуаций (дедлоков)», — вспоминал он о тех днях. Работа над этой ОС и обозначила проблему «бутылочного горлышка». Дело в том, что масштабы задачи значительно превосходили возможности небольшой команды разработчиков.

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

Дейкстра доказал, что использование специальных методов структурирования позволяет сделать программу понятной и, главное, управляемой, а стало быть, надежной. Он утверждал, что «тестирование программ может выявить наличие ошибок, но не может служить доказательством их отсутствия». Иначе говоря, Дейкстра сформулировал такой принцип: любая программа содержит ошибки, просто они до поры до времени остаются невыявленными. И задача программиста заключается в том, чтобы быстро исправить их, не «обрушив» программную систему. К сожалению, даже сегодня в большинстве учебных заведений программистов учат тому, как писать небольшие софтины, не содержащие ошибок, вместо того чтобы учить тому, как локализовывать и исправлять программные баги.

Эпилог с продолжением

Эдсгер Вайб Дейкстра умер в 2002 году. Его работа «Дисциплина программирования» (написанная на базе «Заметок о структурном программировании») является одним из лучших учебников по программированию «не для чайников». Следующий шаг в деле создания надежных программных систем сделал товарищ Дейкстры — швейцарец Никлаус Вирт (Niklaus Wirth). Ему принадлежат такие слова: «Программирование является, возможно, самой важной новой дисциплиной постиндустриальной эры».

Влияние этого человека на развитие индустрии программирования (а стало быть, и на цивилизацию в целом), как говорится, просто невозможно переоценить. В его копилке языки Паскаль (в различных реинкарнациях), Модула и Модула-2, Оберон и многое другое. При разработке языка Оберон, например, была выдвинута идея так называемой независимой кодогенерации. Она значительно повлияла на концепцию апплета языка Java. Ну и, конечно же, невозможно обойти стороной работу Вирта «Алгоритмы + Структуры данных = Программы» — классику учебной литературы по программированию.

В среде программистов Никлаус Вирт снискал себе лавры самого ехидного критика современных методов программирования и особенно методов обучения программированию. Вот что он, например, заявил в приветственной речи на открытии Международной конференции по преподаванию информатики 24 июня 2002 года в Аархусе (Дания). «Современный профессор — это менеджер большой команды исследователей, хваткий добытчик грантов, поддерживающий тесные связи с ключевыми организациями — источниками финансирования…

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

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

 

 UP

 

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