Карьера Программирование

Что нужно знать, чтобы стать DevOps-инженером: ключевые навыки

DevOps-инженер — одна из самых востребованных IT-профессий. Согласно исследованию Яндекса с HeadHunter, спрос работодателей на таких специалистов вырос на 70% за последние несколько лет.

С чем связана популярность DevOps, какие обязанности выполняет DevOps-инженер, почему необходимо владеть инструментами из смежных IT-специализаций и прокачивать софт-скиллы. Рассказывают преподаватели курса «DevOps-инженер» в Нетологии Senior Infrastructure Engineer в Snapcart Роман Гершкович, Principal DevOps Engineer в Snapcart Андрей Борю и DevOps Engineer в Центре развития перспективных технологий Евгений Родионов.

Логотип Нетологии

Редакция Нетологии


DevOps-инженер: откуда он взялся и чем так хорош

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

Существует несколько причин, почему компании внедряют DevOps:

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

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

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

Всё это объясняет, почему DevOps-инженеры становятся востребованными во всём мире, в том числе и в России. Так, количество открытых вакансий на HH.ru превышает количество резюме соискателей. А нижняя планка оплаты junior-специалиста в российских компаниях начинается от 90 000 рублей в месяц.

Ввиду специфики профессии стать DevOps-инженером не так-то просто. Для этого необходимы широкие технические знания, навыки работы с множеством инструментов и хорошо прокаченные софт-скиллы. Кажется, что это такая профессия, где DevOps-инженер должен усидеть на нескольких стульях одновременно и не упасть.


Хард-скиллы: обязанности и инструменты DevOps-инженера

Под словом DevOps в разных компаниях понимают разные вещи, поэтому однозначного списка смежных специализаций нет. Внутри DevOps такое количество направлений, что их изучения хватит на 10 лет карьеры. Кроме того, в одних компаниях используют облачные сервисы, а в других — железо, собственное или арендованное. Соответственно, требуемые знания опять же будут зависеть от того, в какой компании работать.

Чтобы понять, какие навыки нужны DevOps-инженеру, разберёмся, чем он занимается и с какими инструментами работает.

Если смотреть в общем, то DevOps-инженер:

  • синхронизирует все этапы создания программного продукта;
  • выступает связующим звеном между отделами разработки и администрирования;
  • автоматизирует выполнение их задач, внедряя различные программные инструменты.

В частности такой специалист занимается:

  • Непрерывной интеграцией (CI), когда изменения кода регулярно объединяются в центральном репозитории, после чего происходит автоматическая сборка, тестирование и запуск кода. Так решается задача по быстрому поиску и исправлению ошибок и улучшению качества продукта.
  • Непрерывной доставкой (CD), когда при любых изменениях код проходит сборку и тестирование, попадает в тестовую (или подготовительную) среду перед окончательным выпуском.
  • Виртуализацией или управлением инфраструктурой с использованием подхода Infrastructure as code (IaC). Вся разработка в компании может вестись на разных языках при помощи разных технологий и использовать виртуализационные слои. Автоматизацией, когда в компании все шаги необходимо автоматизировать: и тестирование, и доставку кода, и создание контейнеров, и откатку кода в случае ошибок, и получение фидбека от конечных пользователей.
  • Мониторингом, чтобы следить за всем, что происходит во всех частях системы. И если произошел сбой, компания узнает об этом первой, а не тогда, когда об этом сообщит заказчик. Для этого создаётся система оповещения, которая уведомляет дежурных инженеров.

Исходя из направлений деятельности на практике используют следующие инструменты:

  • Непрерывная разработка и интеграция: Jenkins, TeamCity, GitLab, Bamboo, Github Actions, AWS CodePipeline.
  • Архитектура как код: Terraform, Puppet, Ansible.
  • Облачная архитектура: AWS, Google Cloud Platform, Microsoft Azure, Huawei Cloud, Яндекс Облако, Mail.ru Cloud Solutions.
  • Мониторинг: Prometheus, Grafana.
  • Системы логирования, трассировки: ELK Stack, Graylog, Grafana, Jaeger.
  • Контейнеризация и оркестрация: Docker, Podman, Kubernetes, Rancher.

Если выделять хард-скиллы по технологиям, то:

