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



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

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

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

R


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

Многие ограничиваются тем, что используют R внутри интегрированной среды разработки в качестве блокнота для экспериментов с данными. Загружать данные и работать с ними можно с помощью двух популярных фронтендов: R Studio и R Commander. Они превращают R из языка, который нужно компилировать и запускать, в более интерактивную среду.

Ключевые моменты: Продуманные выражения для выбора подмножеств и их анализа.
Трудности: Заточен под персональные компьютеры, не является частью мира больших данных, где правят технологии наподобие Hadoop.

Java 8


Java — язык не новый. Для многих из нас он был первым языком программирования благодаря его роли лингва франка в информатике. Сегодня в мире циркулируют — и управляют им — миллиарды JAR-файлов. Но Java 8 несколько иная. В ней появились возможности по внедрению функциональных методик программирования, которые открывают дорогу параллелизму. Использовать их не обязательно, можно оставаться и в рамках старой доброй Java. Но тогда вы не сможете повысить структурированность ради оптимизации исполнения JVM. Вы не сможете мыслить в рамках парадигмы функционального программирования, не сможете писать более чистый, быстрый код с меньшим количеством багов.

Ключевые моменты: Лямбда-выражения и многопоточный (concurrent) код.
Трудности: Возникает желание удрать и с головой окунуться в Scala.

Swift


Apple увидела перспективу в жалобах новичков на трудности написания кода на Objective-C. В результате компания выкатила Swift и непрозрачно намекнула, что он заменит Objective-C в разработке под MacOS или iOS. В Apple поняли, что создавать заголовочные файлы и жонглировать указателями уже несовременно. Swift прячет от вас подобные вещи, и по стилю написания гораздо ближе к современным языкам, вроде Java или Python. К тому же он выполняет за вас всю грязную работку.

У Swift обширная спецификация. Это не просто синтаксически подчищенный Objective-C, количество нововведений так велико, что их замучаешься перечислять. Некоторые программисты даже жалуются, что приходится изучать слишком много нового при переходе с Objective-C, к тому же Swift усложняет жизнь командам, участники которых рецензируют код друг друга. Но не стоит на этом зацикливаться, ведь теперь iOS-разработчики могут выкатывать код так же быстро, как и другие. Синтаксис стал чище, а язык теперь может решать более сложные задачи.

Ключевые моменты: Гораздо более ясный и понятный синтаксис, меньше низкоуровневой возни с указателями.
Трудности: Обратная совместимость требует иногда думать о битах и байтах.



Go


Когда в Google начали разрабатывать новый язык для своих серверных ферм, то решили создать что-то простое, насобирав удачных идей из других языков. Как сказал один из авторов, они хотели, чтобы всё было «настолько простым, чтобы это мог запомнить один человек». В Go нет сложных абстракций или мудрёного метапрограммирования — лишь базовые возможности, выражаемые незатейливым синтакисом.

Это облегчает работу в командах, потому что не надо беспокоиться о том, что кто-то откопает очередную гениальную идею в недрах спецификации.

Ключевые моменты: Чистый и простой язык для работы с данными.
Трудности: Иногда требуются более широкие возможности.

CoffeeScript


Однажды один программист устал писать в JavaScript все эти точки с запятой и фигурные скобки. И в результате создал CoffeeScript, инструмент для препроцессинга, преобразующий синтаксические сокращения в обычный JavaScript. Это не столько язык, сколько способ сэкономить время на выписывании JS-синтаксиса.

Шутники утверждают, что CoffeeScript — это средство для уменьшения количества нажатий на кнопки; и {}. Но они упускают главное: чем чище код, тем он читабельнее, и для программиста всегда лучше, когда он может быстро мысленно разложить код. CoffeeScript облегчает понимание кода, что нельзя не приветствовать.

Ключевые моменты: Код становится чище.
Трудности: Иногда скобки помогают лучше разбираться в многочисленных уровнях рекурсии.

D


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

Это стало одной из причин появления D. Он предлагает обновлённую логическую чистоту С и С++ с добавлением современных удобств вроде управления памятью, вывода типа и граничной проверки (bounds checking).

Ключевые моменты: Некоторые из наиболее важных новых возможностей из других языков.
Трудности: Часть ресурсов тратится на подстраховку.

Less.js


Как и CoffeeScript, Less.js всего лишь препроцессор, упрощающий создание сложных CSS-файлов. Каждый, кто пытался создать список правил вёрстки даже для простейшего сайта, знает, что создание базового CSS требует многочисленных повторов. А Less.js все эти повторы обрабатывает в циклах, переменных и прочих программных конструкциях. Например, можно создать переменную для оттенка зелёного, используемого и для фона страницы, и выделения текста. Если заказчик захочет поменять цвет, то достаточно будет внести изменение в одном месте.

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

Ключевые моменты: Упрощение кода.
Трудности: Хотелось бы больше полезных конструкций.

MATLAB


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

Ключевые моменты: Быстрые, стабильные и качественные алгоритмы для сложных вычислений.
Трудности: Математика всё ещё сложна.

Arduino


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

Ключевые моменты: Мир техники в ваших руках.
Трудности: По большей части это C и C++.

CUDA


Многие воспринимают мощь своих видеокарт как нечто само собой разумеющееся. Они даже не думают о том, сколько треугольников обсчитывает их видеоускоритель, до тех пор, пока их мир не сложнее сетевых стрелялок. Но если заглянуть под капот, то окажется, что при правильном подходе видеокарты могут дать вам кучу вычислительной мощности. С помощью языка CUDA Nvidia позволила нам использовать свои видеокарты не только для убийства зомби и стрельбы из танчиков.

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

