В этом году всемирная паутина отмечает тридцатилетие, так что немало пикселей потрачено в спорах об «первоначальных обещаниях сети» — в том числе об идее, что можно будет нажать на кнопку «просмотреть исходный код» на любой странице и легко разобраться в том, почему на ней отображается именно то, что вы видите. Вот самая первая веб-страница, которую в честь юбилея воспроизвел дружественный программистам-самоучкам сайт «Глитч» (Glitch), чтобы наглядно показать: на ней вы могли переключиться на исходный код и увидеть, что некоторые части помечены <title> и <body> и <p> (возможно, вы догадались, что это означает «параграф»). Выглядит довольно просто, — но ведь вы читаете это на англоязычном веб-сайте, с точки зрения носителя английского языка.
А теперь представьте себе, что это первая веб-страница, которую вы увидели в своей жизни, и вам не терпится заглянуть за кулисы и узнать, как это работает. Но вместо словесных ярлыков, которые вам хорошо знакомы, вы столкнулись с версией, которую создала я, — она ничем не отличается от оригинальной за тем исключением, что исходный код основан скорее на русском, чем на английском. Я не говорю по-русски и если вы, предположим, тоже, то будет ли <заголовок> и <заглавие>, и <тело>, и <п> вызывать у вас все то же желание попробовать что-то нахимичить самостоятельно?
Теоретически язык программирования можно создать на базе любых символов. Компьютеру все равно. На нем уже запущена незаметная взгляду программа-транслятор, которая переводит все эти ваши IF или <body> в нули и единицы, которыми он оперирует, и мы получили бы такие же результаты, взяв эмодзи картошки вместо IF или загадочный средневековый кириллический глиф XV века, мультиокулярное «О» вместо <body>. Тот факт, что языки программирования часто напоминают английский, говорит лишь о том, что наш убогий, бренный человеческий мозг легче запоминает слова, которые нам уже знакомы.
Но лишь некоторые из нас уже знают слова, которыми обозначены эти команды — те, кто говорит на английском. Так что «первоначальные обещания сети» были обещаниями лишь для англоговорящих пользователей, будь то носители языка или люди, имеющие доступ к в общем-то элитному образованию, продуктом которого являются свободно говорящие на английском как на втором языке люди на территориях, где английский не преобладает.
Правда, компьютерные программы и платформы социальных сетей доступны сегодня на 30-100 языках, но как же сами инструменты, которые могут помочь нам стать создателями, а не просто пользователями вычислительных средств? Я даже не призываю к тому, чтобы создавать языки программирования на малых и редко употребляемых языках (хотя было бы здорово). Даже очень крупные языки, в которых существует обширная литературная традиция и которые являются языками региональной торговли, такие как китайский, испанский, хинди и арабский, все равно не стали основой для широко распространенного исходного кода.
Насколько мне известно, существует всего четыре языка программирования, которые доступны повсеместно в мультиязыковом формате. Не 400. Четыре (4).
Два из них специально разработаны для обучения программированию детей: Скретч (Scratch) и Блокли (Blockly). Разработчики Скретча даже провели исследование, которое показало, что дети легче учатся программированию, если исходный код основан на их родном языке, чем те, кто застопоривается, пытаясь выучить другой язык. Что же будет, когда эти дети вырастут? Тем взрослым, которые не блещут познаниями иностранных языков, придется выбирать из двух других доступных на разных языках продуктов: формулы Эксель (Excel) и вики-код.
Да, вы можете программировать электронные таблицы с помощью любого языка, который предусмотрен для интерфейса программы. И в Экселе, и в Гугл шитс (Google Sheets) вы можете написать, например, =IF(condition,value_if_true,value_if_false), а можете ввести испаноязычный эквивалент =SI(prueba_lógica,valor_si_es_verdadero,valor_si_es_falso), или использовать десятки других языков. [В том числе и русский: ЕСЛИ(значение, значение_если_истина, значение_если_ложь — прим. ред.)] Возможно, это не первое, что приходит в голову, когда думаешь о программном коде, но табличные программы можно в принципе использовать как машину Тьюринга, и такое применение местных версий может быть экономически обосновано.
В дополнение к этим четырем широко доступным многоязычным программным кодам существует несколько десятков, а может быть, даже около ста, языков программирования, доступных на одном или двух других языках, кроме английского, таких как Qalb (арабский), китайская версия Python, фарсинет (персидский), Система программирования Hindawi (бенгальский, гуджарати и хинди) и даже версия Perl на латыни. Некоторые неанглийские языки программирования восходят к эпохе построенных правительством вычислительных машин размером с комнату, — например, несколько языков программирования советской эпохи, основанные на русском, а также многоязычный ALGOL 68 (1960-е годы) и 4-е измерение (1980-е годы). Но многие более новые языки, такие как Python, Ruby и Lua, разработаны в неанглоязычных странах (Нидерланды, Япония и Бразилия), но все равно ключевые команды этих языков — англоязычные. Первоначальное обещание Интернета, таким образом, для многих людей скорее звучит как угроза: говори по-английски или убирайся из сети.
Эти языки сосуществуют, потому что перевести с одного языка программирования на другой несложно. Доступно множество конвертеров языков программирования, — вы можете добавить отрывок на JavaScript и получить версию на Python, или добавить отрывок на Markdown и получить версию на HTML. Их не особенно сложно создать. Языки программирования имеют ограниченные, четко определенные словари, в которых нет двусмысленности или культурных нюансов, создающих трудности для автоматического машинного перевода естественных языков. Зная эквиваленты примерно сотни команд, вы можете автоматически заменить одну на другую для любого отрезка кода.
Переводить языки программирования и правда настолько легко, что некоторые ботаники время от времени делают это из любви к искусству или чтобы посмеяться, создавая так называемые эзотерические языки программирования. Например, LOLCODE смоделирован на основе мемов о котиках lolcats, поэтому программа открывается командой HAI (ПРЕВЕД — прим. ред.) и закрывается с помощью KTHXBAI (сокращение от "okay, thanks, bye": «ну все, пока» — прим. ред.), а Whitespace (Пробел) полностью невидим для человеческого глаза и состоит из непечатаемых символов: пробела, табуляции и перевода строки. Есть даже Pikachu, язык программирования, состоящий исключительно из слов pi, pika и andpikachu, так что сам Пикачу может — чисто теоретически — вырваться от этих чертовых тренеров покемонов и вместо этого устроиться на высокооплачиваемую работу программиста.
Когда вы создаете перевод кода на язык покемонов, это звучит абсурдно. Когда вы переводите код для миллиардов людей в мире, которые не говорят по-английски, доступ к высокооплачиваемой работе и возможность вручную дорабатывать свое собственное устройство перестают быть преимуществом. Тот факт, что исходный код зависит от английского, лишает людей этого преимущества, а ведь с точки зрения технологии создания кода это совершенно необязательно.
Но язык программирования — это не только его технические характеристики, это сообщество людей. Четырем широко распространенным многоязычным кодам повезло с таким сообществом больше, чем отдельным языкам программирования, не основанным на английском, — но их по-прежнему катастрофически мало. Есть еще разные полезные ресурсы, которые вам придется посещать, когда вы будете гуглить сообщения об ошибках. Да и вообще, черт возьми, вам для начала придется выяснить, как пользоваться этим языком на вашем компьютере. Вот почему было так важно, чтобы первый веб-браузер позволял редактировать, а не просто просматривать веб-сайты, поэтому «Глитч» так настаивал на том, чтобы пользователь мог редактировать исходный код прямо из окна браузера и в случае чего легко обратиться за помощью. Но где же «Глитч» для всего остального мира, не говорящего по-английски? Как сделать интернет еще удобнее для людей, которые только знакомятся с ним сейчас (или которые использовали его как потребители в течение последнего десятилетия), чем это было для его первых посетителей?
Вот почему я не теряю надежду: в средневековой Европе, если вы хотели овладеть искусством письма, вы должны были вместе с этим освоить новый язык. Письменность — значит, латынь. Письменность на местном диалекте — на родном языке, на котором люди уже говорили, — стояла где-то в стороне и была неразвита. Зачем вообще было учиться писать на английском или французском? На них ведь нечего читать, в то время как латынь открывала вам доступ к интеллектуальной традиции языка международного общения.
Порой, оглядываясь на эту историческую эпоху, мы удивляемся, зачем люди заморачивались со всей этой латынью, когда они могли просто писать на языке, на котором говорили. В то время изучать латынь, чтобы научиться писать, было так же логично, как сегодня учить английский для того, чтобы писать код, даже несмотря на то, что мы теперь знаем, что дети учатся читать намного быстрее, если их сначала учат на родном языке. Аргументы в пользу англоязычного кода, которые я вижу на таких сайтах, как «Стэк оверфлоу» (Stack Overflow), вторят этой идее: почему бы просто не выучить английский? Это дает вам доступ ко всей технологической традиции.
Господство письменности на латыни, как известно, закончилось. Искусство письма распространилось на другие языки. Умение создавать исходный код зависит от знания английского языка не в большей степени, чем сама технология письма была связана с латынью. Я предлагаю начать с корректировки того, как мы говорим о языках программирования, в которых есть слова из обычных языков. Первый сайт был написан не на HTML, а на английском HTML. Фрагмент кода, который появляется в нижней части первого веб-сайта, воспроизведенного «Глитч», — написан не на «Яваскрипт» (JavaScript«, а на английском «Яваскрипт». Когда мы называем их в первую очередь английскими, становится все более очевидным, что мы можем изменить ситуацию, — мы можем представить себе мир, в котором есть еще и русский HTML или суахили «Яваскрипт», где у вас нет врожденного преимущества в изучении кода, если так случилось, что ваш родной язык — английский.
Этого мира еще не существует. Возможно, в ближайшие 30 лет мы его создадим.
Гретхен Маккалох — постоянный эксперт-лингвист журнала Wired, соавтор подкаста Lingthusiasm, посвященного лингвистике, а также автор книги «Потому что интернет: взгляд на новые правила языка» (Because Internet: Understanding the New Rules of Language), которая выйдет 23 июля 2019 года в издательстве Riverhead (Penguin).