Как проверить навыки разработчика Node.js

В нынешнем технологическом климате Node.js - одна из самых популярных серверных технологий, используемых разработчиками.

Крайне важно, чтобы вы проверили навыки разработчика Node.js вашего кандидата, чтобы получить качественный персонал.

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

Отчеты показывают, что количество поисков работы на Node.js выросло на 57% по сравнению с предыдущим годом, что свидетельствует о растущем спросе на него. Эта особая технология используется целым рядом технологических гигантов и транснациональных компаний, включая Netflix, Uber, LinkedIn, NASA, PayPal, Microsoft и Walmart.

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

1. Что такое Node.js?
С технической точки зрения Node.js - это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, которая выполняет код JavaScript вне веб-браузера.

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

Первая стабильная версия Node.js (0.10.0, первая использованная в бизнесе) была выпущена в 2013 году, хотя проект стартовал несколькими годами ранее. Целью Райана Даля, создателя Node.js, было создание веб-сайтов в реальном времени с возможностью push-уведомлений, «вдохновленных такими приложениями, как Gmail». В Node.js он дал разработчикам инструмент для работы в парадигме неблокирующего, управляемого событиями ввода-вывода.

1.1. Для чего используется Node.js и какие проблемы он решает?
Поскольку большинство клиентских приложений, включая веб-страницы и веб-приложения, используют код, написанный на JavaScript, преимущество написания сценария на стороне сервера на Javascript огромно. И здесь в игру вступает Node.js.

Node.js популярен прежде всего из-за того, что он представляет собой парадигму «JavaScript везде», объединяющую разработку веб-приложений на едином языке программирования, а не на разных языках для серверных и клиентских скриптов.

Эта унификация стека, включающая язык и формат данных (JSON), позволяет компаниям оптимально повторно использовать ресурсы разработчиков. Использование Node.js позволяет разработчику полного стека с легкостью переходить к следующему этапу; и, как результат, находится в прямой конкуренции с другими популярными языками сценариев и средами, такими как Java, .NET, Python, PHP, Ruby и C #.

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

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

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

1.2. Похож ли он на другие языки или фреймворки?
Node.js всегда будет очень тесно связан с языком JavaScript, поскольку он является его серверной платформой выполнения. Поскольку Node.js реализует спецификацию ECMAScript, глобального стандарта JavaScript, предназначенного для обеспечения взаимодействия веб-страниц в различных веб-браузерах; мы можем неформально сказать, что Node.js фактически является Javascript .

В некотором смысле мы можем сказать, что Node похож на PHP, Python и Ruby (являясь языком сценариев с динамической типизацией), хотя он намного более продвинут с точки зрения возможностей функционального программирования.

На рынке есть несколько других продуктов, которые работают как прекрасная альтернатива Node.js. К ним относятся Elixir, Perl, ASP.NET, Ceylon и Rebol .

1.3. Каковы его основные преимущества или особенности?
  • Позволяет разработчикам масштабировать приложения в горизонтальном и вертикальном направлениях .
  • Легко освоить разработчикам, знакомым с JavaScript.
  • «Полный стек JavaScript» - помогает писать серверные приложения на JavaScript.
  • Делает использование кода проще, быстрее и эффективнее за счет интерпретации JavaScript с помощью движка Google V8 JavaScript.
  • Предоставляет возможность неблокирующей системы ввода-вывода, которая помогает разработчикам обрабатывать несколько запросов одновременно .

2. Что важно знать ИТ-рекрутеру о Node.js?
На что важно обращать внимание при приеме на работу разработчиков с опытом Node.js? Помимо обычного архитектурного дизайна, логики, навыков совместной работы и общения, которые могут потребоваться при приеме на работу любого разработчика, есть некоторые вещи, уникальные для разработчиков Node .

