19 способов стать лучшим инженером Node.js в 2019 году

Node.js JavaScript
19 способов стать лучшим инженером Node.js в 2019 году

Оригинальный автор: Йони Голдберг

Переводчик: Джоти, UC International R&D

Спереди написано: Добро пожаловать в официальный аккаунт «UC International Technology», мы предоставим вам качественные технические статьи, связанные с клиентом, сервером, алгоритмом, тестированием, данными, интерфейсом и т. д., не ограничиваясь оригинальностью и перевод.

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

Введение

Я собрал 19 навыков и тем, которые могут быть полезны в 2019 году. Пожалуйста, не смущайте меня - как и большинство разработчиков, я не могу быть знаком со всеми темами. Это просто захватывающие вещи, на которых я сосредоточен, горизонты JavaScript бесконечны.

Меня зовут Йони Голдберг, я независимый консультант по Node.js и соавтор книги Node.js Best Practices. Я работаю с клиентами в США, Европе и Израиле над их приложениями Node.js. Мои услуги включают проверку кода, приложений и архитектуры, тестирование и непрерывную интеграцию, курсы повышения квалификации и другие услуги. Вы можете следить за мной в Твиттере (https://twitter.com/goldbergyoni).

1. Используйте типы и схемы. TypeScript — отличный выбор в 2019 году

Оказывается, нетипизированное кодирование контрпродуктивно и чревато ошибками (см. исследование). Это не означает, что вы должны все время использовать строго типизированный синтаксис, но выберите, сколько кода схемы вы хотите, проверяя свои сущности/модели с помощью схемы JSON (или Joi), аннотируя собственный JS со статической типизацией (см. Facebook Flow) или продолжайте использовать строго типизированный синтаксис, такой как TypeScript. Последний получил значительный импульс в 2018 году и, по-видимому, является консенсусом в пространстве Node. Если вы планируете использовать TypeScript, сначала спросите себя, не является ли ваше использование чем-то большим, чем просто набор текста, иначе использование интерфейсов и абстрактных классов приведет вас к парадигме, которую вы никогда раньше не пробовали.

Ссылка на ссылку:

  • Адрес исследования: http://ttendency.cs.ucl.ac.uk/projects/type_study/documents/type_study.pdf

  • Схема JSON: https://www.npmjs.com/package/jsonschema

  • Джой: https://www.npmjs.com/package/joi

  • Поток Facebook: https://github.com/facebook/flow

пример:

  • Явная схема модели с использованием схемы JSON: https://www.npmjs.com/package/jsonschema

  • Статический тип нативного JS с помощью Facebook Flow: https://github.com/facebook/flow

  • Используйте типизированный синтаксис TypeScript: https://www.typescriptlang.org/

2. Обогатите свои линтеры

Линтеры — это бесплатный обед, и за 5 минут настройки вы получаете бесплатный автопилот для защиты вашего кода и отслеживания критических проблем по мере ввода. Прошли те времена, когда линтинг ассоциировался с косметикой (никаких точек с запятой!). Сегодня линтеры могут обнаруживать серьезные проблемы, такие как ошибки, которые не выдаются правильно, недостающая информация, промисы, которые никогда не разрешаются, и другие болевые точки, которые вы никогда не хотели бы видеть в своем коде.

пример:

  • eslint-plugin-chai-expect может обнаруживать тесты без утверждений

  • eslint-plugin-promise может обнаруживать неразрешенные промисы (ваш код никогда не продолжается)

  • eslint-plugin-security может обнаруживать регулярные выражения, которые могут использоваться для DOS-атак.

3. Чуть больше Java, чуть меньше Ruby — углубите свои архитектурные познания

Знаний об архитектуре и дизайне экосистемы Node.js очень мало, все говорят о микросервисах, но только о каких-то внутренних структурах. И большинство приложений и примеров — это концепции MVC и другие подозрительные шаблоны Ruby. Что не так с этим? Например, MVC создан для обслуживания контента и представляет собой впечатляющий метод создания надежных серверных частей (дядя Боб: «MVC — это механизм доставки, а не архитектура приложения»). Вы действительно можете описать всю бизнес-логику, правила, доступ к данным, связь с контроллерами и другими микросервисами в модели? См. примеры ниже для других проблем проектирования и возможных решений.

Я определенно не рекомендую проходить тяжелые узоры Java / весенние (мы в узле по причине, не так ли? :)), просто выбирая некоторые идеи, которые обеспечивают большую ценность, не жертвуя простотой применения.

