О тщетности "программирования на естественном языке"
С ранних дней автоматического вычисления находились люди, которые рассматривали необходимость в аккуратности и точности, присущей использованию любой формальной символики, как серьёзный недостаток программирования. Они обвиняли механическую машину в её слепом послушании, в том, что она выполняла данные инструкции даже если минутное размышление выявило бы в них очевидную ошибку. "Но минута — это долгий срок, а размышление — болезненный процесс" (А.Е. Хаусман). С нетерпением они ждали более разумной техники, которая отказалась бы выполнять абсурдные действия, вызванные тривиальной канцелярской ошибкой.
Машинный код с его почти полным отсутствием избыточности вскоре был признан неоправданно рискованным интерфейсом между человеком и машиной. Отчасти в ответ на это понимание были разработаны так называемые "языки высокого уровня", и со временем научились в определённой степени повышать защиту от глупых ошибок. Значительным улучшением было то, что многие глупые ошибки теперь приводили к сообщению об ошибке вместо неправильного результата. (И даже это улучшение было не всем по нраву: некоторые находили сообщения об ошибках, которые нельзя было проигнорировать, более раздражающими, чем неверные результаты, и, оценивая относительные достоинства языков программирования, некоторые и сейчас рассматривают "лёгкость программирования" как возможность делать необнаруженные ошибки.) Однако абстрактная машина, соответствующая языку программирования, оставалась верным рабом — автоматом, способным идеально выполнять даже абсурдные инструкции. Программирование осталось использованием формальной символики и, как таковое, продолжало требовать ту же аккуратность и точность, что и раньше.
Чтобы сделать машины значительно более удобными в использовании, было предложено попытаться разработать машины, которым мы могли бы отдавать команды на нашем родном языке. Это, конечно, сделало бы машины гораздо сложнее, но, как утверждалось, перекладывая большую часть работы на машину, жизнь стала бы проще для нас. Звучит разумно, если считать обязанность использовать формальную символику источником своих трудностей. Но верен ли этот аргумент? Сомневаюсь.
Мы знаем теперь, что выбор интерфейса — это не просто распределение фиксированного объёма работы, потому что к этому добавляется работа, связанная с кооперацией и коммуникацией через интерфейс. Мы знаем из суровой практики, что изменение интерфейса может легко увеличить объём работы с обеих сторон (и весьма существенно). Отсюда возросшее предпочтение тому, что теперь называют "узкими интерфейсами". Поэтому, хотя переход на общение между машиной и человеком на его родном языке значительно увеличил бы нагрузку на машину, мы должны подвергнуть сомнению предположение, что это упростило бы жизнь человеку.
Краткое изучение истории математики показывает, насколько обоснованы эти сомнения. Греческая математика застряла потому, что осталась вербальной, образной деятельностью. Мусульманская "алгебра", после робкого обращения к символизму, умерла, когда вернулась к риторическому стилю. Современный цивилизованный мир смог возникнуть — к лучшему или к худшему — только когда Западная Европа смогла освободиться от оков средневекового схоластицизма, тщетной попытки вербальной точности, благодаря тщательно, или по крайней мере сознательно разработанным формальным символикам, которыми мы обязаны людям вроде Виета, Декарта, Лейбница и (позже) Буля.
Достоинство формальных текстов в том, что их манипуляции, чтобы быть корректными, должны удовлетворять только несколько простых правил. Они — удивительно эффективный инструмент для исключения всевозможной бессмыслицы, которой почти невозможно избежать при использовании нашего родного языка.
Вместо того чтобы рассматривать обязанность использовать формальные символы как бремя, мы должны рассматривать удобство их использования как привилегию: благодаря им школьники могут научиться делать то, что в прежние дни могли делать только люди гениального уровня. (Это явно не понимал автор, написавший в 1977 году в предисловии к техническому отчёту, что "даже стандартные символы логических связок были избегнуты ради ясности". Наличие этого предложения предполагает, что непонимание автора — не его личная особенность.) В конце концов, "естественность", с которой мы используем наш родной язык, сводится к лёгкости, с которой мы можем использовать его для высказывания утверждений, бессмысленность которых неочевидна.
Может быть поучительно представить, что произошло бы, если бы с самого начала наш родной язык был единственным средством ввода и вывода информации для нашей вычислительной техники. Мой обоснованный прогноз таков: история повторилась бы в определённом смысле, и информатика состояла бы главным образом из действительно чёрного искусства — как начать с нуля, чтобы достичь достаточно хорошо определённой формальной системы. Нам потребовался бы весь человеческий интеллект, чтобы сделать интерфейс достаточно узким, чтобы его можно было использовать, и, учитывая историю человечества, может быть не чересчур пессимистично предположить, что выполнение этой работы на должном уровне потребовало бы снова несколько тысячелетий.
Замечание. Как результат образовательного отхода от интеллектуальной дисциплины, последние десятилетия показали в западном мире резкий упадок мастерства людей в пользовании своим собственным языком: многие люди, которые по стандартам предыдущего поколения должны были бы хорошо разбираться, больше не способны эффективно использовать свой родной язык даже для целей, для которых он вполне подходит. (Достаточно посмотреть на действительно тревожное количество бессмысленных при внимательном прочтении речей в научных статьях, технических отчётах, государственных публикациях и т. д.) Это явление, известное как "Новая неграмотность", должно отговорить тех сторонников программирования на естественном языке, которым не хватает технического понимания для предсказания его неудачи. (Конец замечания.)
Из одного глубокого ощущения я черпаю большое утешение: я подозреваю, что машины для программирования на нашем родном языке — будь то голландский, английский, американский, французский, немецкий или суахили — столь же чертовски сложно создавать, как и использовать.