2.1. Как часто меняется стек технологий?
Поскольку Node.js работает на Javascript, вы часто слышите, как люди говорят, что «каждую неделю появляется новый фреймворк JavaScript» , но это в первую очередь относится к интерфейсной архитектуре. Серверная часть обычно намного стабильнее. Конечно, все время добавляются новые инструменты; однако, что касается самых популярных надстроек, используемых в Node.JS, включая Express, Meteor, Hapi, NestJS, koa и т. д., это скорее эволюция, чем революция. Более того, сам язык JavaScript неуклонно улучшается с 2015 года, когда был выпущен ES6 (также известный как ES2015). Причина в том, что до 2015 года каждая версия JS вводилась крайне периодически (например, каждые 3-5 лет), но с 2015 года новая версия выпускается каждый год. В целом стек технологий эволюционировал довольно плавно.

2.2. Доступно ли много ресурсов / инструментов / технологий?
Что действительно замечательно в Node.js, так это тысячи модулей, доступных для любых целей, а также активное сообщество, стоящее за платформой. По этой теме существует множество блогов, учебных пособий, видео, конференций и книг, призванных облегчить жизнь разработчикам.

Такие инструменты, как Webpack , удобный сборщик модулей JavaScript, используемый для упрощения интерфейсной разработки, действительно помогают упростить Node.js. Или Mocha.js, который позволяет разработчикам Node тестировать как в консоли, так и в браузере. Более подробную информацию об инструментах и ресурсах для Node можно найти на таких сайтах, как Smashing и Brainhub.

2.3. С какими инструментами и методами должен быть знаком разработчик на Node.js?
Здесь следует различать две вещи: знание самого Node.js и общие проблемы, связанные с внутренним программированием. Node.js, являясь серверным JavaScript, состоит из языка сценариев.

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

Однако существуют также концепции, связанные с серверной частью, которые более или менее одинаковы для всех серверных технологий, включая Java, .Net, PHP, Python, Ruby, Golang и, конечно же, Node.js. К таким темам относятся:

  • Базы данных
  • Управление сессией
  • Архитектура: монолиты, микросервисы
  • Масштабирование (потребление ресурсов RAM / CPU)
  • REST API
  • Облако и инфраструктура
и многие, многие другие, часто в зависимости от специфики проекта.

В общем, это концепции, с которыми разработчики node.js должны быть знакомы.
Специфика навыков разработчика Node.js явно не подлежит обсуждению. Но без внутренних знаний разработчики могут писать системы, которые не являются отказоустойчивыми и не масштабируемыми (что может привести к системам, которые хорошо работают для ~ 50 пользователей, но ломаются для ~ 5000 или ~ 50000 пользователей).

2.4. Какой опыт важно искать в Node.js разработчике?
Без сомнения, коммерческий опыт работы с Node.js является наиболее важным фактором, который следует здесь учитывать. Работа над бизнес-проектами и разработка стабильного программного обеспечения являются эталоном для платформы. Научный и академический опыт для React практически не имеет значения.

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

3. Как понять навыки разработчика Node.js на этапе проверки?
Node.js - относительно новая технология, поэтому не так много опытных разработчиков используют ее. Вот почему мы не должны ограничиваться только текущими пользователями Node.js, но также обращаем внимание на опытных разработчиков, которые могут быстро перейти на него. Разработчики PHP, Java и .NET часто хотят изучать новые технологии.

3.1. Что нужно учитывать при просмотре резюме?
  • Разработчики должны быть знакомы с проблемами внутреннего программирования, шаблонами, проблемами и решениями.
  • Опыт разработки приложений на базе Node.js.
  • Дизайн базы данных и анализ производительности.
  • Навыки, связанные с обеспечением качества (например, разработка сценариев тестирования и реализация этих тестов).
  • Опыт работы с облачной инфраструктурой, например, как включить развертывание в облачной инфраструктуре AWS / Azure / GCP.
  • Все, что не подтверждает знания о технологическом стеке, но обеспечивает ценность для бизнеса, например: обслуживание приложений, исправление ошибок, настройка производительности и т. д.
  • Баланс знаний между синтаксисом (как писать код) и проблемами, связанными с серверной частью (что писать).
  • Разработчики, демонстрирующие понимание специфики платформы (какие проблемы могут возникнуть и как их решать).
  • Не ожидайте, что кандидаты будут знать ваш технический стек задом наперед. Предположим, что, если разработчик доказал успех в одном стеке, он может работать на высоком уровне в другом технологическом стеке.