пример:

  • Вы читали мои рекомендации по Node.js, Часть 1 — Архитектура?

  • Не вмешивайтесь в свою бизнес-логику с помощью объектов Express, читайте о проектировании, управляемом предметной областью (см. сокращенную версию этой новой книги) и гексагональной архитектуре.

  • Смешивание логики и кода доступа к данным в одном классе (паттерн Active Record — очень популярный среди разработчиков, использующих Mongoose и Sequelize) может легко привести к раздуванию объектов, которые сложнее тестировать. Рассмотрите возможность использования шаблона отображения данных.

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

4. Запланируйте, как использовать асинхронные крючки для лучшего отслеживания и контекста

Однопоточная модель имеет большой недостаток — запросы на потерянный контекст: при их протекании через множество файлов и асинхронной работе переменная не сохраняется на протяжении всего своего жизненного цикла. Почему эта боль? Например, разработчики часто хотят включать уникальный идентификатор для каждого журнала, чтобы потом можно было связать все журналы одним и тем же запросом — в 2018 году это не очень просто. 2019 принес новое яркое пятно, асинхронные хуки — один из них (не совсем новый, но скоро выйдет из экспериментального режима). Проще говоря, это механизм, готовый внедрить пользовательский код, когда асинхронная операция начинается и заканчивается. Ввиду этого весь код может быть связан с одним и тем же контекстом запроса и сохранением. Это заложило основу для многих пользовательских пакетов, эти пакеты улучшат функцию отслеживания узлов и контекста до нового уровня.

пример:

  • cls-hooked позволяет совместно использовать переменные и контексты на протяжении всего жизненного цикла запроса.

  • Клиент Jaeger будет визуализировать поток запросов всей системы, даже микросервисов и серверов (часть стандарта открытой трассировки, для регистрации всей активности требуется выделенный сервер).

  • Узнайте о возможностях асинхронных ловушек и о том, как их кодировать. Представлено @guysegev

5. Познакомьтесь с новейшими бессерверными возможностями: они готовы к большой битве в сфере надежной инфраструктуры (убийца Kubernetes?)

Примечание. Термины FaaS и Serverless используются здесь взаимозаменяемо, хотя они и не идентичны. На самом деле, я имею в виду FaaS-сервисы облачных провайдеров, такие как Lambda и Google Functions.

Первоначально FaaS использовался для разработки микрозадач, а не мощных «микросервисных» приложений. По мере роста их популярности рос и спрос на облачных провайдеров, и быстро появлялись новые возможности. FaaS появился в 2019 году и представляет собой инфраструктуру для мощных приложений. Может ли он теперь конкурировать с Kubernetes и доставлять большие приложения? Некоторые люди думают, что Serverless и Faas являются ортогональными технологиями, но на самом деле каждое новое облачное приложение в 2019 году должно выбирать одно из трех (на самом деле пользовательский интерфейс каждого облачного провайдера будет отображать этот выбор): (1) экземпляры на «голом железе», такие как вычисления EC2 или GCP. (2) Kubernetes или (3) FaaS. Таким образом, возможность сравнивать K8S с FaaS/Serverless и информировать о последствиях становится обязательным навыком проектирования.

P.S. Следующие примеры относятся к AWS только для удобства.

пример:

  • Инструмент AWS Lambda SAM позволяет определять FaaS и запускать его локально

  • AWS Lambda теперь поддерживает развертывание в оттенках серого!

  • Уровень AWS Lambda позволяет повторно использовать логику в нескольких FaaS (уровень доменной/бизнес-логики, который эмулирует типичные микросервисы).

6. Узнайте о последних функциях JavaScript, которые скоро будут поддерживаться

Я не большой любитель гоняться за каждой новой функцией языка, и иногда эти блестящие игрушки идут вразрез с простотой кода. Некоторые очень ценные функции Javascript появляются время от времени (например, введение async/await два года назад), поэтому ознакомьтесь с предложением TC39 и node.green, чтобы найти привлекательные новые функции, соответствующие вашему стилю кодирования.