Ключевые моменты: Очень высокая производительность, как минимум для параллельного кода.
Трудности: Не всегда легко выявлять легко параллелизуемые части кода.

Scala


Каждый, кто углублённо изучал языки программирования, знает, что академический мир любит парадигму функционального программирования. Она гласит, что каждая функция должна иметь чётко определённые ввод и вывод, без каких-либо дополнительных переменных. Существует множество хороших функциональных языков, и одной из наиболее популярных является Scala. Она была создана для исполнения в виртуальной машине Java, так что всё написанное на Scala может выполняться там, где работает Java. То есть, почти везде.

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

Ключевые моменты: Функциональный, но достаточно гибкий язык, чтобы хорошо взаимодействовать с другими языками, использующими JVM.
Трудности: Для ряда задач и приложений может быть непросто использовать функциональный подход.

Haskell


Scala — не единственный функциональный язык с большим количеством пользователей. В этом отношении с ней посоперничает Haskell, с которого можно начинать своё знакомство с программированием. Он уже используется в больших проектах, например, в Facebook. В задачах, на первый взгляд не слишком подходящих для академического кода, Haskell демонстрирует хорошую производительность.

Ключевые моменты: Уже проверен на серьёзных проектах.
Трудности: Функциональное мышление может потребовать отказаться от некоторых дурных привычек.

Jolt


Когда XML был форматом для больших данных, одним из лучших инструментов для манипуляций с крупными объёмами XML был функциональный язык программирования XSLT. Теперь миром правит JSON, для которого хорошо подходит Jolt. Вы можете написать простые фильтры для извлечения атрибутов, а JOLT найдёт и преобразует их так, как вам нужно. Также можете взглянуть на Tempo и использование XSLT.

Ключевые моменты: Очень простой язык для решения большинства JSON-проблем.
Трудности: Некоторые JSON-преобразования практически невозможно реализовать.

Без обобщений


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

Поделиться с друзьями
-->

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


  1. DaylightIsBurning
    16.12.2016 12:46
    +13

    CUDA, но не OpenCL?
    Go и D, но не Rust?


    1. Fedcomp
      16.12.2016 13:12
      +4

      Действительно очень странно упоминать D но не Rust.


  1. potan
    16.12.2016 12:49
    +4

    CoffeeScript не прижился. Но есть достойная замена ELM.
    Странно, что в этом списке нет Julia (при этом есть Matlab) и Rust.


    1. Arseny_Info
      16.12.2016 14:01

      Julia незаметна даже на фоне R https://www.google.com/trends/explore?q=%2Fm%2F0j3djl7,%2Fm%2F0212jm
      Хотя говорить о роли Matlab для будущего программирования — это даже не смешно.


    1. vlreshet
      16.12.2016 14:09

      Он не просто не прижился, он уже тупо не нужен. Потому что вышел великолепный стандарт ES6, который тоже умеет жить без фигурных скобочек, и многое другое.


  1. sim31r
    28.03.2017 00:36

    Предохранитель на 0.25 ампера защитит куллеры от возгорания. Более мощные предохранители желательны и для остальных цепей.


  1. dmitry_dvm
    16.12.2016 13:09
    +5

    Где C#? А «язык будущего» CoffeeScript разве еще жив?


  1. ntkj666
    16.12.2016 13:15

    Да здравствует строгая типизация, наше светлое будущее!!! :)


  1. CyberChipmunk
    16.12.2016 13:15
    +1

    Где LISP?


  1. ARad
    16.12.2016 13:18

    Нафига нам целых тринадцать языков будущего? Давайте сделаем один универсальный язык будущего! image


  1. impwx
    16.12.2016 13:20
    +1

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


  1. GennPen
    16.12.2016 13:21
    +6

    Весьма странная подборка. Упомянули некоторые «языки», которые по сути языками не являются, но про другие языки забыли.


    1. UA3MQJ
      16.12.2016 13:32

      Просто статью Go'шники писали.


  1. longclaps
    16.12.2016 13:35

    > Arduino — это набор C и C++ функций, которые вы собираете в строки, а компилятор делает всё остальное.

    Галимый маркетинговый булшит.


  1. vt4a2h
    16.12.2016 13:46

    Очень странно что нет Rust (единственное что пожалуй стоит упоминания).


  1. ggrnd0
    16.12.2016 13:54

    Вы облажались...


    1) Matlab/R без упоминания Mathematica?
    Matlab/R — числодробилки и только. Mathematica же способна работать с матаном.


    2) Java8? Вы с java точно знакомы? в java8 не добавили ничего кроме синтаксического сахара. лучше бы просто написали Java.
    Может вам следовало присмотерться к Kotlin?


    3)


    Arduino — это не столько новый язык, сколько набор C- и C++ функций, которые вы собираете в строки, а компилятор делает всё остальное.

    Я знаю, что такое Arduino. Понимаю что вы очень хотели ее добавить.
    Но то что вы написали — просто треш...


    4) D, хватит его пиарить.
    Не взлетел в свое время и больше точно не взлетит… Вот что он против Go дает?


    P.S. увольте 1 пиарщика.


  1. dmitry_ch
    16.12.2016 14:21

    Прочитав название, подумал, что пост будет примерно таков:

    1. Индийский
    2. Китайский
    3…