3.2. Какие термины глоссария важно знать в Node.js (включая фреймворки, библиотеки и языковые версии)?
Абривиации - Узел = Node.js JS = JavaScript. ES = ECMAScript (ECMAScript - это название стандарта, JavaScript - его реализация - формально. Но на практике люди называют это JavaScript, хотя им следует называть его ECMAScript (спецификация), однако большинству разработчиков это не важно).

JavaScript / ECMAScript - Асинхронное программирование: события, обещания, async / await, rxjs Объектно-ориентированное программирование: структуры данных JS, прототипное наследование, классы ES6 Функциональное программирование: функции высшего порядка, замыкания Сквозные механизмы: принуждение (приведение типов)

Веб-сервисы - Протокол HTTP, протокол WebSocket HTTP: Fetch, Axios, Request, WebSockets: Socket.IO

Инструменты Node.js - Фреймворки: Express, Koa, Nest.js, Fastify Transpilers: Babel, TypeScript, Flow Bundlers: Webpack, Parcel, Snowpack Популярные пакеты: NVM, Chokidar

Тестирование - Типы: модульные тесты, функциональные тесты, интеграционные тесты, E2E-тесты Инструменты (фреймворки и библиотеки): Karma, Jasmine, Selenium, Jest, Mocha, Sinon, Chai (и многие другие) Разное: пирамида тестов (гораздо больше модульных тестов, чем e2e ), тестирование снимков, регрессионное тестирование, макетирование

Базы данных - SQL, MySQL, MSSQL NoSQL: MongoDB, CouchDB и многие другие ORM (объектно-реляционные преобразователи)

Дизайн - Монолиты, микросервисы, шаблоны проектирования CQRS и многие другие проблемы: масштабируемость, мониторинг, ведение журнала, развертывания, непрерывная интеграция / развертывание, облачная инфраструктура

3.3. Какие версии полностью разные? Какие версии похожи друг на друга?
  • ES6 - это ECMAScript v6 (выпущенный в 2015 году), это был крупный прорыв, к которому люди относятся, то есть новый JavaScript (до этого люди считали старый JS).
  • Версии Node.js поставляются в основном с улучшенной поддержкой последних версий ECMAScript (JavaScript), они улучшаются постепенно, но не революционно.

4. Техническая проверка навыков разработчика Node.js во время телефонного / видео-интервью.
4.1. Вопросы , которые вы должны спросить о разработчике Node.js в опыте . Зачем вам задавать каждый из этих вопросов?
  • Вы участвовали в автоматическом тестировании своих предыдущих приложений? Как вы думаете, что вы сделали хорошо и что бы вы изменили сегодня?

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

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

Каждый тест должен явно проверять одну переменную (если только это не E2E, который, как следует из названия, выполняет сквозные тесты). Если функция не работает, лучше иметь один тест, а не сотни тестов.

Тесты не должны охватывать элементы, которые проверяются другими инструментами и т. Д. Структуры данных могут быть проверены валидаторами схемы JSON, средствами проверки типов (TypeScript, Flow,…) и т. Д.

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

  • Вы работали с микросервисами и / или распределенными системами?

Если продукты вашей компании обрабатывают большие объемы (пользователей, запросов и т. Д.) И требуют высокой доступности, то часто это приводит к распределенным системам, в которых масштабируется только часть системы. В целом, распределенная система имеет свои собственные шаблоны и антипаттерны, на изучение которых требуется много времени. Если вам нужно отправить ваше приложение в облако (AWS / Azure / GCP,…), тогда разработчик Node.js с распределенными системами будет чрезвычайно ценен.

  • Вы работали над приложениями реального времени? Если да, то какие бизнес-процессы реализованы в системе? В чем заключалась сложность системы с точки зрения технологии?

