Разработчик Node.js
![](/images/placeholder.png)
Node.js. позволяет создавать настольные оконные приложения. Обеспечивают реализацию и поддержку решений на данной платформе специализированные разработчики.
Мы обратились к экспертам и представителям различных компаний, чтобы выяснить, каких кандидатов они видят на позиции разработчик Node.js.
- Какими знаниями и навыками должен обладать разработчик Node.js?
- Каков инструментарий разработчик Node.js?
- Каковы требования компании к уровню образования потенциальных сотрудников?
- Какие требования предъявляются к опыту работы?
- Есть ли особые требования, которые обусловлены спецификой деятельности компании?
Всеволод Родионов, ведущий разработчик, стартап
1. Стандартный встречный вопрос: а что нужно делать при помощи Node.js?
Вариантов бесконечно много. Я знаю людей, которые пишут под raspberry pi. Есть многие исследователи данных, которые пользуются JS как одним из основных инструментов как анализа, так и визуализации, даже блокчейн-технологии отлично взаимодействуют с Node.js. Почти все фронтенд-разработчики используют node для сборки проектов.
Единственная явная специфика Node.js – это его асинхронность, почти что встроенная в сам язык: решать задачи оркестрации на нем гораздо проще и удобнее, чем писать высокооптимизированный низкоуровневый код. Стандартные алгоритмы и структуры данных стоит брать уже готовыми из популярных библиотек, потому что код в них уже оптимизирован для компиляторов, которые порой делают весьма неожиданные оптимизации.
Из этого можно сделать очевидный вывод, который я наблюдал много раз: хорошим разработчиком на Node.js можно назвать человека с пусть даже поверхностным, но очень широким кругозором – от такого человека ожидаешь, что он сходу может вспомнить алгоритм, библиотеку, придумать комбинацию из технологий, которая примерно решает поставленную проблему.
Второй, хотя и менее очевидный, вывод идет оттуда же: поскольку Node.js почти всегда решает задачу оркестрации – в случае с стандартным веб-сервером, например, это оркестрация запросов к redis, sql/mongo, pub-sub-службам, почтовым сервисам, – стоит изучить, как строятся децентрализованные отказоустойчивые системы, хотя бы азы.
2. В отличие от привязанных к платформам языков в Node.js царит вкусовщина. Любая ОС отлично подходит (спасибо Microsoft за Windows Linux Subsystem), из редакторов и IDE – есть платные WebStorm/IDEA, условно-платный Sublime, бесплатные VS Code, Atom и продукты на его основе, и, конечно, можно вспомнить vim. Даже пакетный менеджер можно выбрать на свой вкус – стандартный npm или yarn от Facebook, причем сами модули одинаково доступны и там, и там, отличаются developer experience и мелочи, связанные с Git, продакшн-режимом и дополнительными возможностями. npm, например, умеет делать базовый аудит безопасности, а yarn - экономить место на диске, что полезно для docker-образов. Стоит попробовать и понять, что нравится.
3. У меня самого диплом инженера-судоводителя, так что сказать «в айти без диплома по computer science не попасть» было бы явной ложью.
Я искренне считаю, что наличие высшего образования, даже неполного, – это лучше, чем его отсутствие, но профильность образования помогает не сильно – сами технические знания можно набрать за полгода с нуля, важнее способность их применять. Тем более прикладные курсы на момент выхода уже устаревают, и с этим ничего нельзя поделать.
4. Год или два опыта – это уже хорошо. Я шестой год занимаюсь веб-разработкой (и фронтендом, и бэкендом), и последний раз, когда я слышал «у вас мало опыта» был через полтора года после начала карьеры.
Если говорить про себя, то я готов доверить задачи человеку с горящими глазами и с опытом только личных «игрушечных» проектов – при условии, что я проверю результат, конечно. Но критические части, которые могут все сломать, если сделать неправильно – таких 10-20%, не больше, – я себе-то доверяю просто потому, что больше некому. Более того, я знаю компании, где таких ребят с горящими глазами и без опыта прямо-таки хватают и тащат к себе.
5. У нас высокие нагрузки, распределенная инфраструктура и high availability, и пара весьма специфичных технологий. Если бы искали еще и знание всего этого, вряд ли вообще кого-то могли найти, поэтому специфических требований нет, всему приходится учить по ходу дела.
Дмитрий Касьянов, Node.js Developer в компании Aventica
1. Прежде всего необходимо знать на достаточном уровне сам язык JavaScript и его особенности. Так что для front-end-разработчиков начать писать под Node.js не составит проблем. Но лично я перешел на Node.js из мира Java.
Необходимо иметь представление о том, что такое Event Loop, событийно-ориентированное и асинхронное программирование. В противном случае для начинающих Node.js-разработчиков будет очень много магии. С появлением ES6 стало проще писать в ООП-стиле, поэтому знание объектно-ориентированного программирования также приветствуется.
Вообще сейчас не составит проблем изучить Node.js и JavaScript – очень много статей им посвящено, например на Medium и Habrahabr. Было бы желание.
2. Если говорить о средах разработки, то я бы выделил три основных: Atom, Visual Studio Code и WebStorm. Они широко распространены среди JavaScript-разработчиков. Atom и VS Code – это текстовые редакторы с большим количеством плагинов на любой вкус и цвет, WebStorm – полноценная IDE. Я пользовался сначала WebStorm, потом перешел на VS Code. Atom даже не пробовал.
В плане библиотек – стандартные библиотеки JavaScript и Node.js довольно хороши и продолжают развиваться. Для всего остального есть NPM – менеджер пакетов для JavaScript. Если вдруг оказалось, что возможностей стандартной библиотеки не хватает, нужно поискать в NPM – наверняка люди уже столкнулись с вашей проблемой и разработали решение. Работа с БД, очередями, построение REST API, тестирование – для всего этого есть множество пакетов.
3. Не заметил ничего специфичного. Могут спокойно брать как самоучек, так и с непрофильным образованием. Главное – быстро учиться, не бояться задавать вопросы коллегам.
4. Также, все зависит от компании. Очень мало готовы брать Junior-разработчиков. Но если и готовы, то как минимум нужно иметь начальные навыки программирования, понимание ООП, знакомство с СУБД.
5. И снова: все зависит от того, насколько требования специфичны. Но, в любом случае, все можно свести к тому, что человек должен понимать предметную область и знать, какие модули npm для нее существуют (раз уж мы говорим оNode.js).
Юрий Бушев, Senior Node.js Developer в Zatea ApS и Zedly inc
1. В чисто техническом плане я бы поставил на первое место безукоризненное знание JavaScript. Причем, учитывая то обстоятельство, что JS очень сильно меняется на протяжении последних лет, важно понимание как нового инструментария языка, так и базовых принципов, заложенных в него с самого начала.
Следующим и одним из основных навыков, которые требуются кандидатам, является опыт интеграции с NPM-модулями абсолютно разных предназначений. Тот факт, что программисты Node.js имеют в свободном доступе огромную кладезь «готовых к употреблению» программных продуктов, написанных сторонними разработчиками, делает умение быстрого понимания API-документации и привычных способов интеграции с такими продуктами неотъемлемым признаком хорошего Node.js-специалиста.
2. Прежде всего это продукт от ребят из JetBrains. Лично я полюбил IDE IntelliJ IDEA, ввиду превосходной интеграции как с JS, так и с другими языками (пишем не только на JS). В ней также имеются удобство запуска и просмотра результата юнит-тестов, превосходный дебаггер и интеграция с Git.
Помимо IDE:
- в процессе тестирования и отладки API мы используем Postman;
- для написания регулярных выражений – сайт regex101.com;
- для просмотра базы данных – Robo 3T или MongoLime (при работе с мобильного устройства).
3. Наличие высшего образование не является особым преимуществом, гораздо большее значение имеет желание человека узнавать новое и развиваться. Способность обучаться и стремление к этому – лучшие качества кандидата на практически любую инженерную позицию с нашей точки зрения.
4. Все зависит от позиции. Так, для Junior-разработчиков их необходимым опытом будет знание основ платформы Node.js, понимание работы событийного цикла, за счет чего появляется асинхронность и в чем ее отличие от многопоточности. Для Senior-разработчика это, несомненно, опыт использования самых популярных решений (из NPM) для построения микросервисной архитектуры, распределения нагрузки, логирования и мониторинга.
5. В одной из компаний, в которой я работаю, постановка задачи осуществляется бизнесом, часто она размытая и не конкретная, эта особенность требует от инженеров умения задавать нужные вопросы и получать необходимые ответы для формализации архитектуры и основных принципов работы программных продуктов.
Владимир Громыко, front-end-developer, компания «РТЛабс»
1. Необходимы знания таких технологий, как HTML5, CSS3, JavaScript, понимание того, как работает Node.js (события и т.д.), а также знание хотя бы одного фреймворка, например Express.js или Koa.js.
Необходимо понимать асинхронное программирование (Event-driven-программирование). Также нужны:
- отличное знание серверных шаблонизаторов, например Pug;
- опыт работы с препроцессорами (Sass, Stylus);
- знания в аутентификации пользователей и авторизации между несколькими системами, серверами и средами;
- знание как минимум одной базы данных (NoSQL, SQL).
Кроме того, паттерны проектирования Node.js, тестирование, Git, практический опыт работы с инструментами разработки Node.js, такими как npm, webpack, grunt, gulp, brunch, broccoli.
Также желательно знание одного или нескольких клиентских фреймворков, таких как angular, react, vue.
2. Инструментарий:
- npm – менеджер пакетов;
- gulp, webpack – как сборщики;
- WebStorm – как вариант мощной IDE;
- JSDoc – документирование кода;
- Jasmine Mocha – тестирование;
- Chrome Dev Tools – отладка;
- Git;
- JSLint – проверка кода.
3. Высшее образование, и, как правило, не важно, техническое оно или нет.
4. От трех лет.
Владимир Федоров, глава компании Webcraft.customs
1. JavaScript, желательно хотя бы поверхностное знание Front-еnd-технологий (Vue, React). Администрирование, работа с базами данных.
2. В нашей компании распространены WebStorm и консоль разработчика.
3. Только профильное высшее техническое образование.
4. Никаких. Достаточно желания и высшего технического образования.
5. Да, это желание работать.
Подготовил Игорь Штомпель