Научная фантастика и научная реальность в информатике
Шрифт:
В шестидесятых годах сэр Герман Бонди написал статью о том, кому следует заниматься академическими исследованиями. Вопрос был поднят весьма важный. До второй мировой войны учёных было пренебрежимо мало, но после признания того, что война была выиграна наукой и технологиями, академические учреждения начали получать поддержку. Неудивительно, что Бонди пришёл к выводу, что многим из его современников, привлечённых к научным исследованиям, лучше было бы подыскать себе другое занятие. Поскольку взрывное развитие университетов было напрямую связано с ожиданием большой отдачи от науки, Бонди также посвятил раздел своей статьи обсуждению пользы от науки в целом. Его вывод отрезвляет.
Он указывает, что среди задач, поступающих в университеты извне, из «реального мира», около 80 % тривиальны и около 20 % явно неразрешимы,
По несчастному историческому совпадению, компьютеры появились как раз в десятилетия безграничной веры в всемогущество науки и технологии. Тогда как более устоявшиеся науки обзавелись корнями и традициями в более благоразумные времена, мы ввязались в информатику, когда наши ожидания ничем не сдерживались. С исторической точки зрения этот наивный оптимизм вполне понятен. И этому даже можно найти кое-какие оправдания. Видите ли, Бонди физик, и его мнение 80/20 % обусловлено его знанием, каким образом естественные науки справляются со сложностями, с которыми мы сталкиваемся в окружающем нас мире. Напротив, информатика имеет дело с миром артефактов, в котором сложность имеет рукотворное происхождение. В этом заключается большая разница между ними, и вполне возможно, что в области информатики «пограничный слой» Бонди вовсе не так уж исчезающе тонок. Но чтобы сделать грамотный вывод о том, что данный слой мог бы и должен был бы содержать, нам придётся понять, как возникла и как развивалась информатика.
Впрочем, перед тем, как обратиться к информатике как таковой, я должен разделаться ещё с одной мечтой, которой часто грезили в эти десятилетия, а именно — что возможно «планировать» исследования таким образом, чтобы в должное время производить то, что требует мир. Наука не может работать в таком режиме (что, кстати говоря, не так уж плохо, поскольку зачастую существует коренное различие между тем, что мир требует, и тем, что ему в действительности нужно).
Е.Т. Белл справедливо хвалил некоторых руководителей за то, что они были «достаточно дальновидны, чтобы понять, что самый простой путь избавить математику от математика — это оплачивать его содержание», и это справедливо и для других наук. Никогда ещё не наблюдался значительный прогресс в науке из-за того, что какому-то благодетелю понадобился результат. Существенный прогресс в науке возникает лишь тогда, когда после поисков и размышлений образованный и оригинальный ум приходит к выводу, что что-то загадочное наконец-то созрело для понимания или что-то очень трудное может теперь быть сделано. Успешный научный поиск — это искусство делать действительно возможное, и следовательно, развитие науки гораздо лучше рассматривать как автономный процесс со своими собственными правилами, а не как плановую деятельность с заранее установленными внешними целями. (И с этим парадоксом сталкиваются все директора промышленных исследовательских лабораторий: привлекая нужных людей, они не могут служить своей компании лучше, чем просто оставив их в покое).
Сторонники междисциплинарных исследований, кажется, иногда верят в то, что границы между различными науками — не более, чем каприз истории. Но пути, которыми научное знание расходилось по разным дисциплинам, вовсе не случайны: то, что может образовать область жизнеспособной научной дисциплины, должно иметь количественные и качественные ограничения.
Среди количественных ограничений я упомяну, что область должна быть достаточно мала, так чтобы основные положения умещались в одной человеческой голове; с другой стороны, она должна быть достаточно обширна, чтобы предоставлять пищу для размышлений хотя бы на некоторое время.
Среди качественных ограничений я упомяну, что с одной стороны эти проблемы должны быть достаточно независимы от остальных, чтобы их можно было изучать изолированно от других, тогда как с другой стороны область должна обладать внутренней согласованностью.
Последнее требование полностью проясняет, каким образом раньше отделения информатики предшествовали самой
Коктейль, составленный как попало, не может быть хорош на вкус. Образование связей — одна из первостепенных задач для тех, кто пробивает нишу, в которой многообещающая наука информатика станет жизнеспособной.
Ради этой согласованности они оставили все специфические области потенциальных компьютерных приложений и попытались сконцентрироваться на том, что все эти приложения должны были иметь общего; они сделали это ради согласованности и общности, которая необходима для надёжности.
Другой аспект этой надёжности — сознательная попытка избежать подготовки учёных в течение половины от пятилетнего срока. Это включает, в частности, воздержание от всего, что только имеет отношение к компьютерам, доступным нынче на рынке. Например, то, как обходиться с идиосинкразией OS/360, рассматривалось как временная цель, не относящаяся к предмету информатики.
В общем: ниша была подготовлена вне специфических приложений и вне специфических машин. С течением времени в том же духе продолжается уклонение от особенностей специфических языков программирования и операционных систем. Сначала это делалось для защиты зарождающейся науки от изменчивости рыночных продуктов, а когда некоторые из этих продуктов стали стандартом де-факто, это стало делаться для защиты расцветающей науки от рыночного застоя.
Независимо от того, выражать ли сожаление или восторг по поводу этого разделения, я хочу, чтобы вы поняли, что для становления информатики как жизнеспособной науки это разделение было и остаётся conditio sine qua non.
Что же информатика делала в этой блистательной изоляции? Точнее говоря, что она делала, не теряя претензий на прикладную значимость? Что же, сделала она немало; фактически, куда больше, чем я могу разъяснить в рамках данной лекции, но я могу хотя бы передать вам общие моменты.
В шестидесятые годы она разработала теорию синтаксического разбора, необходимую для поднятия уровня компиляторов выше уровня поделок, напичканных ошибками, и превратив её в предмет, пригодный для обучения. Это было главное достижение: я, например, помню весьма отчётливо, как в 1962 те из нас, кто действительно написал компилятор, выглядели в глазах остальных как некие полубоги. В связи с этим достижением я бы хотел подчеркнуть, что этого никогда бы не произошло, если бы мы со временем не научились давать формальное определение синтаксиса компилируемого языка: без этого формального определения слишком сложно было бы определить существование проблемы компиляции. Теория конечных автоматов и теория сложности были разработаны, чтобы задать основные количественные границы того, что в принципе может быть вычислено; опять же, в основе этих теорий лежит очень формальный постулат относительно того, что есть вычисление, постулат, без которого эти теории не могут существовать. Для разработки операционных систем проблема синхронизации процессов была поставлена и решена, и первые теоремы об отсутствии «смертельных объятий» были доказаны; также формальное определение явления, интуитивно известного как «смертельное объятие», было первой предпосылкой этого достижения.
В семидесятые годы центр внимания сместился от синтаксиса к семантике, сначала к детерминированным последовательным программам, но вскоре впоследствии охватил также недетерминированность и параллельность. Я не буду подробно описывать различные отрасли: они простираются от модели типизированного лямбда-счисления до разработки преобразований программ с сохранением семантики. В этом десятилетии программы стали самостоятельными математическими объектами. Кратчайший способ уловить изменение направления внимания — это, пожалуй, отметить, что если раньше задачей программ было управлять поведением машины, то теперь задачей машины стало выполнение наших программ. Верификация и разработка программ развились в разделы формальной математики до такой степени, что теперь уже не считается безответственностью опубликовать программу, не испробовав её на компьютере.