О пропасти между культурами. (Черновик.)

On a cultural gap (Draft.) EWD913.

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

Улучшать мир всегда было трудной задачей. Если человек признаёт, что мир можно улучшить, то он неявно соглашается, что мир несовершенен. Это вызывает затруднение у некоторых чувствительных людей. Можно подсластить пилюлю, расставляя тут и там смягчающие оговорки «типичный», «в общем», «в среднем», «обычно», «не является редкостью». Чтобы сэкономить время, я не буду этого делать. (Другая причина в том, что в глубине души я не верю, что смазывание моего текста этими оговорками что-то даст: тот, кто хочет почувствовать себя оскорблённым, всегда найдёт повод.)

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

Чтобы понять новинку, мы используем следующий известный метод — связать её с опытом, думать аналогиями и метафорами. Пока история скользит по накатанной колее, этот метод работает. Очевидно, что он не работает, когда мы сталкиваемся с чем-то настолько радикально новым, что аналогии, которые всегда поверхностны, не помогают, а сбивают с толку. Ничего не поделаешь, техника способна порождать такие радикальные новинки, и автоматический компьютер является одной из них. (В том же веке появились другие новинки — синтетические лекарства и атомная бомба.) Чтобы понять радикальную новинку, нужно сознательным усилием перестать соотносить её со случайно приобретённым опытом и изучить её собственную структуру. Этот метод редко используется, потому что он требует тяжёлой умственной работы.

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

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

Но удар был нанесён, дисциплина получила имя «компьютерная наука» (computer science), что то же самое, что называть хирургию «наукой о ножах». Мысль, что информатика есть наука о машинах и периферийном оборудовании, была крепко впрессована в мозги людей. Что совершенно ложно. (Сегодня я не могу сходить к врачу, стоматологу (в США стоматологи не считаются врачами — примечание переводчика) или адвокату без того, чтобы меня попросили помочь с офисным компьютером. Когда я сообщаю, что не в курсе, какое программное и аппаратное обеспечение сейчас предлагают на рынке, они смотрят на меня озадаченно.) Машинный портрет информатики по-прежнему гнездится в общественном сознании, хотя является устаревшим и искажённым. Разумеется, он скрывает от математического сообщества факт, что сейчас информатика, как ни удивительно, является разделом математики.

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

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

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

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

Как математики отнеслись к появлению компьютеров? Если нужен короткий ответ, то никак. Так как научные достижения становятся всеобщим достоянием только через половину столетия, ценности и предрассудки наших математиков сформировались в конце 19 века и начале 20 века. В то время царствовал анализ, любовь к континууму и комплексной плоскости, и бесконечность считалась показателем математической глубины. Какое, чёрт побери, отношение к этому могут иметь автоматические вычисления? (В шестидесятых годах один математик, которого вполне обоснованно считали знаменитым, заведующий департаментом (Chairman of the Department) Лейденского университета, мог позволить себе сказать: «Будучи математиком, я совершенно не разбираюсь в компьютерах, разумеется», — и не выставить себя на посмешище.) Он признавал за компьютерами только роль больших калькуляторов, которые пригодны разве что как инструмент для его коллеги, который занимается численным анализом, если такой коллега у него есть. Численный анализ, на который он в лучшем случае смотрит с презрением. Поэтому он перестал обращать внимание на компьютеры. Отвращение только усилилось, когда он узнал, что компьютеры применяются для управления коммерческими предприятиями. Это ещё более примитивное занятие, чем научные расчёты.

Иногда его покой нарушался известием, что некто в теории чисел или комбинаторике доказал теорему для всех n следующим образом: доказал её для всех n, которые больше некоторого большого N, и проверил оставшиеся варианты на одной из тех самых вычислительных машин. Он быстро восстановил равновесие, осудив эту практику. В конце концов он согласился на компромиссное утверждение, что иногда компьютер бывает полезен, но только для выполнения повторяющейся, рутинной работы. Но, поскольку все вычисления конечны, а все конечные проблемы в принципе тривиальны, что в них может быть интересного?