Одна из самых важных проблем, с которыми приходится иметь дело в системах большого бизнеса, - это данные в реальном времени. Внедрение приложений, в которых данные меняются каждую секунду, несет с собой свои особенности, проблемы, типичные ошибки, решения, шаблоны и архитектуру и т. Д. Если ваша система обрабатывает данные, которые часто меняются (например, отслеживание почтовых служб или обработка финансовых данных, которые, по причине природа финансов также чрезвычайно динамична) вы обязательно должны задать этот вопрос, чтобы увидеть, понимает ли кандидат контекст.

4.2. Вопросы , которые вы должны спросить о разработчике Node.js в знаниях и мнениях . Зачем вам задавать каждый из этих вопросов?

  • Что такое потоки Node.js, что означает потоковая передача данных и почему это важно?

Потоковая передача данных - это определенный способ обмена данными между сервером и клиентом. В большинстве систем отправляется полный запрос; и, соответственно, получен полный ответ, но это не относится к потокам. В потоках ответ возвращается несколькими порциями (в режиме реального времени, по частям). Это чрезвычайно важно, поскольку влияет на производительность системы на низком уровне. Часто клиент может начать обработку фрагментов (частей) ответа, не имея полного ответа. Это сложнее, но сокращает время ненужного ожидания. Опытный разработчик node.js должен иметь опыт использования потоков узлов.

  • Почему package-lock.json должен быть зафиксирован в репозитории и что он содержит?

Практически каждый разработчик знает, что файл package.json, главный файл проекта узла, должен фиксироваться и отслеживаться системой управления версиями (например, git). Но не все знают о package-lock.json, и он помещен в npm. В то время как package.json явно перечисляет все зависимости, которые мы напрямую используем, package-lock.json включает все дерево зависимостей. Версии всех пакетов явно перечислены, и, когда приложение создается на машине сборки, эти точные версии будут приняты во внимание. Почему? Потому что, если мы получаем ошибку на машине сборки, нам нужно знать точные версии, чтобы воспроизвести ошибку на локальных машинах. Благодаря фиксации package-lock.json в репо это просто.

  • В программировании есть известная поговорка, что «в программировании есть 2 сложные вещи: 1. Присвоение имен объектам и 2. Аннулирование кеша». Пожалуйста, объясните, что такое аннулирование кеша и почему это считается трудным.

Кэширование - это запоминание вычислений на будущее, так что всякий раз, когда тот же вопрос задается снова, у нас уже есть правильный ответ. Аннулирование кэша - это когда мы знаем, что основа для расчета изменилась, и поэтому запомненный результат неверен. Поскольку это относится к старой основе, мы знаем, что этот фрагмент кэшированной информации должен быть очищен (признан недействительным). В больших системах, где цена заказа может зависеть от множества факторов, некоторые из них меняются, а некоторые - нет. Трудно не пропустить определенный путь (за изменением должно следовать аннулирование кеша) или не сделать это слишком быстро. В большинстве систем аннулирование кеша должно быть запрограммировано явно.

4.3. Поведенческие вопросы, которые вы должны задать разработчику Node.js. Зачем вам задавать каждый из этих вопросов?

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

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

  • Вы когда-нибудь оказывались в ситуации, когда знали, что ввели ошибку, которая позже привела к сбою производственной системы (либо всей платформы, либо отдельной функции)? Если да, то что вы узнали из этого?

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

  • Что ты считаешь своим самым большим достижением?

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

5. Техническая проверка навыков разработчика Node.js с помощью онлайн-теста кодирования.
Наем отличного разработчика Node.js может стать серьезной проблемой, особенно если вы делаете всю грязную работу сами. Для проектов, требующих долгосрочных обязательств и бюджета, вам нужна компания по разработке программного обеспечения с надежным процессом найма.
HR Блог для IT рекрутера в Телеграм
Хочешь всегда получать новые статьи, бесплатные материалы и полезные HR лайфхаки! Подписывайся на нас в Telegram! С нами подбор ит персонала становится проще ;)
Хотите найти талантливого сотрудника?
Оставьте заявку и получите в подарок список вопросов для сбора рекомендаций на кандидата