Node

Один из самых частых вопросов, которые я слышу от своих учеников, звучит так: «Почему вы преподаете нам Node.js, а не PHP?» Ответ «Поверьте, я знаю, потому что работаю в этой индустрии» почему-то оказывается недостаточно убедительным. Потому я решил изложить здесь причины того, почему я преподаю именно Node.js и почему вы должны забыть о PHP, если хотите стать востребованным веб-разработчиком в будущем. Эти два языка я использую в качестве примера. В самой же статье я покажу вам способ выбрать наиболее перспективные языки программирования, фреймворки и библиотеки.

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

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

Причем я не предлагаю выбирать самый легкий путь. Речь идет о том, как выбрать инструменты, которые будут актуальны в течение долгих лет и позволят мне сохранять свою конкурентноспособность на рынке и в дальнейшем позволят развить навыки до уровня руководителя — senior developer.

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

В этой статье нам предстоит познакомиться с двумя типами исследований: анализ рынка труда и анализ технологий. Итак, поехали!

Node.js vs PHP — анализ рынка труда

Материалами исследования послужили статистика  LinkedIn и данные масштабного опроса разработчиков, которые провел сайт Stackoverflow в 2017 году. Также следует отметить, что мы фокусировались только на технологиях, имеющих непосредственное отношение к веб-разработке.

Популярность:

Уже пятый год подряд JavaScript становится самым часто используемым языком программирования. А Python впервые за пять лет обогнал PHP по популярности. А какое же место отведено Node.js, спросите вы? Node.js — это среда выполнения javascript. Проще говоря, Node.js — это серверный Javascript. Так что будем считать, что говоря «Node.js» подразумеваем «Javascript».

Топ самых используемых языков программирования
Топ самых используемых фреймворков, библиотек и других технологий

Как видим на графиках, Javascript и Node.js лидируют в рейтинге наиболее часто используемых языков программирования и технологий, а PHP им существенно проигрывает.

В течение 5 лет сайт Stackoverflow собирал данные для опроса разработчиков, из которого следует, что такие языки, как Javascript и Node.js становятся все более популярными, а использование таких языков, как PHP, сокращается:

График изменения популярности технологий с 2013 по 2017

React был назван самым любимым языком разработчиков, однако сразу за ним на втором месте — Node.js, который, помимо этого, стал и той технологией, которую захотело освоить большинство разработчиков (категория wanted).

Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Любимые» (Loved)
Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Хотят изучить» (Wanted)

Зарплаты и возможности

На приведенном ниже графике отображается связь оплаты труда и опыта работы. Над синей линии этого графика указаны языки программирования, заработная плата разработки на которых напрямую зависит от опыта разработчика — это Go, Rust и Clojure. Однако разработчикам, использующим языки под синей линией, например PHP, платят меньше, даже учитывая многолетний опыт их работы. Размер кругов на этой диаграмме показывает, сколько разработчиков использует этот язык по сравнению с другими. При этом график показывает печальную тенденцию — число лет в профессии практически не влияет на уровень зарплаты PHP-разработчиков.

Связь оплаты труда и опыта разработки

На сайте LinkedIn в разделе Jobs вы можете увидеть, что во всем мире вакансий для разработчиков Node.js больше, чем вакансий для PHP-разработчиков, причем существенно — разница достигает 10 000 позиций. Это несмотря на то, что Node.js является гораздо более молодой технологией по сравнению с PHP и тем фактом, что именно на PHP написана CMS (система управления контентом) WordPress, на которой работает 30% всех веб-сайтов в Интернете.


Ну и наконец средняя оплата труда по разным регионам, в данном случае данные приводятся для Америки, потому что в статистику по миру PHP попасть не удалось:

Топ самых высокооплачиваемых технологий в Америке
Топ самых высокооплачиваемых технологий в Великобритании
Топ самых высокооплачиваемых технологий в Германии
Топ самых высокооплачиваемых технологий во Франции

Опять же, у нас нет цели мы здесь не избиваем PHP. Мы просто смотрим на цифры, чтобы выбрать язык для изучения. PHP явно котируется на рынке труда значительно хуже других технологий, таких как Javascript и Node.js.

ОБНОВЛЕНИЕ: с момента выхода публикации stackoverflow разместил данные опроса за опроса разработчиков за 2018 год. PHP продолжает терять свои позиции.