Junior

  • основы Linux-администрирования, git;
  • умение писать простые скрипты для автоматизации на Bash;
  • умение дебажить (отлаживать);
  • знание контейнеризации и оркестрации;
  • базовый мониторинг готовыми средствами.

Middle

  • умение разбираться глубоко в производительности систем (не просто поставить MySQL, а посмотреть все настройки, explain медленных запросов и построить индексы);
  • Python/Ruby/Go;
  • более строгие DSL (например, Puppet);
  • знание сетей, балансировка, автоматическое переключение разных компонентов без потери работоспособности;
  • умение дополнять мониторинг под свои нужды.

Senior

  • все те же навыки, только глубже проработанные. Здесь навыки зависят от задач компании: написать eBPF для отладки, внедрять Test-driven-development с хорошим покрытием тестами Rspec/Serverspec, отвечать за архитектуру инфраструктуры в целом — всё это относится к DevOps;
  • фокус на выполнение SLA, разбираться в SLO, SLI.

 Профессия

DevOps-инженер

Узнать больше

  • Освоите одну из самых высокооплачиваемых IT-профессий
  • Выстроите процесс DevOps с помощью облачных сервисов уже во время обучения
  • Пройдёте оплачиваемую стажировку в «Express 42» — лидере DevOps-консалтинга


Софт-скиллы: почему они нужны DevOps-инженеру и как их развивать

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

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

Среди таких скиллов особенно выделяются:

  • коммуникабельность;
  • клиентоориентированность;
  • эмоциональный интеллект;
  • способность принимать взвешенные решения и нести ответственность за них;
  • спокойствие в стрессовых ситуациях;
  • инициативность и вовлечённость;
  • знание английского языка;
  • навыки презентации.

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

Для развития коммуникабельности нужно интересоваться, что происходит у коллег и обсуждать рабочие вопросы. Обращайте внимание, насколько чётко и понятно вы формулируете свои мысли при постановке задач. Ведь важно, чтобы собеседник понял именно то, что вы имеете в виду. Первыми спрашивайте, все ли ясно, нужны ли дополнительные пояснения по задаче, есть ли вопросы у собеседника.

Не стоит забывать и о неформальном общении. Предлагайте коллегам совместный досуг: дискуссии на любые интересные темы, командные игры или поход в бар. И не забывайте говорить, спрашивать и слушать.

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

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

Эмоциональный интеллект или эмпатия. В команде всегда работают люди с разным бэкграундом. У них могут быть различные точки зрения. А кроме этого, каждый член команды — живой человек со своими личными проблемами и переживаниями, которые тоже влияют на процесс работы. И DevOps-инженеру нужно понимать это и относиться к коллегам с сопереживанием. Важно обсуждать и прислушиваться к человеку, а не игнорировать или давить на него.

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

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

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

Спокойствие в стрессовых ситуациях. Необходимо учиться прогнозировать стрессовые ситуации и заранее составлять алгоритм действий в такие моменты. Навык можно хорошо отработать и на практике: предложите команде специально «сломать» что-нибудь, то есть создать стрессовую ситуацию, и заняться её решением. Зафиксируйте, сколько времени на это ушло, насколько слаженно работала команда, какие проблемы подсветила эта ситуация, насколько чёткими и ясными были ваши команды. Когда вы заранее готовитесь к форс-мажорам, в нужный момент вы будете знать, что делать.

Инициативность и вовлечённость. Если что-то не в вашей зоне ответственности, но вы знаете, как улучшить что-либо, предлагайте. А лучше сделайте и продемонстрируйте результаты. А вовлечённость, пожалуй, самый важный навык DevOps-инженера. Не критично, если специалист чего-то не знает в полном объёме. Но если он заинтересован в развитии проекта, радеет за него и постоянно изучает что-то новое, такой сотрудник бесценен в любой компании.

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

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

Навыки презентации. Зачастую DevOps-инженеру необходимо продемонстрировать свои идеи по проекту или усовершенствованию работы компании. А для этого нужно презентовать эту идею так, чтобы ее было интересно воспринимать и вербально, и визуально.

Этот навык можно развить, посещая различные тематические конференции и наблюдая за подачей спикеров. Ещё лучше — самому выступать с докладами, чтобы отработать навык на практике.

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

Изначально материал опубликован на vc.ru


Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

Телеграм Нетологии