пример:

  • Поле уровня класса находится на этапе 3 (последний этап) и может поддерживаться в 2019 г.

  • BigInt находится в фазе 3 (последняя фаза) и может быть полезен при взаимодействии с другими микросервисами, машинами или хранилищами данных, которые генерируют огромные числа.

  • Асинхронные итераторы (Мэтт Крик) и †promise — наконец-то поддерживаются, стоит попробовать, если вы еще не использовали их

7. Знакомство хотя бы с одной технологией API. GraphQL — хороший выбор в 2019 году

API в стиле REST полностью соответствует тому, для чего он был создан: иметь точный контроль над тем, как объекты могут быть изменены и опрошены. Есть ли у вас система финансового учета? Вы можете захотеть разработать очень строгие конечные точки, то есть единую явную модель данных. Однако есть и другие очень распространенные случаи использования, в которых стиль REST действительно не соответствует требованиям, например, выполнение аналогичных запросов, которые могут возвращать разные наборы данных, сетевые решения с низкой пропускной способностью для минимизации нагрузки на API, межмашинное взаимодействие с упором на скорость и т. д. немного. Стоит ли менять один? Абсолютно нет, просто смешивайте и сочетайте. API — это не ваша архитектура, это просто порт (то есть точка входа) в ваше приложение, и несколько стилей API могут легко сосуществовать, даже поверх одной веб-инфраструктуры, такой как Express.

Так какой из них учиться? Ваш лучший выбор, вероятно, GraphQL, который прямо в мейнстриме. Его экосистема уже очень зрелая, и она может обеспечить очень популярные варианты использования, такие как динамический поиск и иерархические источники данных. С другой стороны, Grpc по-прежнему является нишевой технологией, подходящей для случаев использования связи между серверами, где вы получаете минимальные накладные расходы (например, система очередей Pub-sub/message).

пример:

  • Контрастное обучение — это здорово — REST vs Graph vs grpc

  • Просмотрите учебники по GraphQL, Node и Express

  • Посмотрите короткий ролик на YouTube (11 минут) — Что такое GraphQL?

8. Выйдите за рамки модульного и интеграционного тестирования — обогатите свое портфолио тестирования новыми методами тестирования.

Вы знакомы с тестирующей пирамидой, единицей, интеграцией и концевым тестом? Здорово, это основы успешной стратегии тестирования. Однако за последние 10 лет мир развития претерпел огромные изменения, но модель тестирования осталась прежней, и нам интересно, как тестировать такие вещи, как микросервисы, богатые розыгрыши и серверу. Некоторые современные методы дополняют и иногда заменяют устаревшие стек для достижения стратегии более легкой тестирования с лучшей ROI.

пример:

  • Контракты, ориентированные на потребителя, предотвращают проблемы между микросервисами или между вами и потребителями API.

  • Моментальное тестирование можно использовать не только для пользовательского интерфейса, но и для предотвращения регрессии API.

  • Компонентное тестирование — это сбалансированный подход к тестированию микросервисов.

  • Пожалуйста, обратитесь к моему видео на YouTube «Помимо модульных тестов: 5 блестящих типов тестов Node.JS (2018)».

Видео: 5 блестящих методов тестирования Йони Голдберг

https://www.youtube.com/watch?v=-2zP494wdUY&feature=youtu.be

9. Согласуйте свой мониторинг с лучшими практиками SRE/DevOps

В 2019 году даже приложение среднего размера может состоять из десятков физически движущихся частей и должно стоять на вершине этого «большого оркестра» с большой осторожностью. Тем не менее, большинство разработчиков не тратят время на изучение курса мониторинга и оповещения, который более чем готов преподавать. Например, разработчики часто расставляют приоритеты и сосредотачиваются на внутренних аппаратных показателях, таких как ЦП и память, вместо того, чтобы начинать с показателей, которые напрямую влияют на конечных пользователей, таких как частота ошибок или задержка («Я называю это мониторингом на основе симптомов», из «Я предостерегающе философия»). Эти ориентированные на клиента индикаторы также известны как «золотые сигналы», и в 2019 году, возможно, вы захотите начать с них и применить аналогичные передовые методы.