Вердикт

Популярность PHP падает, в то время как рынке растет спрос на Node.js и интерес к нему у разработчиков. В общем и целом, зарплаты PHP-разработчиков существенно ниже чем у других программистов, и эта тенденция только усиливается.


 

Node.js vs PHP — анализ технологий

Теперь давайте обсудим преимущества и недостатки каждой из технологий по отдельности.

Преимущества Node.js

  • Идеально подходит для приложений, работа которых строится на непрерывном взаимодействии клиента и сервера — к примеру, чаты, которые очень просто делать на socket.io. Благодаря этой же особенности Node.js его удобно использовать для обработки данных, получаемых от устройств IoT (Internet of Things) и одностраничных сайтов Single Page Applications (SPAs) -обе эти области довольно активно развиваются.
  • Встроенная возможность сериализации и десериализации JSON, а значит, легкая и простая работа с AJAX.
  • Отлично подходит для приложений, управляемых событиями, которые не имеют блокировки ввода / вывода (ввод-вывод — это связь между системой обработки информации — компьютером, и внешним мир, представленным человеком или другими системами обработки информации, такими как базы данных.
  • Учишь Javascript — значит учишь и Node.js. И не нужно тратить силы на изучение другого серверного языка типа PHP. Это значит, что можно направить все силы на доскональное изучение и совершенствование одного единственного языка — Javascript — и овладеть им в совершенстве. Таким образом, получаем два в одном — на одном языке можно будет писать и бэкенд, и фронтенд части приложений — то есть по сути, реализовать все приложение целиком.
  • Многие известные фреймворки для создания клиентской части веб-приложений, такие как React, Vue и Angular написаны на JavaScript, который также является главным языком современных браузеров. Использование Node.js на стороне сервера позволяет ощутить все преимущества единого языка программирования для всего стека технологий приложения. Такие приложения легче поддерживать, потому что все разработчики в такой команде работают с одними и теми же структурами данных, функциями и стандартами одного языка — JavaScript.
  • Однопотоковая система событий легко справляется с высокими нагрузками, такими как большое количество запросов от браузеров.
  • На NPM существует огромное число сторонних библиотек и модулей как для клиентской, так и для серверной разработки, а также средств для работы с командной строкой. И их число постоянно растет. Кроме того, большинство из них размещены в GitHub, где есть возможность оперативно сообщить о проблеме или самостоятельно форкнуть код для его настройки под свой проект.
  • Он стал стандартной средой, в которой можно запускать инструменты, связанные как непосредственно с Javascript, так и с веб-разработкой в целом, включая планировщики задач, инструменты сжатия, форматирования кода и аналитики, линтеры, препроцессоры и системы сборки.
  • По умолчанию поддерживается множество новых API и служб, таких как AWS Lambda.
  • Можно пользоваться всей мощью движка V8, который является JavaScript-интерпретатором браузера Google, и самого Node.js. Поскольку инженеры Google постоянно улучшают производительность V8, значит они тем самым способствуют и развитию Node.js.

Недостатки Node.js:

  • Пакеты NPM, упомянутые выше, могут раздувать код, быть небезопасными, а также трудно выбрать лучший модуль в виду их разнообразия (просмотр числа загрузок и статистики GitHub — один из способов решить эту задачу);
  • Многообразие вариантов сборки сервера на Node.js и огромное число npm-модулей ставит перед новичками проблему выбора лучших модулей и пакетов.
  • Не подходит для серверов, которые требуют высокой производительности процессора, например, для выполнения таких сложных алгоритмов как обработка изображений или сортировка. Как правило, всё, что не является вводом-выводом данных, нагружает процессор. В этом случае многопоточная серверная среда станет лучшим вариантом, чем Node.js (решение: если необходимо, вы можете передать части кода, потребляющие мощности CPU, в программу, написанную на языке C).
  • Node не использует все ядра базовой системы или машины. Вы должны сами писать логику для использования многоядерных процессоров. Это может быть достигнуто многими способами, но для этого потребуется дополнительная работы (настоящие профессионалы могут самостоятельно максимизировать использование ЦП в системе).

Вердикт для Node.js

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

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

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

Преимущества PHP:

  • Мощное сообщество, сформированное за долгие за годы существования языка.
  • На PHP написано немало известных платформ для создания сайтов (i.e. WordPress, Joomla, Drupal), а также систем управления контентом — CMS (Content Management Systems), самой популярной из которых является WordPress. Они позволяют за считанные минуты создать сайт или интернет-магазин, оформить и настроить которые сможет даже непрофессионал.
  • Легко настроить и поднять сервер, сделать это могут даже непрофессионалы, не знакомые с SSH и администрированием Linux, чем и объясняется повышенный спрос у частных лиц и небольших компаний. Многие PHP-приложения (например, cPanel) предлагаются по умолчанию простейшими платформами хостинга, и установить их можно установить одним щелчком мыши.
  • В отличие от других языков программирования общего назначения, PHP был разработан специально для интернета. PHP предлагает отличное решение на стороне сервера, где нет необходимости связываться с JavaScript в браузере, поскольку все страницы могут быть легко сгенерированы и отображены на сервере. Это полезно, если вы хотите избежать слишком большого количества кода на стороне клиента. Node.js так тоже умеет, но сделать это далеко не так просто.
  • Новая версия PHP — PHP7 и HHVM (виртуальная машина от Facebook) улучшили производительность PHP.

Недостатки PHP:

  • PHP используется только для разработки серверной части приложений. Это означает, что вам все равно нужно изучить Javascript, если вы хотите работать на стороне клиента или стать fullstack-разработчиком.
  • Использование PHP с его тяжелым серверным рендерингом и многочисленными запросами к серверу для создания и отрисовки страниц — это далеко не самое лучшее решение для лендингов.
  • Каждый активный клиент (браузер) использует один серверный процесс, что не подходит для приложений с большим числом подключений.
  • Встроенная поддержка PHP для новых API и сервисов, таких как AWS Lambda, ограничена по сравнению с Node.js.
  • Приложения на PHP строятся по классической модели клиент-сервер, где каждый запрос страницы инициирует запуск приложение, соединение с базой данных и рендеринг HTML. Это делает PHP медленнее, когда вы перемещаетесь по веб-сайту по сравнению с приложением на Node.js, которое работает постоянно и запускает только один раз в самом начале. Благодаря этому Node.js больше подходит для нового направления, в которым развивается интернет — HTML5, AJAX и WebSockets.

Вердикт языку PHP:

PHP проще выучить в связи с обширностью сформировавшегся вокруг него сообщества. Это хороший выбор для стандартизованного решения, такого как блог или новостной сайт. Он обладает мощью WordPress, который является самой популярной CMS (Content Management System), и которая позволяет вам создавать настраиваемые блоги, используя минимальное число кода. Однако простота в этом случае достигается в ущерб качеству. Чем проще научиться технологии, тем легче для кого-то войти в отрасль и тем выше конкуренция, а значит, тем меньшую придется брать плату за свои услуги.

Заключение

PHP был одним из лучших языков в эпоху Web 1.0, когда был популярен WordPress. Node.js был запущен в 2009 году и технически является не языком, а средой выполнения для Javascript. Он является фаворитом более молодого поколения веб-разработчиков и лучше подходит для создания сложных I/O — приложений, основанных на событиях, оперирующих большими объемами данных, — то есть именно тех приложений, с которыми вы сталкиваетесь в век Web 2.0.

В частности, асинхронная и основанная на событиях архитектура Node.js отлично подходит для приложений, работающих в режиме реального времени, таких как мессенджеры и чаты, а также для приложений совместного использования, в которых одновременно выполняется много запросов и идет постоянный обмен данными между клиентом и сервером. Не может жить без WordPress? Ну, у Node.js есть своя собственная прекрасную CMS, которая называется  Keystone.js.

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

Я выбираю Node.js.

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

В своем курсе я преподаю материал, который актуален сегодня для профессиональной карьеры в этой области, а также инструменты, используемые некоторыми крупнейшими компаниями, такими как Facebook, Netflix, Google и Amazon. Если вы хотите стать fullstack-разработчиком в 2018 году, я рекомендую вам изучить:

HTML5
CSS3
Javascript
React.js
Node.js + Express.js
PostgreSQL
и некоторые другие технологии…

Перевод статьи Andrei Neagoie: Want to be a Web Developer? Learn Node.js not PHP

Предыдущая статьяВам не нужен стендап
Следующая статьяМой опыт спустя год работы с React