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

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

Возьмите «Привет, мир!» программа, например. Это очень распространенный способ научить кого-то языку программирования: научить написать простую программу, которая печатает слова «Hello, World!» на экран. В некоторых языках, таких как C или Java, получить «Hello, World!» гораздо сложнее. работать. Другие языки, такие как Ruby и Python, делают это намного проще. Конечно, это точно так же, как культурные языки (потерпите меня, я пытаюсь найти лучшее слово, чем «настоящий», для описания таких языков, как английский, французский, японский, арабский и так далее). В некоторых языках, например, в романских, все очень просто: Hola, Bonjour, Ciao… ну вы поняли. Это приветствие из одного слова. Это очень похоже на Python или Ruby, где «Hello, World!» состоит из выражения:

print "Hello, World!"

На других языках, таких как вьетнамский (xin chào) или йоруба (Pẹlẹ o), сказать «привет» становится немного сложнее (пожалуйста, извините меня, если я сформулировал это неправильно; я использую Google Translate, как ленивый писатель). ). Эквивалент английского «Hello», очевидно, является очень стандартным и часто используемым приветствием — как таковое, оно обычно короткое. Очень часто это всего лишь одно слово. Во вьетнамском и йоруба, как указано выше, их два, но когда они произносятся вслух, они звучат очень похоже на одно слово. В этом смысле они по-прежнему функционируют как одно слово или единый лингвистический «элемент». Или хотя бы один фонетический элемент.

Это относится и к более сложному способу написания «Hello, World!» на таком языке, как Java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
}

Or C:

#include <stdio.h>
int main()
{
   // printf() displays the string inside quotation
   printf("Hello, World!");
   return 0;
}

Несмотря на то, что «Hello, World!» программы на этих языках кажутся более сложными, когда вы изучаете их на первый взгляд, в конце концов вы понимаете, что каждый из них представляет довольно общий, единственный программный элемент в каждом языке (идея «открытого класса» в Java и «int main»). ()” идея в C).

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

Языки программирования, конечно, тоже имеют свой синтаксис. И, как и культурные языки, многие из них имеют схожий синтаксис, поскольку часто являются потомками более старых языков программирования. Возьмем, к примеру, программу hello world на C и программу hello world на C++:

C:

#include <stdio.h>
int main()
{
   printf("Hello, World!");
   return 0;
}

C++:

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

Эти программы явно очень похожи. Они также используют ту же нотацию конечной строки, что и многие другие языки программирования: точку с запятой (;). Точно так же, как многие культурные языки имеют одинаковые знаки препинания (. , ! ? и т. д.), многие языки программирования также имеют (; для обозначения конца строки, {} для обозначения блока кода , и так далее).

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

Если вы используете Google Translate или путеводитель для перевода слов с вашего родного языка на тот, на котором вы сейчас пытаетесь говорить, вы не говорите бегло. Точно так же, если вы ищете синтаксис для определенного фрагмента кода, который вы пытаетесь написать на языке программирования, вы не владеете им бегло. Вам не обязательно писать код идеально с самого начала — по моему опыту, это редкий подвиг, хотя, может быть, я просто плохо кодирую и не владею каким-либо конкретным языком! — но вам, по крайней мере, не нужно обращаться к руководству при написании программы. Я бы сказал, что это хороший признак того, что вы свободно говорите.

Таким образом, программный полиглот — это тот, кто может сесть и написать относительно сложную программу на нескольких языках программирования более или менее идеально за одну попытку, не обращаясь ни к каким руководствам или шпаргалкам. Если вы пишете программу на C, а затем на C++, это может быть не так уж впечатляюще. Это примерно равносильно свободному владению немецким и голландским языками — на мой взгляд, они очень похожи. Но если вы сядете и напишете одну и ту же сложную программу на C, Java, FORTRAN, Python, Ruby, Brainfuck (погуглите… на самом деле это само по себе впечатляет), это будет хорошим показателем того, что вы программный продукт. полиглот. И эквивалентом культурного языка, конечно, будет что-то вроде свободного владения английским, испанским, японским, арабским, немецким и… каков лингвистический эквивалент Brainfuck? Может исландский.