Текст: Влад Азаров

Иллюстрации: Наталья Твардовская

Языки общения отличают человека разумного от высокоразвитых животных. Языки программирования превратили металлическую коробку с процессором в двигатель прогресса. «Репортер» изучил особенности эволюции обоих видов языка, нашел общее и отделил частное, выяснил, как они влияли на ментальность и особенности речи, и узнал, из-за чего в будущем и те и другие объединятся

Точка пересечения

По одной из лингвистических теорий, в отдаленном будущем у человечества может остаться один общий язык. Английский язык упрощается. Например, из разговорной речи исчезают сложные предложения, в которых используются времена, описывающие действие в процессе (так называемые времена группы Continuous: «Я хожу на работу с 1999 года»). Структура английского, что отмечают лингвисты, все более начинает походить на структуру китайского. Например, в первом, как и во втором, появляется все больше слов с открытым слогом. То есть с гласной на конце: так, английский «театр», theater, превращается в theatre. Словом, филологи всерьез предполагают, что оба языка движутся навстречу друг другу и в конце концов объединятся. Так родится пост-язык, понятный всем — и Востоку, и Западу.

Хотя куда ранее этой футуристической теории может сработать теория иная. А именно — пересечение эволюций развития языков общения и языков программирования. По большому счету мы уже близки к этому.

— Передовой край программирования — вещи, связанные с разработкой искусственного интеллекта. В перспективе профессия программиста может вообще исчезнуть. Точнее, на место традиционных инженеров, умеющих общаться с компьютерами на понятных им языках, придут бизнес-аналитики. Составлять программы они будут на обычном языке общения, например, на английском, а специальные программы-компиляторы станут переводить эти тексты в программный код, — уверяет Эдуард Рубин, директор Харьковского компьютерно-технологического колледжа и учредитель Харьковского IT-кластера.

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

Двоичный праязык

— Известно, что большая часть европейских языков имеет общий корень, так называемый праязык. И философы, и биологи, и физиологи, и лингвисты сходятся во мнении, что праязык, или праязыки, — их было несколько — появились в определенных участках планеты, в которых обитали первые люди, — объясняет Валерий Чемес, доцент кафедры общей лингвистики и классической филологии Киевского национального университета им. Т. Г. Шевченко.

Затем ученый переходит на греческий и расшифровывает смысл слова «ойкос» — дом, из которого вышло понятие ойкумена — место сосредоточения протолюдей. Всего в мире, говорит Чемес, существовало три-четыре ойкумены. Каждая из них родила один из корневых праязыков. Украинский, как и большинство европейских, вышли из индоевропейского корня.

Зарождение языков программирования — это уже объясняют IT-специалисты — произошло примерно так же. Во время Второй мировой войны немецкий инженер Конрад Цузе разработал первый язык программирования. Назывался он Планкалкюль, но из-за того что Цузе работал над ним обособленно (война велась всем миром как раз с его страной), в отрыве от инженеров Америки и Британии, также занимавшихся подобными разработками, широкая общественность узнала о Планкалкюле только в 1970-х. Эволюция же языков программирования началась в американских университетах и корпорациях. В частности, в компаниях IBM и UNIVAC (последняя в 1951 году выпустила первый серийный компьютер). Инженеры программировали их при помощи двоичного кода. То есть общались с процессорами компьютеров на понятном «железу» языке — при помощи команд, составленных из последовательностей нулей и единиц. Процессоры каждой из компаний отличались, как отличались и особенности понимаемых ими команд. Эти процессоры и есть ойкумены, в которых зародилась компьютерная жизнь. А их двоичные коды — это праязыки программирования.

— Первичный язык общения появился как своеобразное вслушивание в себя, — Валерий Чемес объясняет причины возникновения человеческой речи.

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

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

