СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H 13 перспективных языков программирования в черновиках



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



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

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

Ниже описаны 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-преобразования практически невозможно реализовать.

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


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

комментарии (27)

+16
+19 –3
DaylightIsBurning ,  
CUDA, но не OpenCL?
Go и D, но не Rust?
+6
Fedcomp ,  
Действительно очень странно упоминать D но не Rust.
+7
+9 –2
potan ,  
CoffeeScript не прижился. Но есть достойная замена ELM.
Странно, что в этом списке нет Julia (при этом есть Matlab) и Rust.
+1
Arseny_Info ,  
Julia незаметна даже на фоне R https://www.google.com/trends/explore?q=%2Fm%2F0j3djl7,%2Fm%2F0212jm
Хотя говорить о роли Matlab для будущего программирования — это даже не смешно.
0
vlreshet ,  
Он не просто не прижился, он уже тупо не нужен. Потому что вышел великолепный стандарт ES6, который тоже умеет жить без фигурных скобочек, и многое другое.
0
barkalov ,  
ES6 не умеет без фигурных. Но, зато умеет (почти) всё остальное: классы, стрелочные функции, вот это всё.

Вот бы ещё строгую типизацию… Ну и protected переменные до кучи.
–1
+2 –3
andreymal ,  

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

0
AlexTheLost ,  

Здравствуйте, можно узнать почему? Я лично отдаю предпочтение Scala. Он в отличии от Rust, позволяет очень хорошо описывать сложную предметную область за счет сочетания ООП, ФП и других фич. К тому же имеет богатый набор средств для разработки конкурентных систем, не говоря уже о библиотеках под JVM на все случаи жизни.

0
Fedcomp ,  
Scala -> JVM -> GC/RAM
Rust — native code.
0
AlexTheLost ,  

Тема явно не раскрыта, существует не мало языков компилируемых в native code.

+7
+8 –1
dmitry_dvm ,  
Где C#? А «язык будущего» CoffeeScript разве еще жив?
+2
+3 –1
CyberChipmunk ,  
Где LISP?
0
ntkj666 ,  
Да здравствует строгая типизация, наше светлое будущее!!! :)
–1
ARad ,  

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

+1
vchslv13 ,  
И тогда у нас будет целых 14 языков будущего!
+1
impwx ,  
На тему языков, сдвигающих парадигмы — советую посмотреть в сторону Idris. Подозреваю, что в ближайшие 5 лет во многих мэйнстримных языках появится встроенная система доказательства корректности программы.
+8
+9 –1
GennPen ,   * (был изменён)
Весьма странная подборка. Упомянули некоторые «языки», которые по сути языками не являются, но про другие языки забыли.
+2
+3 –1
UA3MQJ ,  
Просто статью Go'шники писали.
+1
+2 –1
longclaps ,  
> Arduino — это набор C и C++ функций, которые вы собираете в строки, а компилятор делает всё остальное.

Галимый маркетинговый булшит.
+1
+2 –1
vt4a2h ,  
Очень странно что нет Rust (единственное что пожалуй стоит упоминания).
+2
+3 –1
ggrnd0 ,  

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


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


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


3)


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

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


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


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

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

1. Индийский
2. Китайский
3…
0
PapaBubaDiop ,  
Нет, Холмс. Будущее за картинками и смайликами.

Заказчики заставлют убирать TableView и заменять их на CollectionView — и чтобы никаких букв!
+2
SirEdvin ,  

R есть, но нет Python, который дает такие же и еще больше возможностей. + Hadoop, Spark и прочее
Java 8? Нет, я конечно, тоже люблю java, но она никогда не занималась определением будущего. Скорее, всегда догоняла.
Swift — язык качественно отличается только от Objective-C. Причем тут будущее?
Go — это нишевый Web 2.0 для Паскаля, авторы которого прибегают к сомнительным практикам в стиле кодогенерации и мета-информации вместо нормальных комментариев.
CoffeeScript — почти мертв
D — почти мертв
Less — а почему не Sass/Scss?


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


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

0
brooth ,  

image

0
odiiibo ,  
Eifel тоже достойный язык
0
zolern ,  
Мы про будущее програмирования вангуем, а завтра раз и научат нейронок акурат на асемблере творить и хана будет всем языкам програмирования вместе с програмистами, останутся только несколько десятков девопсов прислуживать за ИИ :)

Но даже если из ИИ не выйдет програмиста опять не совсем понятно как автор определял у каких языков есть будущее, а у каких — нет. И за примерами далеко ходить не надо. CoffeeScript? На сайте проекта CoffeeScript убедительно советуют пересаживаться на ванильном ECMAScript 2016. Три года назад CoffeeScript и был то самое будущее, но сейчас CoffeeScript скорее мертв, чем жив. Чего однако не скажешь о TypeScript, Да и как-то про самого JS не замолвили ни слова — видно там будущего или как?

Или вот D упомянули, а Nim нет? Почему? Непорядок от слова совсем, а между прочим Nim рулить не хуже D; я вот абсолютно уверен, что будущее у него ни чуть не меньше чем у Go.

И за Rust мне тоже обидно: чем Rust хуже Go и/или D? Или чем хуже C# чем Java. После того как C# заопенсорсили и MS стартовали .Net на линуксе и на маках мне лично как-то страшно становится за будущее джавы. Но Java 8 упомянута, а C# нет?

Если коротко: какое-то навязчивое ощущение, что статью писали два года назад, да и тогда про будущее програмирования на кофейной гуще гадали, но у автора ну не сложилось с Вангой. Или с коффе :)