Что же информатика делала в этой блистательной изоляции? Точнее говоря, что она делала, не теряя претензий на прикладную значимость? Что же, сделала она немало; фактически, куда больше, чем я могу разъяснить в рамках данной лекции, но я могу хотя бы передать вам общие моменты.
В шестидесятые годы она разработала теорию синтаксического разбора, необходимую для поднятия уровня компиляторов выше уровня поделок, напичканных ошибками, и превратив её в предмет, пригодный для обучения. Это было главное достижение: я, например, помню весьма отчётливо, как в 1962 те из нас, кто действительно написал компилятор, выглядели в глазах остальных как некие полубоги. В связи с этим достижением я бы хотел подчеркнуть, что этого никогда бы не произошло, если бы мы со временем не научились давать формальное определение синтаксиса компилируемого языка: без этого формального определения слишком сложно было бы определить существование проблемы компиляции. Теория конечных автоматов и теория сложности были разработаны, чтобы задать основные количественные границы того, что в принципе может быть вычислено; опять же, в основе этих теорий лежит очень формальный постулат относительно того, что есть вычисление, постулат, без которого эти теории не могут существовать. Для разработки операционных систем проблема синхронизации процессов была поставлена и решена, и первые теоремы об отсутствии «смертельных объятий» были доказаны; также формальное определение явления, интуитивно известного как «смертельное объятие», было первой предпосылкой этого достижения.
В семидесятые годы центр внимания сместился от синтаксиса к семантике, сначала к детерминированным последовательным программам, но вскоре впоследствии охватил также недетерминированность и параллельность. Я не буду подробно описывать различные отрасли: они простираются от модели типизированного лямбда-счисления до разработки преобразований программ с сохранением семантики. В этом десятилетии программы стали самостоятельными математическими объектами. Кратчайший способ уловить изменение направления внимания — это, пожалуй, отметить, что если раньше задачей программ было управлять поведением машины, то теперь задачей машины стало выполнение наших программ. Верификация и разработка программ развились в разделы формальной математики до такой степени, что теперь уже не считается безответственностью опубликовать программу, не испробовав её на компьютере.
Что ж, это далеко не полный обзор того, как информатика стала наукой, и я приношу свои извинения всем не упомянутым мной, кто внёс свой вклад в её становление. Но я надеюсь, что он всё же достаточно полон, чтобы донести до вас аромат квинтэссенции дисциплины. Она стала замечательной дисциплиной, поскольку разделение между «чистой» и «прикладной», столь традиционное для многих других дисциплин, совершенно поблёкло и существенно утратило своё значение. Роскошь работы в окружении, в котором различие между чистой и прикладной наукой лишено смысла, — это, пожалуй, ещё одно признание факта, что компьютер общего назначения действительно заслуживает эпитета «общего назначения».
Она обладает всей пикантностью чистой математики, будучи более формальной, чем многие другие отрасли математики. Она не может избежать такой формальности, поскольку любой язык программирования, будучи интерпретируемым механически, представляет своего рода формальную систему.
В то же время она обладает всей прелестью прикладной математики, поскольку огромная мощность современных компьютеров даёт такие возможности для создания хаоса, что её методы необходимы, если мы не намерены попасться в ловушку сложности, которую сами же и создали.
Научиться не попадаться в собственноручно произведённую ловушку сложности, сохранять вещи достаточно простыми и научиться достаточно эффективно мыслить о своих разработках — вот центральная задача информатики. Это также было осознано больше десятка лет назад, когда «разделение задач» стало находкой программной терминологии.
Заметьте, пожалуйста, что путь, которым информатика пробивала свою нишу, был сам по себе примером успешного «разделения проблем». Каждый раз, когда мы вкладываем уйму умственной энергии в тщательную разработку любой дискретной системы, мы делаем это не просто для удовольствия: мы всегда надеемся, что результат наших усилий будет использован на благо другим. Мы надеемся, что он будет удовлетворять нужды, соответствовать ожиданиям и доставлять удовольствие своим пользователям. В донаучный период разработки систем неформальное понятие «удовлетворения пользователя» было единственным приемлемым критерием качества программного обеспечения.
Недостаток «удовлетворения пользователя» как критерия качества состоит в том, что это не техническое понятие: он не задаёт технического направления разработчику и, кроме того, может быть достигнут другими средствами, помимо технических, например, агрессивной рекламой или промывкой мозгов. К науке это не имеет ни малейшего отношения. Задачи должны быть разделены, и тут на сцене появляются функциональные спецификации.
Роль формальной функциональной спецификации — просто служить логическим барьером между двумя совершенно разными проблемами, известными как «проблема удовлетворённости» и «проблема корректности». Проблема удовлетворённости касается вопроса, соответствует ли система, отвечающая таким-то и таким-то формальным спецификациям, вашим ожиданиям и надеждам.
Проблема корректности касается вопроса, соответствует ли данная разработка таким-то и таким-то формальным функциональным спецификациям.
Логический барьер был необходим, чтобы поставить проблему корректности перед информатикой: он изолирует уютную нишу информатики от проблемы удовлетворённости, решению которой наука мало чем способна помочь. Заметьте, пожалуйста, что я не утверждаю, что одна из проблем важнее другой; в конце концов, цепь не прочнее самого слабого звена. Однако я утверждаю, что проблема корректности представляет ту самую часть, которую нам удалось втиснуть в «тонкий пограничный слой» Бонди, где разумное применение научной мысли может принести пользу, тогда как неформализованная проблема удовлетворённости в действительности лежит на пределами компетенции науки.
У вас могут быть самые разные проблемы, начиная с опасного перекрёстка и заканчивая такими, которые угрожают самому существованию целых поколений. Однако наука никогда не решает ваши проблемы, она решает лишь свои собственные, и заключение, примете ли вы решение формальной научной проблемы как таковой в качестве приемлемого решения своей задачи, лежит целиком на вас. Другими словами: наука никогда не предлагает моделей реальности, она лишь строит свою теорию, и вопрос, примете ли вы своё восприятие действительности в качестве достаточно достоверной модели для этой теории, полностью ваша проблема. Достоверность и реалистичность больше не являются научными понятиями, и учёный уступает право разглагольствования о них философам, пророкам и поэтам.
С этой точки зрения роль науки довольно ограничена, на самом деле до такой неутешительной степени, что многие предпочитают закрывать глаза на ограниченность науки.
Акцентировать внимание на этих ограничениях не принято в научной среде, поскольку помимо прочего это вызывает вопрос, а зачем тогда общество должно терпеть учёных.
Это не шутка: все мы знаем, что если бы сегодня общество вдруг решило изгнать своих учёных, это было бы не впервые.
И теперь, когда наука «вышла в народ», так сказать, она также не столь популярна среди публики в целом. Люди всегда питали противоречивые чувства по отношению к технологии, и с чем более мощными технологиями они сталкиваются, тем драматичнее становится двойственность этого отношения.
Они чувствуют угрозу со стороны технологии сильнее, чем когда-либо прежде; в то же время их надежда на спасительную мощь науки и технологии всё больше крепнет. В старые добрые времена традиционного шаманства от него требовались только снадобья от всех недугов, Эликсир для вечной юности и Философский Камень для сотворения золота.