Выбрать главу

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

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

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

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

Ради этой согласованности они оставили все специфические области потенциальных компьютерных приложений и попытались сконцентрироваться на том, что все эти приложения должны были иметь общего; они сделали это ради согласованности и общности, которая необходима для надёжности.

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

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

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

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

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

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