[Перевод] Пять перспективных языков программирования со светлым будущим

КДПВ


Если разделять языки программирования по популярности, то они делятся на три эшелона. Первый эшелон включает мейнстрим-языки, такие как Java, JavaScript, Python, Ruby, PHP, C#, C++ и Objective-C. Несмотря на то, что некоторые из ведущих языков возможно увядают, вам лучше знать один или несколько из них, если вы хотите иметь возможность легко найти работу.


Языки второго эшелона пытаются пробиться в мейнстрим, но ещё не добились этого. Они доказали свою состоятельность путем создания сильных сообществ, но они до сих пор не используются большинством консервативных IT-компаний. Scala, Go, Swift, Clojure и Haskell — языки, которые я бы отнёс ко второму эшелону. Некоторые компании используют эти языки для отдельных сервисов, но широкое применение встречается редко (за исключением Swift, который начинает обгонять Objective-C в качестве основного языка для iOS). Go и Swift имеют хорошие шансы на переход из второго эшелона в первый в течение ближайших двух-трёх лет.


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


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



Перспективные языки: почему эти пять?


Пять языков программирования, о которых пойдёт речь, весьма новы (не исключено, что о каком-то вы услышите впервые), и они явно имеют отличные шансы пробиться во второй эшелон в ближайшие 2–3 года. Может быть, когда-нибудь один из этих языков сможет потеснить и языки первого эшелона.


Вот почему эти пять языков были выбраны для этого списка:


Elm набирает популярность в сообществе JavaScript, в первую очередь среди тех, кто предпочитает функциональное программирование, которое находится на подъеме. Как и Babel, TypeScript и Dart, Elm транспилируется в JavaScript.


Rust является языком системного программирования, предназначенным в основном для ниш, где применяют С и С++. Поэтому удивительно видеть, что популярность этого языка быстрее растёт среди веб-разработчиков. Этот факт становится более осмысленным, когда вы выясняете, что язык был создан в Mozilla, которая хотела дать лучший вариант веб-разработчикам, которые вынуждены писать низкоуровневый код, и при этом более производительный, чем PHP, Ruby, Python или JavaScript. Rust был также признан лучшим в номинации «сама любимая технология» по результатам опроса разработчиков, проведённом StackOverflow в 2016 году (это означает, что большинство пользователей хотели бы продолжать использовать этот язык).


Kotlin существует уже около пяти лет, но только в этом году он достиг production-ready версии 1.0. Несмотря на то, что он ещё не достиг популярности Scala, Groovy или Clojure — три самых популярных и зрелых (не считая Java) языков под JVM — он выделяется из множества других JVM-языков и, кажется, готов занять свое место среди лидеров этой группы. Язык возник в JetBrains (создатель популярной IntelliJ IDEA IDE). Так что он продуман с упором на производительность труда разработчиков.


Crystal — ещё один язык, который надеется принести производительность программ на уровне C в высокоуровневый мир веб-разработчиков. Crystal нацелен на Ruby-сообщество, т.к. его синтаксис подобен, а порой идентичен, Ruby. И без того большое количество стартапов на Ruby продолжает расти, и Crystal может сыграть ключевую роль, помогая поднять производительность этих приложений на следующий уровень.


Elixir также черпал вдохновение из экосистемы Ruby, но вместо того, чтобы пытаться принести C-подобные преимущества, он ориентирован на создание высокодоступных, отзывчивых систем, т.е. на то, с чем Rails имеет проблемы по мнению критиков. Также Elixir достигает прироста производительности при помощи Erlang VM, которая имеет прочную репутацию, основанную на 25 годах успешного применения в телекоммуникационной отрасли. Phoenix (веб-фреймворк для Elixir), наряду с большой и цветущей экосистемой, придаёт этому языку дополнительную привлекательность.


Теперь взгляните, как четыре из этих пяти языков карабкаются по лестнице популярности (на основе данных StackOverflow и GitHub):


RedMonk stats


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


Elm