— Уже ассемблер (первый язык программирования, в котором отдавать команды процессору можно было не строками нулей и единиц, а командами, состоявшими из буквенных эквивалентов этих цепочек цифр. — «Репортер»), а также все последующие языки сделали работу программистов гораздо удобней. Страницы программного кода все равно исполнялись в двоичном коде, но переводить их на язык, понятный процессорам, начали специальные программы — компиляторы. Экс-глава украинского «Яндекса» Сергей Петренко объясняет, как к середине 1950-х, начиная с языка программирования ассемблер, место команд, записываемых в двоичном коде, заняли операторы — абстракции высшего порядка, современная речь языков программирования, при помощи которой составителям программ стало проще общаться с процессорами.

Эволюции слов и байтов

Язык — явление в том числе физиологическое. Речевой аппарат человека и соответствующие ему зоны коры полушарий мозга имеют сложное строение. В отличие от других высокоорганизованных животных, которые способны осмысливать лишь то, что они наблюдают непосредственно. Другими словами, отмечают лингвисты, в своем развитии человек научился мысленной многопотоковости, сумел отчуждать образы и картины реальности и на их основе создавать, накоплять, сохранять и передавать при помощи речи различные понятия.

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

— Начали появляться языки так называемого высокого уровня. При написании программ использовались более абстрактные команды, которые специальные компиляторы или интерпретаторы переводили в понятный процессору бинарный код. Одна команда языка программирования высокого уровня могла включать в себя с десяток указаний компьютеру, — объясняет Никита Павлюченко, преподаватель КПИ.

Fortran, Basic и чуть позже C (языки, появившиеся в следующие 15 лет эволюции программирования, с конца 1950-х до начала 1970-х) научили программистов аристотелевским метафорам, метонимиям и синекдохам — риторическим фигурам, усиливавшим образность языка. Классический пример из области филологии — строка из «Вечеров на хуторе близ Диканьки»: «Все спит — и человек, и зверь, и птица». Эта синекдоха — наглядная иллюстрация и программного замещения, в котором левая короткая часть фразы включает в себя все действия правой.

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

На очередном этапе эволюции языки программирования столкнулись с проблемой структурирования речи. Выход нашелся в одном из краеугольных камней эпохи Просвещения. Программисты взяли на вооружение рационализм Декарта и Спинозы — термин, который возник после того, как математика начала влиять на философию. То есть объяснила, что человеческое мышление не хаотично, а структурируется по принципам геометрии и в финале любой мысли лежит строгий и упорядоченный логический вывод.

— В 1970-х годах произошел переход к парадигме структурного программирования. Его основные принципы: команды группируются в блоки, связанные единой логикой, а повторяющиеся куски кода выносятся в отдельные подпрограммы. Чуть позже выяснилось, что подпрограммы можно также использовать для структурирования не только повторяющихся блоков, но и больших объемов кода. Так появилось понятие «процедуры». Хотя оно в итоге не выдержало конкуренции со схожим термином — «функции», — объясняет Павлюченко.

Современный английский словарь содержит около 500 тысяч слов. Количество слов в русском — около 200 тысяч. При этом все они образуются при помощи минимального количества приемов. Это своеобразный конструктор «Лего» — человек оперирует различными комбинациями звуков, однокорневых слов и производных. Причем действует по принципу экономии — из ограниченного количества звукотипов получаются десятки тысяч слов, которые и составляют словарь современного языка.

Принцип речевой экономии относится и к программированию. Только на последнем в данный момент глобальном этапе его эволюции в качестве элементов конструктора «Лего» стали выступать не отдельные строки кода, а функции и массивы данных.

— Появилось так называемое объектно-ориентированное программирование. Различные универсальные библиотеки, концепция изолирования, подразумевающая бесконечное использование отдельных частей программ и так далее, — объясняет Сергей Петренко.

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

Пиджин-инглиш для компьютера

— Жители разных стран и регионов — сельские и городские, шахтеры и интеллигенты, мужчины и женщины. Речь каждого из них — как раз то, что не дает дереву языков засохнуть, что поддерживает систему в хрупком равновесии и насыщает ее, — Валерий Чемес рассказывает, как диалекты и языковые особенности каждой из социальных и гендерных групп влияют на языки общения.

