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

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

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


ссылка на оригинал статьи https://habrahabr.ru/post/317748/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *