Топ JavaScript библиотек и технологий, которые стоит изучить в 2018

Перевод статьи Эрика Эллиота “Top JavaScript Libraries & Tech to Learn in 2018” от 29 декабря 2017

Alex Proimos — New York Public Library Grand Study Hall (CC BY 2.0)
Alex Proimos — Главный читальный зал Нью-Йоркской Публичной библиотеки (CC BY 2.0)

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

Мы задались целью ответить на вопрос: “Какие технологии будут стоить потраченного на них времени?”

JavaScript has the most packages, by a landslide.
JavaScript имеет самое большое число пакетов

Ну, первое, что хотелось бы сказать — программное обеспечение захватило весь мир, веб захватил программное обеспечение, а JavaScript захватил веб. А в 2018 году мир JavaScript захватил React.

2018 год: год React

В 2017 году React одержал победу в битве за популярность.

Как показывает Google trends, всё ещё довольно много разработчиков используют Angular:

interest over time

Однако, React уверенно продолжает завоёвывать симпатии пользователей, и темп его роста оставляет Angular (да и всех остальных) далеко позади.

А что там с Vue.js? Говорят, он крут

Все мы любим поболтать об альтернативных технологиях типа Vue.js. Вот что я писал о нём в прошлом году:

Vue.js имеет довольно большое количество загрузок и звёзд на Github, и если всё продолжится в том же духе, Vue.js достигнет хороших результатов в 2017 году. Но я не думаю, что он сможет конкурировать с React или Angular (которые тоже очень быстро развиваются) в 2017 году или ещё когда-то. Изучайте его уже после того, как вы освоите React или Angular.

Vue.js действительно показал неплохие результаты в 2017. Был большой ажиотаж, и многие люди заинтересовались технологией. Однако, как я и предполагал, он и не приблизился к позициям React, и я с уверенностью могу сказать, что этого не произойдёт и в 2018. Возможно, он сможет догнать и даже перегнать Angular:

Vue.js downloads/month
Уровень загрузок Vue.js

Как видите, Vue.js догоняет Angular по количеству скачиваний:

angular/core downloads/month
График загрузок Angular

Однако React сохраняет прочное лидерство и количество загрузок постоянно растёт:

React downloads/month
График загрузок React

Vue.js всё ещё растёт быстрее, чем React. Это очень похоже на противостояние React и Angular в 2017, так в чем же разница?

В конце 2016 года мир JavaScript был готов к появлению нового фреймворка. Пользователи Angular были очень недовольны, пользователи React, напротив, были вполне довольны, и множество людей хотели изучать React, а не Angular. В конце 2017 года уровень удовлетворённости пользователей Angular составил всего 49%.

Эта история совсем не похожа на сегодняшнюю ситуацию с React и Vue.js. React одерживает победу над Vue.js в борьбе за уровень удовлетворённости пользователей (93% к 90%). Единственным поводом переключиться с React на что-то другое была путаница с лицензией в начале 2017, однако Facebook услышал своих пользователей и сменил лицензию.

На данный момент я не вижу явных причин, мотивирующих разработчиков переключиться с React на что-либо другое. А Vue.js придется приложить гораздо больше усилий, чтобы переманить пользователей React, чем пользователей JQuery и Angular.

У Vue.js довольно много способов попытаться переманить на свою сторону пользователей Angular и jQuery, но это, скорее всего, станет пределом — привлечь пользователей React будет очень тяжело.

Я думаю, что Vue.js будет стабильно расти в ближайшие год или два, а затем последует тяжёлая битва за пользователей между React, прочно обосновавшимся на первом месте, и Vue.js на вторых ролях, пока что-то серьёзное не изменит положение вещей.

Требования на рынке

jQuery проиграла

Среди требований к кандидатам в описаниях вакансий React напрочь вытеснил jQuery — и это первая библиотека, обогнавшая jQuery по востребованности за последние десять лет. Мы с вами стали очевидцами конца эпохи.

Диаграмма роста популярности React
Восхождение React — первая библиотека, побившая в популярности jQuery (взято с ресурса: Indeed.com)

Сравните это с прошлым годом:

Сравнение самых популярных библиотек в 2016 году
jQuery в 2016

Самое интересное в этих диаграммах — тот факт, что уровень роста других библиотек намного превысил уровень падения популярности самого jQuery. За последний год общее количество вакансий, для которых требуется знание какого-либо фронтенд-фреймворка, выросло в общей сложности примерно на 10 000.

Вместе с ростом количества вакансий мы можем наблюдать и рост среднего уровня зарплат — с 93 000 долларов до 110 000 по сравнению с концом 2016 года. Уровень инфляции за тот же период составил 2%, что довольно немного по сравнению с уровнем прироста зарплаты.

Понятно, что рынок в 2018 всё ещё принадлежит соискателям.

Методология: исследования рынка были проведены Indeed.com. Чтобы отбросить ложные срабатывания, я слил поиск с ключевым словом software, чтобы усилить релевантность, и потом умножил на ~1,5 (примерная разница между списками вакансий, где используется слово software и теми, где не используется). Все страницы выдачи были отсортированы по дате и выборочно проверены на релевантность. Полученные цифры не точны на 100%, но они достаточно хороши для относительных приближений, используемых в этой статье.

Рекомендации по фреймворкам

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

Важно отметить исключения, для которых может лучше подойти что-то другое: легковесные маркетинговые лендинги (для них вообще не нужны фреймворки), 3D-игры, AR/VR. Для создания 3D-контента обратите внимание на такие технологии, как Unity, Unreal или PlayCanvas. Хотя говорят, что React тоже используют для создания 3D-интерфейсов.

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