Elm — функциональный язык программирования, ориентированный на удобство и простоту использования, который компилируется в высокопроизводительный JavaScript-код. Вы можете использовать его, в том числе и совместно с JavaScript, для создания пользовательских интерфейсов в интернете. Основными преимуществами Elm по сравнению с JavaScript являются надёжность, лёгкость в поддержке и нацеленность на удовольствие от программирования. Более конкретно:


  • Нет runtime-исключений: Elm-код имеет репутацию никогда не выбрасывающего исключений во время выполнения. Совсем не то, что «undefined is not a function.»
  • Легендарно любезный компилятор: компилятор Elm часто хвалят за наиболее полезные сообщения об ошибках среди конкурентов. «Если он компилируется, то, как правило, всё просто работает» — это распространённое мнение, даже после серьёзного рефакторинга. Это делает большие проекты на Elm гораздо легче в поддержке, чем соразмерные проекты на JS.
  • Семантическое версионирование: elm-package обеспечивает соблюдение семантических версий автоматически. Если автор пакета пытается сделать ломающие API изменения, не поднимая основной номер версии, elm-package обнаружит это и откажет в публикации новой версии пакета. Ни один другой известный менеджер пакетов не обеспечивает соблюдение семантического версионирования настолько надёжно.
  • Быстрый и функциональный: Elm является чистым функциональным языком, который гарантирует отсутствие мутаций и побочных эффектов. Это не только обеспечивает прекрасную масштабируемость Elm-кода, но также помогает ему рендерить UI приложения быстрее, чем React, Angular или Ember.
  • Мощные инструменты: elm-format форматирует исходный код в соответствии со стандартом сообщества. Нет больше споров по конвенциям оформления кода. Просто нажимаете кнопку «Сохранить» в вашем редакторе и ваш код становится красивым. elm-test поставляется с «батарейками» для поддержки как модульного, так и случайного тестирования. elm-css позволяет писать Elm-код, который компилируется в css-файл, так что вы можете разделять код между приложением и таблицами стилей, чтобы гарантировать, что ваши константы никогда не рассинхронизируются.

Elm код также может взаимодействовать с JavaScript. То есть вы можете вводить его в малых дозах в ваш JS код, и вы всё ещё можете использовать огромную экосистему JS и не изобретать колесо.


Посмотрите guide.elm-lang.org, чтобы начать, Elm in Action для более глубокого ознакомления и How to Use Elm at Work, если вам интересно, как можно было бы использовать Elm на работе.


Этот раздел написал Richard Feldman — автор Elm in Action и создатель elm-css, CSS-препроцессора для Elm.


Rust


Rust является языком системного программирования, который сочетает в себе эффективность C и контроль над памятью с функциональными возможностями, такими как сильная статическая типизация и вывод типов.


Основными целями при проектировании языка были:


  • Безопасность: Многие C-подобные языки открывают путь к ошибкам в результате ручного управления памятью (например, висячие указатели или двойные освобождения). Rust перенимает передовые практики современного C++, такие как RAII и смарт-указатели и делает их применение обязательным, систематически гарантируя, что чистый код на Rust безопасен по памяти.
  • Скорость: Почти все языки работают медленнее, чем C, поскольку они обеспечивают абстракции, которые упрощают разработку программного обеспечения. Но это даётся ценой существенного увеличения накладных расходов во время выполнения (например, сборка мусора и динамическая диспетчеризация). Rust фокусируется на «абстракциях нулевой стоимости», т.е. таких методах упрощения программирования, которые не требуют дополнительных затрат во время выполнения. Например, Rust управляет памятью во время компиляции и использует статическую диспетчеризацию для дженериков (по аналогии с шаблонами C++, но более безопасно по отношению к типам).
  • Конкурентность: Конкурентный код в системных языках часто хрупок и подвержен ошибкам, учитывая нетривиальность многопоточного программирования. Rust пытается смягчить эти проблемы путем предоставления гарантий на уровне типа какие значения могут быть разделены между потоками и как именно.