пример:

  • Узнайте о 4 «золотых сигналах» мониторинга

  • Прочтите Google Site Reliability Engineering или хотя бы главу о мониторинге

  • Пакет request-stats может помочь вам извлечь эти метрики, ориентированные на клиента, и поделиться ими с системами мониторинга.

10. Думайте как злоумышленник: повысьте уровень безопасности, изучив инструменты и методы атак

Если вы не можете думать как нападающий, вы не можете думать как защитник. В 2019 году вам не следует отдавать свою защиту сторонней компании или полагаться только на статические сканеры безопасности: объем различных атак огромен (конвейеры разработки и NPM — последние тенденции), а скорость, с которой вносятся изменения, снижается. неуправляемый — за два дня семинара по безопасности команда смогла добавить несколько новых сервисов AWS, типов баз данных и новых ролей IAM… так что скрытые разработчики стали самой большой угрозой, и их обучение казалось окончательным средством. Вы должны внедрить ДНК безопасности в себя и в свою команду и делать все осторожно.

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

пример:

  • Попробуйте OWASP ZAP — многофункциональный инструмент для оценки и проникновения, который позволяет даже новичкам исследовать уровень безопасности приложения.

  • Прочтите мой список лучших практик безопасности Node.js с более чем 23 идеями атак, включая примеры кода JavaScript.

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

11. Разработайте стратегию обновления пакетов. Уроки, извлеченные в 2018 году: преждевременные обновления опасны

У команды обычно есть две стратегии обновления пакетов npm/пряжи: (1) Обновление как можно скорее, и даже с использованием процесса автоматизации (2) вообще не имеет обновленных политик, иногда обновляется по слухам. Хотя первый способ кажется более совершенным, удивительно, что это самый опасный подход 2018 года: сообщество сохраняется в варке всех вредоносных пакетов, найденных в течение 40 дней, в состоянии ожидания, а несчастный пакет сохраняется. Рассмотрите возможность использования инструмента автоматизации для форматирования политик обновления и найдите место между «Полное обновление» и «Обновление».

пример:

  • npq от Liran Tal — отличный установщик пакетов с рекомендациями, который также фокусируется на датах выпуска.

  • Как только пакет будет обновлен, коммерческие инструменты, такие как гринкипер, сразу же будут пиариться. Однако никто не может приостановить обновление, пока релизная версия не будет признана безопасной.

12. Выполните пошаговую установку, различая этапы развертывания и выпуска.

В 2019 году вам может быть полезно выполнять более безопасные развертывания, которые не являются одноразовыми. С точки зрения безопасности, гранулярное развертывание (также известное как канареечное) предполагает 3 этапа: (1) развертывание — отправка нового кода в новую изолированную производственную область (например, новый сервис Kubernetes или экземпляр машины). На данном этапе это для всех, поэтому не бойтесь (2) тестировать — сейчас мало кто может разрабатывать и тестировать новый код в наиболее реалистичной производственной среде (3) выпускать — постепенно позволять большему количеству пользователей выпускать новые версии (например, , все восточное побережье), и когда у вас будет достаточно уверенности, вы сможете стереть старую версию.

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

пример:

  • Узнайте больше о версиях в оттенках серого

  • Spinnaker — это мощная платформа для развертывания, если вы готовы пройти весь путь до развертывания в оттенках серого.

13. Kubernetes поглотил мир

Kubernetes (K8S), инфраструктура, которая беспрепятственно предоставляет компоненты приложений для работы в сети, горизонтального масштабирования, развертывания и других магистральных сервисов, теперь практически является стандартом де-факто для размещения приложений. Его популярность ошеломляет: при поддержке всех облачных провайдеров имеет беспрецедентно масштабируемую эхо-систему, хотя 54% предприятий уже имеют хотя бы один кластер K8S. Если вы новичок, по этой ссылке вы найдете хороший практический обзор. Первый шаг вашего K8S завершен? Обязательно ознакомьтесь с работой Istio, K-Native, Kuberenes, внутренним обзором, сетевой политикой, Helm, Scaffold. В двух словах: любое время, которое вы потратите на углубление своих навыков K8S, окупится.

14. Технология блокчейн открывает большие возможности

