Cat, Mouse и Brainfuck: сколько языков программирования существует в мире
Мы задались вопросом, сколько языков программирования есть в мире и чем они отличаются друг от друга. Даем развернутый ответ.
vlada_maestro / shutterstock
Язык программирования — это система семантических, лексических и синтаксических правил, придуманная человеком для написания программ, которые выполняет компьютер.
С начала существования первых вычислительных машин человечество придумало более 8 тысяч языков программирования. Почему так много? Они создавались в разных странах и разными компаниями для решения отличающихся задач. Некоторые разработчики пишут собственные формальные языки и интерпретаторы ради эксперимента или практики. Поэтому сколько языков программирования в мире, точно сказать невозможно: новые могут появляться в ту самую секунду, когда вы читаете этот текст.
В информатике есть множество классификаций. Они могут быть основаны на технических свойствах, ярко выраженных особенностях или субъективном взгляде составителя. Единого мнения нет, но мы все же рассмотрим, какие существуют виды языков программирования и как они связаны между собой.
Низкоуровневые и высокоуровневые
Исходя из парадигмы программирования, условно их можно разделить на поколения. К первым двум поколениям относятся низкоуровневые языки: машинный код и ассемблеры. Они ориентированы на особенности конкретного аппаратного обеспечения и, в принципе, даже не соотносятся с какой-либо парадигмой.
Усложнение программ привело к тому, что люди уже не могли эффективно писать их на устаревшем языке ассемблера. В 1970-е годы разработчики создали первый высокоуровневый язык, многим известный Fortran, который используется и сейчас — в основном в научных разработках и вычислениях. В третьем и четвертом поколениях оформилось структурное программирование и появились функциональные языки: это, например, C, Pascal, Lisp, Scala, Erlang, F#, Haskell и другие.
Сегодня говорят уже о сверхвысокоуровневых языках, для которых характерен еще больший градус абстракции, чем в предыдущих. К этой группе относят Python, Ruby, Haskell, Perl.
Интерпретируемые и компилируемые
Это разделение основано на способе реализации — компиляция или интерпретация. Первый означает, что исходный код преобразуется в машинный через компилятор. Полученный результат (исполняемый модуль) уже может быть запущен как отдельная программа. Среди языков этой группы наиболее известны Ada, C, Java, Pascal, Basic, Visual Basic, Cobol, Swift, Go, Haskell, C#, Kotlin, .NET, Python и Erlang.
Интерпретация — это выполнение кода непосредственно и построчно, то есть команда за командой. В этом случае программа не может быть запущена без интерпретатора. К языкам такого типа относятся PHP, JavaScript, Python, Lava, MATLAB, Perl и другие.
Преимущество и главное отличие интерпретатора от компилятора в том, что разработчик может изменить код программы на сервере, и это сразу будет применено при запросе к нему. Программисту компилируемого языка нужно после внесения изменений перекомпилировать код и отправить полученный файл на сервер.
Со статической и динамической типизацией
Еще один вариант классификации — по мощности и строгости типов того или иного языка. Динамическая типизация означает, что переменная получает свой тип не при ее объявлении, а в момент присвоения ей значения. Динамически типизированные языки — это PHP, JavaScript, Ruby, Python, Objective-C, Lisp, Perl, Erlang, Visual Basic, Smalltalk.
Статическая типизация — противоположный прием: переменная получает свой тип при ее объявлении, и он не может быть изменен позже. Примеры статически типизированных языков: Java, Pascal, C++, C#, Ada.
Эзотерические языки
Их еще называют игрушечными — это языки, которые разработали «for fun», но вместе с тем они исследуют возможности программирования, пародируя существующие «серьезные» технологии и становясь их абсурдной реализацией.
Некоторые из них созданы на основе литературного синтаксиса, например, шекспировских пьес, кулинарных рецептов, японских стихотворений хайку. И даже на основе вымышленной инопланетной логики клингонов из сериала «Star Trek» — язык Var’Aq.
Один из широко известных эзотерических языков — Brainfuck («вынос мозга»), созданный в 1993 году Урбаном Мюллером. В нем всего восемь команд, и каждая записывается одним символом. Несмотря на свой минимализм, Brainfuck обладает тьюринг-полнотой — то есть на нем определенно можно реализовать любую вычислимую функцию. Следуя его концепции, многие разработчики написали свой игрушечный язык наподобие Brainfuck.
Специальные языки
Их создавали для решения каких-то очень узких специфических задач. Например, язык Mouse был разработан для управления цифровыми и аналоговыми устройствами в электронной музыкальной студии. Его элементы состоят из единичных символов, и в нем всего 26 переменных, ограниченных буквами латинского алфавита от A до Z. Вот пример небольшой программы на нем:
И стандартное приветствие «Hello, world»:
Помимо «языка-мыши» существует и «язык-кот». Cat написал Christopher Diggins, вдохновившись языком Joy. Кот приветствует вас своим кодом:
Визуальные языки
Многие современные языки позволяют программировать, используя графические, а не текстовые элементы, управляемые через визуальные интерфейсы. Так, AutoLisp — «диалект» оригинального Lisp — позволяет проектировать трехмерные модели в системе AutoCad, используемой в архитектуре, строительстве и машиностроении.
Еще одна известная пара — Visual Basic for Applications (VBA) и Microsoft Excel. А в случаях, когда оба они являются визуальными, встраиваемые языки называют плагинами или фильтрами. Так, можно очень условно сказать, что для визуального метаязыка Adobe Photoshop существует множество встраиваемых мини-языков — плагинов.
Актуальные языки
Несмотря на огромное их количество, в разработке сегодня используется не так много. Языки программирования со временем устаревают, так как технологии развиваются и становятся все более совершенными и быстрыми. Это нормальный процесс, который наметился еще в шестидесятых-семидесятых годах прошлого столетия.
Существует множество рейтингов и площадок в интернете, составляющих топы актуальных языков. Например, индекс TIOBE анализирует количество поисковых запросов и выдает динамику популярности того или иного языка по месяцам:
После 20-й позиции можно видеть менее востребованные технологии или те, которые используют в очень узких сферах:
Однако рейтинги и топы в интернете могут иметь статистические погрешности. Индексы TIOBE и PYPL ориентируются только на поисковые запросы: первый — на их количество, а второй — на то, как часто люди гуглят тот или иной язык. На самом деле узнать, сколько разработчиков в мире используют Python, R или Ruby, непросто — для этого придется провести очень масштабное и сложное исследование. Если вы знаете, как это сделать, напишите в комментариях.
Мы предложили бы ориентироваться на ежегодный отчет GitHub, где указывается 15 наиболее популярных на этой платформе языков. Пусть выборка включает в себя только проекты с открытым исходным кодом и не охватывает 100% профессиональной области, она все же более близка к истине. По этим данным рейтинг за 2017 год:
Еще один внушающий доверие рейтинг — опрос разработчиков на StackOverfow:
Здесь тоже лидируют JavaScript и относящиеся к frontend языки разметки HTML и CSS.
Какой язык выбрать для освоения?
Мы частично рассмотрели, какие языки программирования существуют сегодня. Какой же выбрать из всего этого многообразия? Жизнь диктует свои простые условия: технология всегда выбирается под решение конкретной задачи. Мир IT огромен, и потому в нем столько языков. Новичок может выбрать актуальный в той сфере, которая ему близка и интересна.
Например, для анализа данных применяются Python и R, «короли» веб-разработки — PHP и JavaScript, работа в банковских системах и госструктурах не обойдется без Java, ААА-игры создаются на C++ и C# и так далее.
Наиболее перспективные сферы разработки программного обеспечения:
- искусственный интеллект;
- «интернет вещей» и встраиваемые системы;
- Data Science;
- мобильные приложения;
- блокчейн.
Выбирайте то, что вам близко, и ориентируйтесь на актуальные данные по востребованности, профессиональные рейтинги и тенденции.
Заключение
Неважно, сколько языков знает программист, — главное, чтобы он владел ими на профессиональном уровне, а также понимал основы разработки, умел пользоваться современными инструментами и фреймворками. Сегодня также востребованы fullstack-специалисты, которые разбираются сразу во всем.