В языках программирования также существует, пусть и несколько условное, разделение по национальностям и социальным группам, насыщающее общую программистскую среду.

— В свое время Fortran появился как язык для ученых, C — для инженеров, а Basic — для потребителей. Словом, уже изначально языки программирования сегментировались по целям их использования, — объясняет Дмитрий Шимкив, замглавы Администрации президента Украины, а в прошлом генеральный директор компании «Майкрософт Украина».

Этими тремя языками сегментирование не ограничивается. Например, существует язык программирования Prolog, помогающий математикам логично выводить и доказывать теоремы. На PHP и Python пишутся сайты. Java используется для создания мобильных приложений, а JavaScript — для программирования интерактивных интерфейсов в браузерах.

Все эти языки обладают своей философией, а их носители различаются ментальностью. Как и носители языков общения.

— Есть такое понятие — языковая картина мира. Считается, что язык — своеобразные очки, которые существуют между этносом и объективной реальностью. Мир не такой, каким он есть на самом деле, а такой, каким нам его рисует наш язык. 80 — 8 раз по 10, это если думать по-русски. Quatre-vingts —
4 по 20, так цифру 80 видят французы. Это пример различия ментальностей, — говорит Валерий Чемес.

Однозначно понимать друг друга носителям локальных языков помогают языки универсальные. Например, английский. Существует ли «английский» для программистов?

— Я бы сформулировал вопрос так: какой язык программирования может считаться таким, зная который легко разобраться в остальных? В этом смысле, определенно, либо учебный Pascal, либо C. Изучив их, дальше можно двигаться в любом направлении. Но надо понимать, что язык — это алфавит. Систему мышления формирует отдельная ветвь математики — автоматическое программирование. Там среди прочего изучают проектирование алгоритмов — они универсальны и не зависят от языка, — объясняет Сергей Петренко.

История языка программирования C иллюстрирует еще одну особенность развития языков общения. То, как из одного сформировавшегося языка отпочковывается диалект и развивается в отдельный язык. При этом у носителей и базового, и новообразованного начинает разниться ментальность. Эту коллизию лингвисты обозначают термином «свой-чужой» — возникающим непониманием между людьми, вроде бы говорящими на подобных языках.

Речь тут об американском английском. Американцам не нравится, что англичане говорят так, как будто бы они все болеют астмой. Британцы пренебрежительно смотрят на американцев потому, что считают тех потомками британских маргиналов, в свое время отправившихся осваивать Америку. Американский английский против британского — это и есть спор по принципу «свой-чужой».

C, как и английский, развился в несколько подобных ему языков программирования. Да так, что породил целое их семейство.

— Из C вырос C++. Затем появился C#. А еще — Objective C, язык, который использовал Apple для программирования своих приложений, — рассказывает Сергей Петренко.

Лингвистическая система «свой-чужой» в этом случае выглядит так: язык C# программистская общественность восприняла в штыки. Да так, что проект его развития к настоящему моменту провалился. Эта же система, кстати говоря, работает с языками программирования, не имеющими настолько очевидного общего корня. В паре языков для веб-программирования — Python и PHP — предпочтение отдается обоим, но, несмотря на востребованность и популярность, второй из них считается чем-то вроде пиджин-инглиша.

Один язык — две нации

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

Языки программирования подвержены этой же тенденции, пусть пока не настолько выраженной. Но причины их отмирания схожи с причинами вымирания языков общения и так же лежат в социальной плоскости.

— Раньше огромная польза была от Pascal. Сейчас он почти умер. В свое время Perl считался крутым, но затем его вытеснил PHP. Все очень зависит от того, какое комьюнити или какие компании стоят за тем или иным языком и какие продукты они продвигают, — рассказывает Дмитрий Шимкив.

Лингвисты связывают исчезание языков общения с капитализмом и монополиями, которые тот порождает. Дмитрий Шимкив приводит те же причины отмирания языков программирования. Разница между ними только в том, что новые языки общения едва ли появятся, в то время как новые языки программирования создаются чуть ли не каждый год.

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

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