Успокоительное средство, к которому прибег математик, было порочным, как показало время. Скрипя зубами, он признал, что бывают ситуации, в которых будет неправильно сваливать все конечные проблемы в категорию «тривиальные», что необходимо выделить подкатегорию «да, конечные, но всё равно слишком большие на практике».

Однако его взгляды содержат более глубокий изъян. Однажды наш математик составил рассуждение, которым он очень гордился, потому оно было под завязку набито трансфинитными ординалами и прочими солидными вещами. Но, когда он показал его коллеге, что он показал: бесконечные множества или… конечное рассуждение? Разумеется, это привело к вопросу «что есть математика?» Является ли математика, как раньше, «абстрактной наукой о пространстве, числах и количестве», согласно «Краткому оксфордскому словарю» (The Concise Oxford Dictionary), 6-е издание, 1976 год, или «искусством и наукой об эффективном мышлении»? Мне кажется, в этом содержится корень разногласий между культурами: математик выбирает оксфордское определение, информатик — последнее определение.

Позвольте мне обрисовать, чем будет наука о вычислениях с точки зрения информатика. Эта наука не о компьютерах, не о том, как использовать компьютеры в определённой прикладной области, а о том, как решать с компьютерами или без компьютеров (научные) проблемы, которые ставит перед нами существование компьютеров.

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

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

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

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

На современном этапе ясно, что не случайно, а по веской причине мы поздно осознали, что работа информатика является по сути математической, — информатика относится к тому типу математики, который непривычен для математика. Формальные техники в работе информатика играют гораздо бо́льшую роль, чем играли до сих пор в работе математика.

Мы видим — опять же, ретроспективно! — три причины, по которым формальные техники доминируют в информатике: практическую, косвенную и культурную.

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

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

Культурная причина заключается в том, что информатик склонен — «по своей натуре», так сказать — рассматривать манипуляцию символами как механическую обработку неинтерпретированных формул (независимо от того, собирается ли он автоматизировать какие-либо части этого процесса).

Некоторые логики частично осознали важность произошедшего. Пер Мартин-Лёф — смотрите [0], если вас интересует дальнейшее обсуждение — писал, например:

[Создание языков программирования высокого уровня с достаточно чистой логической структурой] сделало программирование занятием, которое по строгости и красоте приближается к доказыванию математических теорем. (Эта аналогия является точной в смысле, который будет объяснён ниже.)

и

Я считаю, что поиск языка программирования высокого уровня, который устраивает нас с логической точки зрения, не остановится, пока не дойдёт до языка, на котором можно адекватно выразить (конструктивную) математику.

Вот эпиграф книги [0], из которой взяты вышеприведённые цитаты:

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

Джон Маккарти, 1967

Цитаты выше подтверждают, что надежда Маккарти находится в процессе осуществления; во втором предложении цитаты из Маккарти, однако, описана трудность, которая стоит перед информатиком. Логик исследует формальные методы в основном для того, чтобы ухватить модель поведения математика. Он больше рассуждает о методах, чем использует их. Математик знает о существовании математической логики, но никогда не использует её. (С помощью простой проверки я установил, что для математического сообщества Джордж Буль жил напрасно: мизерна доля тех математиков, которые хорошо владеют исчислением высказываний.) Логик ассоциирует логику с более чистым аспектом математики. Информатик впервые в истории был вынужден применить формальную логику в грандиозных масштабах в качестве интегральной части своих повседневных рассуждений; в некотором смысле, обстоятельства вынудили его стать математиком больше, чем Папа Римский является католиком.

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

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

[0] Hoare, C. A. R. and Shepherdson, J. C. (Eds.), Mathematical Logic and Programming Languages, Prentice-Hall International London, 1985 ISBN 0–13–561465–1.

Остин, 24 марта 1985 года

Prof. dr. Эдсгер Вибе Дейкстра
США
Остин, TX 78712-1188
Техасский университет в Остине
Кафедра информатики

Расшифровка: Corrado Cantelmi.
Откорректирован 15 марта 2012 года.