Почему так много интереса к React?

Просматривая вакансии, для которых требуется React, я заметил одну интересную вещь: часто он требуется для вещей, выходящих за рамки привычных фронтенд-задач:

  • React Native (упоминаний вакансий с ним больше, чем всех вакансий с Vue.js)
  • React для интернета вещей
  • React для AR/VR (и Oculus Rift здесь лидирует по количеству вакансий)
  • React для непонятной вычислительной штуки, о которой вы, скорее всего, даже не слышали
React вырвался далеко за пределы веб-разработки

Гибкость и универсальность — одна из самых сильных сторон React. Выбирая его, вы не вкладываетесь в какую-то конкретную встроенную модель представления данных, в работу с браузером и самой DOM, и это выгодно отличает его от других фреймворков. На самом деле, я видел довольно много вакансий, где требуется React и даже не упоминается JavaScript.

Кроме того, React предоставляет богатую и активно развивающуюся экосистему, опирающуюся на сложившиеся вокруг React де-факто стандарты — такого мир JavaScript не видел с тех самых времён, когда бесчисленные jQuery-плагины правили миром.

Больше не существует вопроса «А какой фреймворк выбрать?», вопрос теперь звучит «А что мне лучше использовать с React?»

Ничего не пошатнёт позиции React в 2018 году (а возможно даже и в 2019). Можно выдохнуть. Кажется, суматоха в мире JavaScript немного улеглась. У нас есть отличный фреймворк, вокруг которого складывается богатая экосистема.

Что следовало бы изучить?

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

React крут по двум основным причинам:

  • Детерминированная отрисовка представлений
  • Абстрагирование представления от прямого манипулирования DOM

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

Согласно этому, темы, которые стоит изучить:

Библиотеки и инструменты

Библиотеки и инструменты, которые я нахожу наиболее полезными:

  • React
  • Redux
  • Redux-Saga — для управления асинхронным I/O и изолирования сайд-эффектов
  • Next.js — SSR (серверный рендеринг) с Node и Express, автоматический кодсплиттинг, styled-jsx
  • Material UI
  • Storybook
  • Cheerio — для юнит-тестирования React-компонентов (я предпочитаю эту библиотеку вместо Enzyme)
  • Lodash — я предпочитаю утилиты из lodash/fp. Импортируйте только те утилиты, которые вам необходимы, чтобы избежать раздувания бандла.
  • Babel — для компилирования ES6 в код, работающий в старых браузерах
  • Webpack — один из самых популярных сборщиков для JavaScript (найдите готовый типовой шаблон конфигурации для быстрого старта)
  • ESLint — помогает раньше находить синтаксические и стилистические ошибки в коде. Третья важная вещь в процессе разработки, которая наравне с кодревью и TDD помогает уменьшить количество ошибок.
  • Ramda — главным образом для использования линз и трансдьюсеров
  • Node & Express
  • RxJS — observables для JavaScript. В последнее время я чаще использую трансдьюсеры. Не забывайте использовать patch imports, чтобы избежать раздувания бандла.

TypeScript тоже хорошо шёл в 2017, однако я видел ситуации, в которых он больше мешал, чем помогал. Его основными недостатками являются чрезмерная зависимость от аннотаций в противовес автоматическому выводу типов и невозможность типизации функций высшего порядка без костылей. Я решил попробовать дать ему небольшой испытательный срок на какое-то время, и вот во что вылился этот опыт: The Shocking Secret About Static Types и You Might Not Need TypeScript (or Static Types). Flow имеет те же проблемы, и его инструменты не так хороши, как у TypeScript.

На какие технологии еще стоит обратить внимание в 2018?

Все нижеперечисленные R&D-области создают реальные рабочие места в 2018 году:

  • Прогрессивные веб-приложения (PWA)
  • Блокчейн и финтех
  • AR/VR — Hololens, Meta и ODG уже на рынке. Выход ODG R-9 был запланирован на 2017, но переносится на 2018. Я думаю, что AR изменит человеческий опыт так же сильно, как некогда изобретение телефона.
  • 3D-печать
  • Искусственный интеллект (Artificial Intelligence)
  • Дроны

Квантовые вычисления также готовы изменить мир, но, скорее всего, это произойдет не раньше 2019 года или даже позже. Квантовые компьютеры уже есть, но пока что они не слишком много умеют, поэтому большинству разработчиков еще рано даже начинать экспериментировать в этом направлении. Совсем недавно Microsoft анонсировала язык программирования Q# для квантовых вычислений. Тем временем, IBM и Google активно инвестируют в свой собственный зарождающийся рынок облачных квантовых вычислений.

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

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

Вашей команде нужно обучение React?

DevAnywhere предлагает программу дистанционного обучения, которую дополняет работа с личным наставником (1:1 mentorship). Мы обучаем функциональному программированию и принципам композиции (software composition) — оба этих аспекта являются критически важными, если вы хотите максимально эффективно использовать React.

  • Живые лекции
  • Гибкий график
  • Программа менторства 1 : 1
  • Создаем реальные приложения
DevAnywhere
https://devanywhere.io/
Эрик Эллиот является автором “Разработка JavaScript приложений” (O’Reilly), а также сооснователем DevAnywhere.io. Он внес вклад в разработку Adobe Systems, Zumba Fitness, The Wall Street Journal, ESPN, BBC, а также проектов для таких популярных исполнителей, как Usher, Frank Ocean, Metallica и многих других.