Rust также имеет несколько отличительных особенностей:


  • Проверка владения: прославленная возможность Rust — инструмент статического анализа, который считывает код и прекращает компиляцию, если он может привести к ошибке памяти. Это работает путем закрепления понятия, что значения либо принадлежат одному месту, либо используются во многих местах, и ​​последующего анализа того, как владение значением меняется во время выполнения программы. Проверка владения также исключает состояние гонки в конкурентном коде, используя тот же набор правил.
  • Композиция вместо наследования: Вместо того, чтобы использовать систему наследования классов подобно C++ или Java, Rust использует трейты или компонуемые интерфейсы для поддержки модульного программирования. Вместо того, чтобы указывать, что конкретный тип является частью иерархии классов, программист может описать тип на основе его возможностей, например, говоря о том, что тип должен быть Printable и Hashable вместо наследования от класса PrintableHashable.
  • Крутые инструменты: Любой C/C++ ветеран знает боль установки зависимостей, компиляции кода на нескольких платформах и борьбы с тайнами конфигурации CMake. Rust экономит бесконечные часы, проведенные в криках на GCC, предоставляя разумный менеджер пакетов и кросс-платформенные API.

Для получения дополнительной информации, ознакомьтесь с The Rust Book и Rust by Example.


Этот раздел написал Will Crichton — аспирант Стэнфордского университета, который специализируется на параллельных и конкурентных системах, визуальных вычислениях и архитектуре компиляторов и языков программирования. Он часто пишет о Rust в своем блоге.


Kotlin


Kotlin представляет собой статически типизированный язык, который ориентирован на JVM и JavaScript. Kotlin родился из потребности JetBrains, которая искала новый язык для разработки своего набора инструментов (который был в основном написан на Java). Что-то, что позволило бы им использовать существующую кодовую базу и в то же время решить некоторые проблемы, которые возникали из-за Java. И именно решения этих распространенных недочётов, встречающихся при написании программного обеспечения, определили большую часть характеристик Kotlin.


  • Лаконичность: уменьшить количество шаблонного кода, необходимого для выражения определенных конструкций.
  • Универсальность: создать язык, который подходит для любого типа промышленного применения, будь то веб, мобильная разработка, desktop или серверные приложения.
  • Безопасность: пусть язык сам обрабатывает некоторые из распространенных ошибок, связанные с такими вопросами, как null reference exceptions.
  • Взаимодействие: разрешить языку взаимодействие с существующими базами кода на Java, библиотеками и фреймворками, что обеспечивает возможность постепенного внедрения и использования результатов уже вложенных инвестиций.
  • Инструменты: JetBrains делает инструменты и делает их, исходя из убеждения, что многие рутинные задачи можно автоматизировать и привести к более эффективной и продуктивной разработке. Таким образом, язык должен легко позволять применять вспомогательные инструменты.

Kotlin был и всегда будет нацелен на прагматизм — выискивая распространённые проблемы, с которыми мы часто сталкиваемся при написании кода, и пытаясь помочь в их решении. Это проходит красной нитью через различные языковые особенности, такие как:


  • Null-safe по умолчанию: типы Kotlin по умолчанию не обнуляемы, что позволяет избежать назойливых исключений, связанных с пустыми ссылками/указателями.
  • Делегация первого класса: возможность делегировать функциональность члена класса внешней функции, что облегчает повторное использование и улучшает композицию.
  • Соглашения: ряд соглашений, которые позволяют писать выразительный код, открывая путь к созданию сильно типизированного DSL, который улучшает читабельность и упрощает рефакторинг.
    html {
    head {
      title {+"XML encoding with Kotlin"}
    }
    body {
        p { + "This is some HTML" }
    }
    }

Kotlin 1.0 был выпущен в феврале 2016 года, спустя более пяти лет разработки и тщательного тестирования в реальных проектах. В настоящее время более десяти продуктов JetBrains используют Kotlin. Также его используют такие компании, как Amex, NBC Digital, Expedia и Gradle.


Для получения дополнительной информации посетите kotlinlang.org


Этот раздел написал Hadi Hariri — вице-президент JetBrains, редактор блога Kotlin и главный докладчик на темы, посвящённые этому языку.


Crystal


Crystal является языком программирования общего назначения с девизом «Быстр как C, привлекателен как Ruby.»


Это высокоуровневый, статически типизированный, компилируемый, полностью объектно-ориентированный язык программирования с передовым выводом типов и сборкой мусора.


Архитектурные цели Crystal:


  • Синтаксис похожий на Ruby (но совместимость с ним не является целью).
  • Статическая типизация, но без необходимости указания типа переменных или аргументов метода.
  • Возможность вызывать C-код, написав биндинги к нему на Crystal.
  • Возможность выполнения и генерации кода во время компиляции, чтобы избежать шаблонного кода (boilerplate).
  • Компиляция в эффективный машинный код.

Crystal имеет уникальные функции, такие как:


  • Каналы: Crystal использует каналы, вдохновленные CSP (так же, как Go) для достижения конкурентности. Он использует согласованные легковесные потоки, называемые Fibers, для достижения этой цели. Fiber легко создать с помощью ключевого слова spawn и сделать выполнение асинхронным/неблокирующим.
  • Макросы: Crystal использует макросы, чтобы избежать шаблонного кода и обеспечить возможности метапрограммирования. Макросы очень мощные и раскрываются во время компиляции, то есть они не приводят к потери производительности.
  • crystal: Команда crystal сама по себе полнофунциональна и поставляется с большим количеством встроенных инструментов. Она используется для создания нового проекта, компиляции, запуска тестов и многого другого. Там также есть встроенная утилита для автоматического форматирования кода. А ещё crystal play представляет интерактивную среду для быстрого прототипирования, подобно irb.

Бонус:


Выразительность: Код читают гораздо чаще, чем пишут. Благодаря Ruby, Crystal действительно выразителен и лёгок для понимания. Это облегчает обучение для новичков и окупается в долгосрочной перспективе, благодаря упрощению сопровождения кода.


Для получения дополнительной информации вы можете обратить внимание на официальную Crystal Book и Crystal for Rubyists.


Этот раздел был написан Serdar Doğruyol — автор Crystal for Rubyists, создатель Kemal, веб-фреймворка для Crystal, куратор Crystal Weekly.


Elixir


Впервые представленный в 2012 году, Elixir является функциональным языком общего назначения, предназначенным для повышения производительности, масштабируемости и эксплуатационной надежности. В то время как язык является относительно новым, он компилируется в байт-код, который выполняется на виртуальной машине Erlang (BEAM). Erlang VM родилась в телекоммуникационной отрасли, развивается в течение почти 25 лет и стоит за многими сложными системами с высокой доступностью и низкой задержкой.


В настоящее время Elixir в основном используется для создания веб-приложений с использованием либо Cowboy (низкоуровневый HTTP-сервер), либо Phoenix (полнофункциональный фреймворк для разработки веб-приложений). Кроме того, Elixir пробивается в нишу встраиваемых систем благодаря фреймворку Nerves.


Синтаксис Elixir и набор инструментов черпали вдохновение от Ruby. В то время как синтаксические сходства только поверхностны, набор инструментов будет ощущаться знакомым каждому, кто знает Ruby. Команды хорошо продуманы, просты в использовании и обеспечивают прекрасную производительность труда разработчиков.


Цели языка:


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

Пример Phoenix-контроллера, написанного на Elixir
Пример Phoenix-контроллера, написанного на Elixir


Отличительные особенности:


  • Иммутабельные структуры данных и отсутствие побочных эффектов помогают сделать большие системы проще в обслуживании и понимании.
  • Супервизоры позволяют определить внутреннее дерево процессов и установить правила для автоматического восстановления от ошибок.
  • Сопоставление с образцом обеспечивает альтернативу условными и сторожевым операторам.
  • Конкурентность, основанная на акторах и отсутствии разделяемых данных, хорошо подходит для решения сегодняшних проблем конкурентности при масштабировании. См. Путь к 2 миллионам подключений.
  • Очень эффективное управление ресурсами означает, что вы можете обслуживать множество пользователей ограниченными аппаратными средствами. См. Почему WhatsApp требуется только 50 инженеров для обслуживания 900 миллионов пользователей.
  • Горячая замена кода позволяет проводить деплои без даунтайма.
  • Lisp-подобная система макросов позволяет напрямую манипулировать AST, обеспечивая очень широкие возможности метапрограммирования, вплоть до поддержки кастомного синтаксиса. (этот пункт добавлен переводчиком)

Elixir и Phoenix набирают популярность, поскольку это сочетание позволяет легко создавать сложные надёжные веб-приложения и API с хорошей поддерживаемостью, отличной производительностью и масштабируемостью. Вот почему Pinterest, Bleacher Reports и многие другие компании выбирают Elixir для ключевых частей инфраструктуры своих продуктов. Вы можете получить продуктивность без ущерба для производительности (или наоборот), чего не скажешь о большинстве других языков.


Этот раздел написан Christian Nelson — партнер и директор по разработке в Carbon Five.


P.S. Каков ваш Top-5 перспективных языков программирования?
P.P. S. От переводчика: На мой взгляд в список перспективных языков можно было бы включить ещё Nim. Если кто-то из хабровчан уже применяет этот ЯП и готов написать о нём подобное краткое эссе, то я с удовольствием добавлю его в статью (само собой, с указанием авторства).

Комментарии (18)

  • 18 сентября 2016 в 00:35

    +1

    Языки то конечно может перспективные. Но им далеко до повседневного использования. А «увядающие .NET/C#» еще много кого переживут.

    P.S. Говорю как постоянный пользователь как C#, так и например Kotlin

    • 18 сентября 2016 в 00:58

      0

      Я согласен, что позиции C# прочны. Впрочем, MS не зря зашевелилась в сторону кроссплатформенности. Разработка приложений чисто под Windows сейчас уже далеко не так популярна, как лет 10 назад.
      • 18 сентября 2016 в 01:17

        0

        Самый популярный геймдев инструмент? Unity. На каком языке там пишут? :) Ну и по сути C# один из немногих не низкоуровневых языков, который позволяет (и имеет хороший тулинг) писать под всё и везде: back-end, десктопные нативные приложения под Windows, macOS, Linux. Нативные приложения под Android, iOS (с поддержкой любых нативных 3rd party), приставки и даже микроконтроллеры :-). В свежем отчете гитхаба C# за год в популярности подрос в два раза. В общем, я бы не назвал его увядающим.

        • 18 сентября 2016 в 01:33 (комментарий был изменён)

          +1

          Самый популярный геймдев инструмент?
          C++ xD

          Что ж Вы так резко реагируете то? Статья ведь вообще не об этом… Я, честно говоря, статью про увядающие языки вообще только после комментария прочитал)))
          И хоть я бы лично не назвал C# увядающим, но с аргументами из той статьи тоже можно согласиться… Рынок веб- и mobile-приложений MS, мягко говоря, упустила из-за своей же близорукости. Никто им не мешал поддержать Mono ещё во времена .NET 2.0. И то, что они этого не сделали, по масштабности просчёта аналогично отказу от продолжения разработки браузера после победы над Netscape. Теперь приходится в спешке догонять конкурентов в упущенных нишах.

    • 18 сентября 2016 в 02:02

      +1

      Но им далеко до повседневного использования.

      Например пользуюсь активно elixir, для новых проектов отличный вариант. Crystal — в глубокой альфе, его действительно не скоро можно будет по настоящему использовать. Kotlin — слышу об отдельных командах что на него переходят (как правило смесь старого кода на java + новый на котлин)

  • 18 сентября 2016 в 00:37

    0

    Где-то рядом с Elm, но на ступеньку повыше, я бы поставил PureScript.

  • 18 сентября 2016 в 01:56

    0

    Несправедливо обделили вниманием Dart. Этот язык по линейке Git/Overflow обгоняет даже Rust.
    • 18 сентября 2016 в 04:05

      0

      Одно плохо. Он мертв по факту. А потуги Гугла запилить мобильную ОС с ним, очередные гвозди в его гроб и пустая трата времени.
      • 18 сентября 2016 в 04:08 (комментарий был изменён)

        0

        Откуда же вы взяли такой факт?
        • 18 сентября 2016 в 04:23

          0

          Ну это гугл. Возьмут и закроют. Да и где этот дарт можно запустить кроме специальной сборки хрома?
          А трансляция в js мне кажется сомнительным вариантом. Сначала решать проблемы в коде дарт, а потом в коде жс.
          • 18 сентября 2016 в 04:42

            0

            Вы описали надуманную проблему, а есть что-то более существенное, чем ваше мнение не основанное даже на опыте использования этого языка? У меня есть пара коммерческих проектов, которыми я занимался несколько лет назад, живы до сих пор, прекрасно работают. За всё время использования при компиляции в JS была проблема один единственный раз, да и то связано со сторонней библиотекой. Это ни в какое сравнение не идёт даже с разработкой Android приложений нативными средствами, когда проверка объекта на null даёт NPE. Я бы посоветовал ознакомиться с Dart, попробовать его своими руками и только после этого делать выводы.
            • 18 сентября 2016 в 04:49

              +1

              Нет, опыта использования у меня нет. Я могу только экстраполировать свой опыт в других экосистемах на dart и также делать выводы из количества вакансий. Вакансий или 0, или предлагают опечатку в запросе исправить. То есть используется он в основном там где исполнителю хочется прокачать скилл изучая что-то новое, а заказчик не в курсе, что за его счёт качают скилл, или ему без разницы где он потом будет искать людей на поддержку.
              • 18 сентября 2016 в 05:08

                0

                Экстраполяцию надо делать аккуратно, вчера у меня не было жены, сегодня одна, а завтра будет две, так что ли? Про вакансии тоже надо внимательнее смотреть, часто они сопряжены с требованием знания JS, ибо на сегодня одно без другого никак. Хотя бы спросите Wrike зачем они используют Dart в своих проектах.
                Вы делаете выводы исходя из ложных посылов.
                • 18 сентября 2016 в 05:09

                  0

                  Ну и хорошо, если будет находить применение.
  • 18 сентября 2016 в 02:42 (комментарий был изменён)

    0

    Nim хорош, но до того чтобы попробовать на нем какой-то продакшен все никак руки не дойдут. Кто-то пробовал на нем писать больше чем пару хелловорлдов? :)
  • 18 сентября 2016 в 03:38

    0

    А мне кажется, что сама по себе линия — не очень удачный фактор. Я б искал языки, которые имеют значительный перевес ГитХаба в сравнении с СО — ибо в них меньше ВТФ или лучше литература и при высокой популярности. Например, D. Проектов значительно больше, чем в Расте или Еликсире, а вопросов по нему меньше или равно. Видимо, хороший язык.
  • 18 сентября 2016 в 04:07 (комментарий был изменён)

    0

    Теперь взгляните, как четыре из этих пяти языков карабкаются по лестнице популярности (на основе данных StackOverflow и GitHub):

    Рядом карабкаются Ada, Pascal и Smalltalk.
    Я бы назвал другие, не 5 конечно, но хотя бы 3: Go, TypeScript, Swift.
    Первое что приходит на ум. Первые 2 потому что в продакшене спасают, третий… Ну вы сами понимаете.
  • 18 сентября 2016 в 07:34

    0

    Язык программирования — это инструмент. Как сварочный аппарат, например. Если все в основном, скрепляют детали на сварку, то зачем вам осваивать использование заклёпок? Со сваркой вы всегда найдете работу. Да, на заклепки тоже есть пару мест в стране — это производство военных самолетов, но стоит ли оно того? Платят столько же, зато если сократят, то останетесь совсем без работы.
    Некоторые говорят, что за заклепками будущее. Но я им не верю. Мне кажется, рынок труда очень неплохо расставляет все по своим местам.

© Habrahabr.ru