В дополнение к биткойнам и криптографическим функциям блокчейн также может использоваться для обработки транзакций в любой распределенной системе.

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

Я не могу много говорить об этом, это может быть доминирующей тенденцией нашего времени. К сожалению, я ничего не знаю о машинных библиотеках, и моя цель на 2019 год — хотя бы уметь говорить об этом с умом и добиваться быстрых результатов (например, можно использовать библиотеки JS, такие как tensorflow.js и brain.js). без сильной помощи в случае с инфраструктурой)

16. Просмотрите код выбранной библиотеки с открытым исходным кодом.

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

17. Углубите свое понимание операционной системы Linux, сосредоточившись на анатомии процессов Linux.

Понимание процессов Linux даст вам реальное конкурентное преимущество, поскольку оно влияет на многие задачи разработки, такие как мониторинг, защита процессов (например, перезапуск), корректное завершение работы с помощью Docker и многие другие. Стремитесь понять жизненный цикл процессов, сигналов, моделей разрешений, общих команд, типов процессов и т. д. Этот учебник охватывает большинство основ.

18. Глубокое погружение во внутренности Node.js

Мне очень нравится цитата Райана Даля (создателя Node.js v0,1): «Вы никогда не сможете понять все. Но вы должны научиться понимать систему». Глубокое понимание лежащего в основе механизма может быть ценным при решении производственных проблем или проектировании некоторых компонентов инфраструктуры (например, мониторинг производительности цикла обработки событий). Вы, вероятно, уже знакомы с основными строительными блоками, такими как v8 и libuv. Разве 2019 год не самое подходящее время, чтобы спуститься в кроличью нору Node.js! Например, чтобы понять, что именно происходит в каждом цикле событий libuv? Или узнать, как взаимодействовать с OS IO (например, с активными дескрипторами)?

пример:

  • Поймите, что происходит в каждом цикле цикла событий от Deepal Jayasekara

  • Узнайте, как упаковать код C/C++ в виде модулей NPM от Константина Таркуса.

  • Посетите эту подробную статью Евгения Обрезкова, посвященную всем внутренним устройствам Node.js.

19. Финал: научитесь использовать научный метод

То, что вы узнаете и усвоите, сформирует вашу будущую карьеру. Однако многие разработчики не имеют ни стратегии обучения, ни того, как эффективно учиться, используя научный метод. Допустим, есть сессия на тему «Как избежать ошибок типов JavaScript», и вице-президент просит продолжать использовать нативный JavaScript без рефакторинга всей кодовой базы (без TypeScript...), и вдруг ваш коллега предлагает процесс Facebook, в комнате Всем это нравится! Вы вдруг вспоминаете, что когда-то читали ее, но она так и не усвоилась, просто проскользнула у вас в голове. Почему это происходит? По-видимому, существует явление, называемое «галлюцинацией конкуренции», которое объясняет, почему мы забываем эти вещи: вы можете потратить час на чтение сообщения в блоге, но вы обманываете себя, что не вспомните его через несколько дней! Исследования показывают, что если вы попробуете поговорить об этом с кем-нибудь позже или снова прочитать краткое изложение на следующий день, вы значительно повысите свои шансы на запоминание концепции. Существует множество других советов, которые помогут вам запоминать и приобретать нужные знания в нужное время (см. примеры ниже), и, потратив несколько часов на изучение того, как учиться, вы сыграете большую роль в своей карьере!

пример:

  • Пройдите крутой курс «Узнай, как учиться».

  • Разделяйте и классифицируйте во время обучения

  • А как насчет изучения новых технологий? Сравните это с существующими вещами, с которыми вы знакомы, поговорите об этом со своими товарищами по команде, задайте себе вопросы «в чем смысл» — зачем вам это нужно, нарисуйте диаграммы, перечитайте резюме, помогите своему мозгу усвоить и отсортируйте это так, чтобы вы Я смогу получить его, когда это будет иметь значение!

Английский оригинал:

https://medium.com/@me_37286/19-ways-to-become-a-better-node-js-developer-in-2019-ffd3a8fbfe38

Хорошая рекомендация статьи:

Что вы думаете об объединении Node.js Foundation и JS Foundation?

«UC International Technology» стремится делиться с вами высококачественными техническими статьями.

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