Что можно делать на node js
Зачем изучать Node.js, или О перспективах бэкенда на JavaScript
В этой статье идёт речь о перспективах Node.js разработчика на рынке труда, а также об актуальности бэкенда на JavaScript. Вы узнаете, почему стоит изучать Node.js, какое будущее у этой технологии, сколько платят программистам с соответствующей специализацией. Известные в отрасли эксперты делятся мнением о бэкенде на JS.
Краткая теория: что такое Node.js и где применяется эта технология
Node.js — среда выполнения кода JavaScript вне браузера. Эта платформа позволяет писать серверный код для динамических веб-страниц и веб-приложений, а также для программ командной строки. С помощью Node.js реализуется парадигма «JavaScript для всего». Она предполагает использование одного языка программирования для разработки веб-приложений вместо применения разных языков для работы над фронтендом и бэкендом.
В разговорной речи программисты используют сленговое слово «нода». Например, «бэкенд пишем на ноде».
Node.js — не отдельный язык программирования, а платформа для использования JavaScript на стороне сервера. Если говорить о языке, то как для фронденда, так и для бэкенда используется один и тот же JavaScript. Разница только в наборе API, которые используют фронтендеры и бэкендеры.
Браузерный JavaScript использует Web API, которые обеспечивают доступ к DOM и пользовательскому интерфейсу страниц и веб-приложений. Серверный JavaScript использует API, обеспечивающие доступ к файловой системе приложений, http-запросам, потокам.
То есть Node.js — это технология для использования JS на бэкенде. С особенностями и перспективами развития языка JavaScript можно ознакомиться в соответствующей статье, а здесь речь идёт об одной из технологий данного языка.
Экскурс в историю: с 2009 до 2019
Платформа Node.js была представлена в 2009 году. Её создал инженер Райан Дал, а спонсором разработки выступила компания Joyent. Компания известна поддержкой опенсорсных проектов, включая Node.js, Illumos, SmartOS.
Райан Дал использовал для создания Node.js движок V8. Платформа реализована с низкоуровневой неблокирующей моделью ввода/вывода, которая построена на событийно-ориентированной модели.
В конце 2014 года инженер Фёдор Индутный, который входил в основную команду разработчиков платформы, создал популярный форк Node.js — io.js. Форк появился из-за недовольства разработчиков политикой компании Joyent.
Платформа io.js превосходила Node.js в производительности. Но создатели форка уже в 2015 году решили воссоединиться с Node.js, чтобы влиять на развитие основной платформы. В настоящее время разработкой формально руководит Node.js Foundation.
Сфера применения: где используют Node.js
Как отмечалось выше, Node.js применяется для бэкенд-разработки на JavaScript. Если в браузере JavaScript тотально доминирует, и конкурентов этого языка на фронтенде не видно даже на горизонте, то в бэкенд-разработке ситуация другая. Здесь JS конкурирует с PHP, Python и другими языками.
Выбор серверного JavaScript для бэкенда обеспечивает проекту ряд преимуществ:
Node.js хорошо подходит для разработки RTA — веб-приложений, реагирующих на действия пользователя в режиме реального времени. Например, это может быть онлайн-редактор типа Google Docs, который позволяет работать над одним документом нескольким пользователям одновременно.
Node.js легко обрабатывает большое количество запросов одновременно и обеспечивает быстродействие приложения. Поэтому серверный JavaScript часто используют для создания SPA — одностраничных веб-приложений, в которых рендеринг выполняется на стороне клиента. Node.js на бэкенде используют Netflix, Uber, eBay, Groupon, Yahoo и другие известные организации и проекты.
Node.js vs PHP и Python
О рейтингах PHP мы говорили в обзорной статье по этому языку. А в этом разделе сравним популярность Node.js с PHP и Python, которые часто применяются на бэкенде.
Node.js уступает PHP в популярности. Достаточно вспомнить, что на PHP написаны самые популярные системы управления контентом, включая WordPress, Joomla!, Drupal. Только на WordPress работает около трети всех сайтов в интернете.
Инфраструктура PHP скорее превосходит инфраструктуру Node.js. Например, разработчики на PHP могут выбирать между несколькими достойными веб-фреймворками.
Python считается одним из лучших языков для изучения программирования. Но главная разница между «пайтоном» и Node.js заключается в сферах применения. Python более универсальный: его используют как в веб-разработке, так и в Data Science, Machine Learning и других сферах. Node.js скорее «заточен» под веб-разработку. Благодаря Electron эта технология также применяется для разработки десктопных приложений.
Тем не менее инфраструктура Node.js зрелая, и у разработчиков есть качественные и удобные инструменты. Например, выше упоминались пакетный менеджер npm и фреймворк Electron для создания десктопных приложений. Также стоит упомянуть фреймворки Express и Nest.js, предназначенные для разработки веб-приложений.
Получите востребованную профессию Node.js-программист В процессе обучения вы получите фундаментальные знания: научитесь программировать на JavaScript, использовать современные инструменты для создания бэкенд-приложений, включая Express.js, Koa, PostgreSQL. Первые курсы в профессии доступны бесплатно. Регистрируйтесь и начинайте учиться!
Зарплата Node.js-разработчика: сколько платят и есть ли вакансии
Спрос на Node.js-разработчиков устойчиво растёт. Обратите внимание на динамику количества вакансий по соответствующей специализации на сайте jobs.dou.ua.
Количество вакансий растёт
По данным сервиса «Хабр Карьера» на первую половину 2020 года, медианная зарплата JavaScript разработчика составляет 105 000 рублей в месяц. Нужно понимать, что в эту статистику входят зарплаты как фронтенд-, так и бэкенд-разработчиков на JS. Разработчики на Python зарабатывают 120 000 рублей в месяц, а PHP-программисты — 110 000 рублей в месяц.
По информации карьерного портала Trud, в октябре 2020 года JavaScript-разработчики зарабатывали в среднем 87 680 рублей. А агентство NewHR подсчитало, что в 2020 году вилка зарплат программиста JavaScript уровня middle в Москве составляет от 170 000 до 220 000 рублей.
Перспективы Node.js: комментарии экспертов
О перспективах бэкенда на JavaScript рассказывают известные в отрасли специалисты.
Игорь Камышев: судя по тенденциям, Node.js будет становиться только популярнее
Игорь Камышев, разработчик веб-приложений и техлид в «Самокате». Разрабатывает экосистему библиотек для Node.js Solid Soda. Автор телеграм-канала kamyshev.code
— По вашему мнению, почему стоит изучать Node.js?
— Node.js — необычная технология. Современная экосистема JavaScript создавалась непрограммистами, из-за этого в ней очень много свежих и необычных идей. Начать писать приложения на Node.js проще, чем на Java, Ruby или PHP. Плюс, это достаточно зрелая платформа, многие проблемы уже решены, а лучшие подходы известны и описаны.
— Какие перспективы у бэкенд JavaScript по сравнению с другими языками и технологиями?
— Любой бэкенд может быть написан на любом языке. Вопрос только в скорости разработки и надежности этого решения. Приложения для Node.js можно быстро писать, но для обеспечения надежности нужно постараться. Важно понимать, что JavaScript — это язык со слабой динамической типизацией, чтобы это компенсировать нужно заранее продумать архитектуру приложения и потратить больше времени на написание тестов. С другой стороны, можно взять TypeScript и получить гарантию типобезопасности (не полную, конечно, но лучше чем ничего).
На мой взгляд, Node.js подойдет для очень широкого класса бэкендов. Начиная от интернет-магазинов и заканчивая образовательными сервисами.
— Будет ли бэкенд на JS востребован в будущем?
— Судя по тенденциям роста, Node.js будет становиться только популярнее. Сложно оценить, когда этот рост прекратится, но сейчас — это факт. Каковы перспективы Node.js-разработчика на рынке труда?
И в России и зарубежом вакансий Node.js-разработчиков достаточно. Зарплаты почти не отличаются от других технологий. Важно понимать, что часто Node.js-разработчики совмещают свою деятельность с фронтенд разработкой в той или иной степени.
— Сколько времени нужно учиться бэкенд-разработке на JS с нуля до джуниора?
— Node.js — супер-минималистичная платформа. По сути, чтобы разобраться с ней, достаточно выучить JavaScript и прочитать 10 страниц документации Node.js. Я полагаю, если вы никогда прежде не сталкивались в программированием, то за 5-6 месяцев можно освоить все что необходимо и стать полноправным членом команды.
Андрей Мелихов: мне кажется, рынок сейчас остро нуждается в грамотных сильных разработчиках с бэкграундом из других языков
Андрей Мелихов, программист-эксперт в компании «Яндекс.Деньги», ведущий подкаста «Девшахта»
— Почему стоит изучать Node.js и обратить внимание на бэкенд-JS?
— Как бы не хотели многие, сайты всё ещё требуют серверного рендеринга. Это не только SEO-задачи, но и мобильный трафик. Если мы не хотим усложнять себе жизнь и используем один и тот же код на сервере и клиенте, то наш практически единственный выбор — это JavaScript. Конечно, есть и различная экзотика, компилируемая в JS, но, за исключением TypeScript, всё это пока достаточно сложно воспринимать серьёзно. Итак, нам нужен JS на сервере, и тут основной игрок — Node.js. Да, стоит напомнить, что есть и другие решения, позволяющие исполнять JS за пределами браузера, но на фоне Node.js их доля незаметна.
Это первое. Второе — в какой-то момент приходит необходимость работать с данными, хранимыми на сервере. Мне кажется, что любой веб-разработчик хотя бы на базовом уровне должен понимать, как это всё устроено. И здесь Node.js отличный выбор, он позволяет создать полноценный веб-сервер с минимальным порогом вхождения.
Третье. Несмотря на все насмешки и недоверие, Node.js дорос до состояния практически взрослого инструмента и продолжает развиваться. Сегодня мы наконец-то имеем приличный инструментарий, статическую типизацию и даже один хороший фреймворк (Nest). Можно смело рекомендовать Node.js в качестве серверного решения для больших долгоживущих нагруженных проектов.
— Какие перспективы у языка и технологии?
— Если говорить именно о языке, то мы видим, что JS постепенно становится целью сборки, а не языком, на котором пишут код. И в случае Node.js главная причина тут TypeScript, так как в отличие от браузера нам не нужно транспилировать JS в JS — мы полностью контролируем среду исполнения. Однако те возможности, которые нам даёт TypeScript, гораздо больше, чем просто синтаксический сахар.
И если взять современные инструменты, такие как Nest, то они эти возможности активно используют. Современный проект на Node.js — это статическая типизация, Dependency Injection, паттерны проектирования. Возможно, за этим теряется простота и лёгкость JavaScript, но вместо этого приходит надёжность и упрощение разработки и поддержки в больших проектах.
— Какие перспективы у разработчиков на Node.js? Будут ли они востребованы, какие задачи будут решать?
— Неожиданно, но JavaScript стал языком для всего. Сервер, браузер, мобильные телефоны, десктопные приложения, IoT — везде JavaScript неплохо себя чувствует. Совершенно новым направлением оказались AWS-лямбды (serverless), в которых JavaScript тоже отлично себя проявил. Так что да, разработчики будут востребованы. Но если говорить о сервере, то мне кажется, рынок сейчас остро нуждается в грамотных сильных разработчиках с бэкграундом из других языков.
— Дайте совет новичкам: с чего начать, что изучать, на что обратить внимание?
— Начать стоит с изучения UNIX и в целом основ работы компьютерных сетей. После этого можно попробовать написать простое приложение на Node.js, лучше без фреймворков (в том числе без Express). Поняв, что такое TCP/UDP и HTTP/HTTPS, можно уже попробовать написать полноценный бэкенд на Express, отдающий данные по AJAX и шаблонизирующий HTML. Также, конечно, придётся разобраться с Nginx или HAProxy, понять, что такое балансировка. Очень неплохо хотя бы на минимальном уровне понять, что такое Docker и зачем он нужен.
Следующим шагом я бы порекомендовал погрузиться в TypeScript и попробовать Nest. Неплохим вариантом является изучение связки Angular + Nest, так как Nest создан под сильным влиянием Angular и реализует сходные концепции.
Строго рекомендую книгу Node.js Design Patterns от Mario Casciaro.
Алексей Золотых: на рынке труда не хватает разработчиков на Node.js
Алексей Золотых, тимлид в Infobib, соорганизатор конференции HolyJS
— По вашему мнению, почему стоит изучать Node.js?
— В последнее время Node.js становится все более взрослой технологией. Появляются серьезные инструменты для отладки, трейсинга и выявления других проблем. В сообществе накапливается экспертиза. Движение в сторону микросервисов нивелирует недостатки в отсутствие статической типизации путем уменьшения сложности. И да, для больших проектов у нас все еще есть TypeScript.
Думаю, что у Node.js точно есть будущее, и точно есть куда расти. Вместе с тем порог входа очень низкий. Это позволяет не думать про технологии и сложность, а просто сосредоточиться на продукте.
— Какие перспективы у бэкенд JavaScript по сравнению с другими языками и технологиями?
— Я изначально против привязки к технологиям. Хороший инженер должен выбирать технологию под задачу а не пытаться быть парнем с молотком, для которого все вокруг гвозди. На данный момент у ноды приличная скорость в некоторых аспектах, низкий порог входа, высокая популярность и куча библиотек для всего. С другой стороны, не решены многие вопросы. Но думаю, что это звучит как вызов 😉
— Будет ли бэкенд на JS востребован в будущем?
— Сложный вопрос. Думаю, что в ближайшее пару-тройку лет все будет на том же уровне. Но путь к чем-то другому явно будет эволюционным и более или менее плавным. Хороший инженер нигде не пропадет.
— Каковы перспективы Node.js-разработчика на рынке труда?
— Очень хорошие. Сейчас их не хватает.
— Сколько времени нужно учиться бэкенд-разработке на JS с нуля до джуниора?
— Все индивидуально. Если вы любопытны и въедливы, то думаю, что не менее полугода.
Заключение
Node.js — платформа для запуска кода JavaScript за пределами браузера. Эту технологию используют преимущественно для бэкенд-разработки на JavaScript. Разработчиков на Node.js на рынке не хватает. По мере роста популярности этой технологии дефицит специалистов будет расти.
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Лучшие проекты на Node.js для начинающих
Хочешь проверить свои знания по JS?
Подпишись на наш канал с тестами по JS в Telegram!
Node.js — платформа с открытым исходным кодом для создания серверных или сетевых приложений и динамических веб-сайтов.
Node.js полезен в крупномасштабной и быстрой разработке. Он также широко применяется в бэкенд-разработке. Модель, которую он использует, позволяет создавать легкие и масштабируемые веб-приложения.
Здесь мы перечислим несколько идей проектов на Node.js для начинающих, которые помогут вам собрать достойное портфолио и усовершенствовать ваши навыки разработки на этом фреймворке.
Перед тем, как вы приступите к написанию кода и построению ваших первых проектов, обязательно заведите репозиторий, на котором они все будут храниться. Это позволит вам возвращаться к проектам в дальнейшем.
Вы также можете освоить дополнительные фреймворки, такие как Nest.js и Express.js. Это упростит и повысит эффективность разработки на Node.js.
1. Мессенджер
Проект для начинающих, который познакомит вас с основными аспектами разработки на Node.js. Чаты – это отличная возможность разобраться с системами, которые должны работать в режиме реального времени.
В первую очередь следует разделить приложение на 2 части: клиентскую и серверную. Благодаря веб-сокетам вы сможете постоянно обмениваться данными с клиентом. Этот процесс также называют рукопожатием.
Клиент регулярно шлёт HTTP-запросы на сервер. Это приложение будет легко написать, если вы знакомы с socket.io и веб-сокетами хотя бы на базовом уровне.
Идеи усовершенствования вашего приложения:
2. Каталог книг
Это самый базовый проект, который вы можете построить на Node.js/Express.js или Nest.js/REST API. Работая над этим проектом, вы научитесь создавать конечные точки и использовать 4 базовых метода: GET, POST, PUT и DELETE.
GET можно использовать, чтобы получить все книги, или одну по id. POST понадобится для добавления новой книги в каталог, PUT – для редактирования записи с существующей книгой, а DELETE – очевидно, для удаления.
Этот тип приложения не потребует использования баз данных. Для первого проекта пойдёт и JSON.
3. Платформа для трансляции видео
Если вам хочется чего-то посложнее, этот проект – отличный способ заинтересовать работодателей.
Чтобы видео не отправлялось на фронтенд всё сразу, вам нужно передавать его по частям. На фронтенде вам также придётся поработать с HTML5 и JavaScript — чтобы создать кнопки для взаимодействия с видео.
4. Почтовый клиент
Следующая идея проекта – приложение для отсылки электронных писем. Работая над этим проектом, вы научитесь планировать и отправлять электронные письма на Node.js. Также можно добавить фронтенд приложения (используйте простой html).
Отправлять письма легко и быстро вам поможет плагин Nodemailer. Это наиболее простой способ отправки писем, а кроме того, этот плагин имеет хорошую документацию.
5. Приложение-портфолио
Программисты-новички могут начать с создания приложения-портфолио. Это действительно хорошая идея. Она предполагает сосредоточенность на внешнем виде проекта, а значит, можно вволю поиграться со стилями.
Продумайте архитектуру проекта. Ваше приложение должно получиться легковесным и простым в использовании. Также вам понадобится поработать с маршрутизацией.
В Node.js для каждого маршрута предусмотрен набор контроллеров для управления представлениями. Программисты оценят удобство: не нужно каждый раз заново писать header и footer.
6. Веб-безопасность
Если вы хотите заниматься разработкой на Node профессионально, этим проектом стоит заняться.
В образовательных целях вы можете создать фейковую страницу входа на Facebook, чтобы заполучить пароли своих друзей и семьи (если у вас есть LAN).
Все станет гораздо интереснее, если разместите эту страницу онлайн. Так вы сможете добыть пароль практически каждого…
7. Список задач
Создание таких приложений облегчает освоение азов программирования. Ваше приложение может представлять собой просто пустую страницу, на которой пользователь будет записывать задачи, которые необходимо выполнить в течение дня.
Вы можете хранить завершённые и новые задачи в отдельных массивах. Поскольку приложение очень простое, для придания ему чистого и красивого вида потребуется минимум CSS.
Для запуска приложения используйте Express – один из самых минималистичных фреймворков для Node.js-приложений.
8. Система пользователей
Ещё один простой проект, с которым можно отточить навыки в разработке на Node.js.
Вы можете построить базовую систему пользователей и научиться создавать базы данных, осуществлять миграции пользователей, создавать конечные точки для входа в систему и получать данные от пользователя. Здесь пригодится умение генерировать JWT-токены.
Заключение
Надеемся, что эта статья вдохновит вас на создание прекрасных приложений. Проект в нашем списке довольно просты, но новичкам в программировании они могут показаться сложными. В этом нет ничего страшного!
19 идей для Node.js-разработчиков, которые стремятся вырасти над собой в 2019 году
Автор материала, перевод которого мы публикуем, собрал 19 идей, которые могут оказаться полезными для тех Node.js-разработчиков, которые хотят повысить свой профессиональный уровень в 2019 году. Мир JavaScript огромен, поэтому освоить всё то, о чём пойдёт здесь речь, попросту нереально. Вряд ли найдётся кто-то, кто владеет всем этим в совершенстве. Однако кое-что в этом обзоре вполне может пригодиться именно вам.
1. Подумайте о типизации. Обратите внимание на TypeScript
Доказано, что программирование на JavaScript, с использованием применяемого в нём подхода к типизации, ведёт к снижению производительности труда и к появлению ошибок. Это не означает, что нужно стремиться к тому, чтобы весь код был бы строго типизированным. Скорее речь идёт о том, что хорошо было бы, при разработке на JavaScript, выбрать некий подход к работе с типами и придерживаться его. Такие подходы различаются, кроме прочего, уровнем ограничений, связанных с типами данных, накладываемых на код. Например, это может быть что-то совсем простое, нечто вроде организации проверок с использованием пакета jsonschema (или joi). Если вы чувствуете, что нуждаетесь в более строгом контроле типов — можете рассмотреть вариант использования аннотаций типов в обычном JS-коде (тут вам поможет flow от Facebook). А если вы готовы к написанию практически полностью типизированного кода — обратите внимание на TypeScript.
Надо отметить, что в 2018 году TypeScript обрёл серьёзную популярность, кроме того, возникает такое ощущение, что есть все предпосылки к тому, чтобы он прочно обосновался в среде Node.js. Если вы серьёзно посматриваете в сторону TypeScript — вы должны спросить себя о том, думаете ли вы лишь о типизации, или также о других возможностях языка. Дело тут в том, что работа с чем-то вроде интерфейсов и абстрактных классов будет означать, что вы попадёте в среду, в которую, думая преимущественно о типизации, вы вряд ли собирались попасть.
2. Обратите внимание на возможности линтеров
Линтеры в наши дни воспринимаются как нечто само собой разумеющееся. После простой настройки в вашем распоряжении оказывается инструмент, помогающий находить в коде ошибки. Прошли те времена, когда линтинг кода означал преимущественно контроль его оформления (чего-то вроде наличия или отсутствия точек с запятой). Теперь линтеры могут выявлять серьёзные проблемы — наподобие ошибок, которые не обрабатываются должным образом, промисов, которые никогда не разрешаются, и других подобных неприятностей, которые никто не станет сознательно включать в свой код. Поэтому если вы ещё не пользуетесь линтером — сейчас самое время это сделать, не забыв о его вдумчивой настройке. Вот, например, плагин для ESLint, eslint-plugin-chai-expect, который может выявлять ошибочно составленные тесты. Вот плагин eslint-plugin-promise, обнаруживающий неразрешаемые промисы (код с такими промисами, без видимых причин, попросту останавливается). С помощью плагина eslint-plugin-security можно находить в коде небезопасные регулярные выражения, которые могут быть использованы злоумышленником для проведения DOS-атак.
3. Углубите свои знания об архитектуре программных проектов, переняв кое-что из мира Java и забыв многое из мира Ruby
Вот некоторые рекомендации для тех, кого заботит архитектура Node.js-проектов:
4. Подумайте о том, как использовать новое Node.js-API async_hooks при работе с асинхронным кодом
Однопоточная модель выполнения кода, используемая в JavaScript, имеет один серьёзный недостаток — асинхронные операции, например — запросы, теряют контекст. Он не сохраняется в течение жизненного цикла запросов, так как в ходе их выполнения задействуются асинхронные операции. Почему это плохо? Например, часто разработчики стремятся включать в записи журналов уникальные идентификаторы запросов, что, при анализе таких записей, позволяет выделить те из них, которые относятся к одному и тому же запросу. Сегодня, в 2018 году, сделать это не так уж и легко. В будущем же году нас ждёт кое-что новое, а именно, речь идёт об асинхронных хуках, API async_hooks. Нельзя сказать, что это совершенно новая возможность, речь идёт о том, что она скоро должна выйти из экспериментального режима. Проще говоря, асинхронные хуки позволяют разработчику выполнять собственный код в определённые моменты жизненного цикла асинхронной операции. Учитывая это, можно согласовывать действия, выполняемые асинхронным кодом и сохранять контекст. Эта возможность закладывает основу для разработки пакетов, которые выведут на новый уровень возможности Node.js по отслеживанию выполнения асинхронных операций и по работе с контекстом.
Например, пакет cls-hooked позволяет организовать использование переменных и контекста в течение всего жизненного цикла асинхронной операции. Пакет jaeger-client позволяет визуализировать процесс прохождение запроса по системам, даже по микросервисам и серверам (тут реализован стандарт Javascript OpenTracing API 1.0).
Вот материал, в котором можно найти подробности об использовании API async_hooks.
Здесь мы используем понятия FaaS (Function as a Service, функция как услуга) и «бессерверные технологии» как синонимы, хотя они означают не одно и то же. В частности, ниже речь пойдёт об облачных FaaS-услугах.
Изначально технология FaaS предназначалась для разработки микрозадач, а не для создания полноценных «микросервисных» приложений. Рост популярности FaaS-платформ привёл к росту интереса к ним поставщиков облачных услуг, FaaS-платформы обросли новыми функциями. Как результат, хотя это и неожиданно, возникает такое ощущение, что в 2019 году FaaS-платформы могут стать основой для серьёзных проектов. Могут ли эти платформы конкурировать с Kubernetes и использоваться для хостинга больших приложений? Некоторые видят в бессерверных вычислениях и FaaS технологии, которые представляют собой нечто совершенно новое, но на практике каждому создателю облачного приложения придётся в 2019 году делать выбор между тремя технологиями. Этот выбор, в буквальном смысле, представлен на сайтах поставщиков облачных услуг. А именно, речь идёт о выборе одного из трёх вариантов:
6. Ознакомьтесь с новшествами JavaScript, которые в ближайшее время войдут в стандарт
Не могу назвать себя приверженцем поиска и использования самых свежих возможностей языка, так как иногда их применение ухудшает простоту и понятность кода. Но время от времени появляются по-настоящему ценные возможности JavaScript (наподобие конструкции async/await два года назад), поэтому полезно заглядывать в список предложений TC39 и на ресурс node.green для того, чтобы заранее знать о новых возможностях, которые могут вам подойти. Вот что интересного я там нашёл:
7. Хорошо освойте как минимум одну технологию для создания API. Обратите внимание на GraphQL
REST-API — это замечательный инструмент для решения определённого класса задач. А именно, речь идёт об управлении запросами и модификацией записей в базах данных. Ваша система направлена на работу с финансовыми данными? Вероятно, для обеспечения её работы нужно соблюдение строжайших ограничений и использование тщательно проработанной модели данных, не допускающей неоднозначностей. Технология REST вам в этом случае подойдёт, но она не очень хорошо показывает себя в других, весьма распространённых ситуациях, например тогда, когда выполнение одного и того же запроса может привести к получению разных наборов данных. То же самое касается и работы в условиях низкой скорости соединений, когда нужно, чтобы при работе с неким API передавалось бы как можно меньше данных. К таким ситуациям относятся и соединения между компьютерами, где на первый план выходит высокая скорость связи. Стоит ли в подобных случаях переходить на что-то новое? Нет, не стоит. Лучше всего добавить к тому, что уже используется, что-то новое. API — это не архитектура приложения. Это просто точка доступа к приложению, а значит сосуществовать могут API, созданные с использованием разных инструментов. Даже если все они построены поверх единственного веб-фреймворка наподобие Express.
Какую же технологию изучить? Вероятно, в текущих условиях стоит сделать ставку на технологию GraphQL, которая становится всё популярнее и распространённее. Экосистема этой технологии значительно повзрослела, она обслуживает некоторые весьма популярные сценарии работы с данными — такие, как динамический поиск и взаимодействие с иерархическими источниками данных. С другой стороны, технология gRPC всё ещё представляет собой узкоспециализированное решение, которое хорошо подходит для обеспечения коммуникации между серверами в ситуациях, когда в ходе обмена данными желательно передавать как можно меньше служебной информации (например, речь идёт о системах обмена данными, основанных на схеме «издатель-подписчик», или о таких, где используются сообщения и очереди сообщений). Вот несколько полезных публикаций на эту тему:
8. Используете модульные и интеграционные тесты? Взгляните на совершенно новые техники тестирования
Вы уже знакомы с пирамидой тестов, с модульными, интеграционными и сквозными тестами? Если так — замечательно. Всё это лежит в основе успешных стратегий тестирования. Однако тут надо заметить, что за последние 10 лет мир разработки ПО очень серьёзно изменился, а модели тестирования остались прежними, что ставит нас перед вопросами о том, как тестировать микросервисы, насыщенные интернет-приложения, бессерверные системы. Некоторые современные подходы к тестированию дополняют традиционный набор технологий, а некоторые могут даже его заменить, улучшив тем самым стратегию и результаты тестирования. Вот что можно об этом почитать и посмотреть:
9. Приведите свою систему мониторинга приложений в соответствие с практическими рекомендациями из сферы SRE/DevOps
В 2019 году даже приложение среднего размера может состоять из десятков компонентов. Для того чтобы обеспечить бесперебойную работу подобной инфраструктуры, за ней нужно внимательно наблюдать. Несмотря на очевидность вышесказанного, большинство разработчиков всё ещё не считают важным изучение и использование тех рекомендаций по мониторингу приложений и созданию системы оповещений о проблемах, которые могут дать им специалисты, отвечающие за надёжность работы веб-проектов. Например, часто разработчики уделяют основное внимание внутренним показателям производительности систем, таким, как частота процессора или объём оперативной памяти, вместо того, чтобы озаботиться метриками, которые напрямую влияют на конечных пользователей. В частности, речь идёт о частоте возникновения ошибок и о задержках. Это называют «мониторингом, основанным на симптомах проблем». Подобные показатели, ориентированные на пользователей, иногда называют «золотыми сигналами», и вы, возможно, внедряя систему мониторинга, решите начать именно с внедрения подобных метрик. Вот материалы по теме:
10. Улучшайте безопасность проектов, глядя на них с точки зрения злоумышленника, а также изучая способы проведения атак и хакерские инструменты
Если вы не можете думать как тот, кто хочет атаковать вашу систему, это значит, что вы не можете думать и так, как думал бы защитник этой системы. В 2019 году вам не следует ни передавать задачи по защите проектов сторонним организациям, ни полагаться лишь на статические анализаторы безопасности. Сегодня существует огромное количество типов атак (последние тренды в этой сфере — атаки на инфраструктуру разработки и на npm). При этом приложения очень и очень быстро меняются — ещё вчера проект признали хорошо защищённым, а уже завтра в него могут добавить несколько новых AWS-сервисов, несколько новых типов баз данных и новую роль IAM. При этом снова анализировать безопасность проекта будут нескоро. В результате оказывается, что разработчики представляют наибольшую угрозу безопасности для собственных проектов. Решением этой проблемы является их обучение. Это означает, что каждому разработчику веб-проектов необходимо довести выполнение правил безопасности чуть ли не до автоматизма, и, что бы он ни делал, всегда о безопасности помнить.
После того, как вы решите двигаться в подобном направлении, окажется, что учёт безопасности при выполнении любых работ не так уж и страшен. Скажем, ознакомившись с распространёнными способами и инструментами для совершения атак, нарисуйте схему архитектуры своего приложения и подумайте о том, как вы атаковали бы его. Со временем, даже не отдавая себе в этом отчёта, вы начнёте учитывать вопросы безопасности, принимая каждое архитектурное решение и вводя в редакторе каждую новую строку кода. Вот некоторые идеи, касающиеся освоения вопросов безопасности:
11. Разработайте и применяйте стратегию обновления npm-пакетов. 2018 год показал, что поспешность при их обновлении опасна
Обычно команды разработчика придерживаются одной из двух «стратегий» обновления npm-пакетов. Они либо обновляют их как можно быстрее после выхода их новых версий, иногда даже автоматизируя этот процесс, либо вовсе не имеют стратегии обновления пакетов. При таком подходе пакеты обновляются нерегулярно, а, начиная этот процесс, руководствуются чем-то вроде внезапно пришедшей мысли: «А не обновиться ли нам сегодня?». Хотя первый из этих подходов и выглядит лучше второго, он, что неожиданно, оказался в 2018 году сопряжённым с более высоким риском, чем второй. Проблемы, наподобие той, что произошла с пакетом flat-stream, были обнаружены сообществом в пределах нескольких десятков дней, и те, кто, не спешил обновляться, оказались в безопасности.
Подумайте над формализацией стратегии обновления пакетов, от которых зависит ваш проект, предусмотрите использование средств автоматизации этого процесса. Найдите золотую середину между отказом от обновлений и слишком частым обновлением пакетов. Тут вам может помочь программа npq, выполняющая проверку пакетов при установке и дающая рекомендации. Можете взглянуть на коммерческие проекты вроде greenkeeper. Минус подобных решений заключается в том, что они не могут отложить установку до того момента, когда совершенно точно будет известно, что некий пакет является безопасным.
12. Присмотритесь к поэтапному развёртыванию проектов
13. Ознакомьтесь с технологией Kubernetes, которая завоевала мир
Технология Kubernetes (K8S) представляет собой инфраструктуру для компонентов приложения, которая предоставляет им сетевые ресурсы и обеспечивает автоматизацию развёртывания и масштабирования проектов. Она стала стандартом де-факто в сфере хостинга приложений. Её популярность просто невероятна. Технологию Kubernetes поддерживают все поставщики облачных услуг, она обладает отличной системой расширений, 54% корпоративных пользователей уже обладают как минимум одним K8S-кластером. Если вы лишь собираетесь ознакомиться с этой технологией — вот хороший материал начального уровня о ней. Если вы уже сделали первые шаги в сфере K8S — вот список публикаций, с которыми полезно будет ознакомиться:
14. Изучите блокчейн-технологии, которые таят в себе очень интересные возможности
Блокчейн-технологии — это не только криптовалюты. Эти технологии можно применять в любых распределённых системах, обрабатывающих некие транзакции.
15. Освойте технологии машинного обучения, или, по крайней мере, научитесь в них ориентироваться
Вероятно, машинное обучение — это один из ведущих трендов современности. К несчастью, я не особенно хорошо знаком с этой темой. В будущем году я планирую с ней разобраться. Как минимум, мне хотелось бы научиться грамотно общаться на темы машинного обучения и уметь находить качественные инструменты из этой сферы (например, библиотеки вроде tensorflow.js и brain.js, которые позволяют решать реальные задачи, не требуя мощной инфраструктуры).
16. Читайте код успешных опенсорсных проектов
Опасайтесь сужения кругозора, которое вызывает долгая работа над одним и тем же проектом с использованием одного и того же набора технологий. Работа в таком режиме, кроме прочего, скрывает от вас альтернативные способы решения ваших задач. Стремитесь к регулярному исследованию чужого кода, в частности — успешных опенсорсных проектов.
17. Углубите свои познания в области Linux, в частности — понимание устройства процессов
Понимание устройства Linux-процессов даст вам реальные преимущества, так как процессы лежат в основе множества задач, связанных с разработкой. Среди них — мониторинг, обеспечение бесперебойной работы проектов (например — перезапуск процессов), работа с Docker, правильное завершение работы систем и многое другое. Постарайтесь разобраться в этапах жизненного цикла процессов, в сигналах, в модели разрешений, в типах процессов, в командах, используемых для управления ими. Вот полезный материал, посвящённый основам работы с процессами Linux.
18. Разберитесь с тем, как работают внутренние механизмы Node.js
Мне нравится высказывание Райана Даля (создателя Node.js): «Вы никогда не сможете понять всё. Но вам нужно стремиться к тому, чтобы понять систему». Хорошее понимание принципов работы платформы окажется ценным навыком при решении сложных проблем, возникающих в продакшне, оно пригодится при разработке вспомогательных инфраструктурных компонентов приложений (вроде средств мониторинга производительности цикла событий). Возможно, вы уже знакомы с основными частями Node.js, таким, как движок V8 и библиотека libuv. Я так думаю, что 2019 год — это отличное время для того, чтобы углубить свои познания в сфере Node.js, и понять, например, что именно происходит внутри циклов событий libuv. Или, возможно, разобраться с тем, как Node.js взаимодействует с подсистемой ввода-вывода операционной системы, на которой работает эта платформа.
Вот материал о том, что происходит в цикле событий. Вот статья, посвящённая написанию npm-пакетов на C/C++. Вот большая публикация о внутренних механизмах Node.js. Вот цикл обучающих статей про Node.js в блоге RUVDS.
19. Учитесь новому, используя научные методы
Этот пункт последний в нашем списке, но он не менее важен, чем другие. Дело в том, что то, чему вы учитесь, то, что вы усваиваете, оказывает влияние на ваш профессиональный рост. Но, при этом, у многих разработчиков нет ни стратегии самообучения, ни стремления освоить эффективные способы обучения, используя научный подход. Представьте себе совещание на тему предотвращения ошибок в JavaScript-коде, связанных с типами данных. Руководитель настаивает на том, чтобы команда использовала бы обычный JavaScript, что позволит обойтись без рефакторинга кодовой базы. Речь идёт о том, что, например TypeScript вам не нужен. Внезапно ваш коллега предлагает использовать flow и всем, кто принимает участие в совещании, эта идея нравится. Тут вы вспоминаете, что как-то читали о flow, но информацию эту вы не усвоили, она, что называется, «в одно ухо влетела, а в другое вылетела». Почему это произошло? Вероятно, тут мы имеем дело с феноменом, который называется «иллюзия компетентности». Он объясняет причину, по которой люди что-либо забывают. Например, вы потратили час ценного времени на чтение некоего материала и думаете, что всё поняли и запомнили, но это — самообман. Через пару дней вы ничего из прочитанного уже не вспомните. Исследования показывают, что если вы попытаетесь потом об этом кому-нибудь рассказать или просто пробежитесь по тому же тексту на следующий день, вы сможете значительно увеличить шансы на то, что вы усвоите то, что прочли. Есть и многие другие техники, которые помогут запоминанию и позволят извлекать нужные фрагменты знаний в правильное время. Поэтому я полагаю, что потратить несколько часов 2019 года на то, чтобы научиться учиться — это стоящее вложение времени.
Вот отличный курс об обучении. Вот материал о том, как организовывать информацию для её эффективного усвоения. Если вы читаете о новой технологии — сравните её с тем, с чем вы уже знакомы, поговорите о ней с коллегами, задайте себе вопрос о том, зачем она нужна, нарисуйте её схему, перечитайте выводы материала об этой технологии. Всё это поможет вашему мозгу усвоить то, что вы узнали, связать это с существующими знаниями, а значит, когда вам такая информация понадобится, вы сможете ей воспользоваться.