Научная фантастика и научная реальность в информатике - [4]

Шрифт
Интервал

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

Независимо от того, выражать ли сожаление или восторг по поводу этого разделения, я хочу, чтобы вы поняли, что для становления информатики как жизнеспособной науки это разделение было и остаётся conditio sine qua non.

Что же информатика делала в этой блистательной изоляции? Точнее говоря, что она делала, не теряя претензий на прикладную значимость? Что же, сделала она немало; фактически, куда больше, чем я могу разъяснить в рамках данной лекции, но я могу хотя бы передать вам общие моменты.

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

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

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

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

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

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

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


Еще от автора Эдсгер Дейкстра
Притча о железнодорожных вагонах

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