[Перевод] О глупости «программирования на естественном языке»
Источник: https://commons.wikimedia.org/wiki/File: Edsger_Dijkstra_1994.jpg
От переводчиков. Хотя Эдсгер Дейкстра — одна из главных личностей в истории IT, эта его коротенькая публикация ранее не попадала на Хабр, да и сами мы узнали о ней лишь благодаря докладу на нашей конференции. Но при этом она выглядит очень любопытным документом эпохи, показывая, что ещё несколько десятилетий назад люди думали о перспективе писать программы на «обычном языке». Поэтому мы решили восполнить пробел и перевести.
С первых же дней появления автоматических вычислительных машин были люди, которые считали недостатком тот факт, что программирование требует внимательности и точности, свойственных любому формального символизму. Они критиковали механического слугу за то неукоснительное выполнение данных ему инструкций, когда достаточно было бы поразмышлять мгновение, чтобы заметить, что в этих инструкциях есть очевидная ошибка. «Но мгновение — это долго, а размышлять — болезненный процесс». (А.Э. Хаусман). Они страстно надеялись и ждали появления более разумных машин, которые отказались бы приступать к таким бессмысленным действиям, какие в то время вызывались банальной опечаткой.
Машинный код, лишенный практически всех форм избыточности, вскоре сочли слишком рискованным интерфейсом между человеком и машиной. Отчасти ответом на это признание стала разработка так называемых «высокоуровневых языков программирования», и со временем мы научились до определенной степени усиливать защиту от глупых ошибок. Значительным улучшением стало то, что теперь многие глупые ошибки приводили к сообщению об ошибке, а не к ошибочному ответу. (И даже это улучшение оценили не все: некоторые люди больше раздражались на сообщения об ошибках, которые нельзя игнорировать, чем на неверные результаты; и при оценке относительных достоинств языков программирования некоторые, кажется до сих пор, приравнивают «простоту программирования» к простоте допущения незамеченных ошибок). И тем не менее (абстрактная) машина при взаимодействии с языком программирования оставалась верным слугой, то есть бездумным автоматом, способным безупречно выполнять нелепые инструкции. Программирование так и осталось работой с формальным символизмом и, будучи таковым, сохранило те требования к внимательности и точности, что были необходимы раньше.
Чтобы значительно облегчить использование машин, было предложено (попытаться) разработать машины, которые мы могли бы инструктировать на своем родном языке. Безусловно, машины стали бы намного сложнее, но, как утверждалось: перенести большую часть бремени на машину — значит упростить жизнь для нас. Звучит разумно, если источником трудностей вы считаете необходимость использовать формальный символизм. Но обоснованно ли это утверждение? Сомневаюсь.
Между тем мы знаем, что выбор интерфейса — это не просто перераспределение (фиксированного количества) труда: здесь добавляется работа по обмену данными и взаимодействию через интерфейс. По горькому опыту мы знаем, что смена интерфейса может запросто увеличить (порой радикально) объем работы, которую необходимо производить по обе стороны от него. Потому все большее предпочтение отдается тому, что сейчас называется «узкими интерфейсами». Поэтому, хотя переход к взаимодействию между машиной и человеком на родном языке значительно увеличил бы нагрузку именно на машину, мы должны критически оспорить то допущение, что это облегчило бы жизнь человека.
Краткий взгляд на историю математики показывает, насколько оправдана этот критика. Греческая математика зашла в тупик, потому что оставалась словесной, наглядной деятельностью. Мусульманская «алгебра», после робкой попытки обратиться к символизму, зачахла, вновь вернувшись к риторическому стилю. А современный цивилизованный мир смог возникнуть — к лучшему или к худшему — только тогда, когда Западная Европа смогла освободиться от оков средневековой схоластики (безуспешной попытки добиться словесной точности) благодаря тщательно или, по крайней мере, сознательно разработанным формальным символизмам, которыми мы обязаны таким людям, как Виет, Декарт, Лейбниц и (позднее) Буль.
Достоинство формальных текстов заключается в том, что для разумного обращения с ними достаточно следовать нескольким простым правилам; если подумать, это удивительно эффективный инструмент по избавлению от всевозможной ерунды, которой практически не избежать при общении на родном языке.
Вместо того чтобы считать обязательство пользоваться формальными символами бременем, следует относиться к удобству их использования как к преимуществу: благодаря им школьники могут освоить то, что в прежние времена удавалось только гениям. (Этого, очевидно, не понимал автор, который в 1977 году написал в предисловии к техническому докладу, что «даже базовые символы, используемые в логических функциях, опущены ради ясности». Само появление этого предложения говорит о том, что непонимание автора свойственно не ему одному). После всего сказанного понятно, что «естественность» использования наших родных языков сводится к легкости, с которой мы можем использовать их для утверждений, бессмысленность которых не очевидна.
Может быть поучительным помыслить, что было бы, если с самого начала наш родной язык был бы единственным средством ввода и вывода для нашего оборудования по обработке информации. Полагаю, что история в некотором смысле повторилась бы, и компьютерная наука преимущественно выражалась бы в чернокнижных стараниях пробиться от этого языка к достаточно хорошо определенной формальной системе. Понадобился бы весь интеллект мира, чтобы сделать этот интерфейс достаточно узким, чтобы быть пригодным, а, учитывая историю человечества, не будет слишком пессимистичным допустить, что для того, чтобы сделать эту работу достаточно хорошо, потребовалось бы еще несколько тысяч лет.
Примечание. Как результат тенденции в образовании к уходу от интеллектуальной дисциплины, последние десятилетия показали резкое снижение в западном мире уровня владения людьми своим родным языком: многие люди, которые по меркам предыдущего поколения должны были владеть языком лучше, больше не в состоянии эффективно использовать свой родной язык, даже для целей, которым он вполне соответствует. (Достаточно взглянуть на и впрямь тревожащий объем бесцельного пустословия в научных статьях, технических докладах, правительственных публикациях и т. д.) Это явление, известное как «новая неграмотность», должно оттолкнуть тех сторонников программирования на естественном языке, которым не хватает технической проницательности предвидеть его провал. (Конец примечания.)
Одна мысль меня очень утешает: я полагаю, что машины, которые могут программироваться на наших родных языках, будь то голландский, английский, американский, французский, немецкий или суахили, будет так же чертовски трудно создать, как и использовать.
проф. д-р Эдсгер В. Дейкстра,
научный сотрудник компании Burroughs