Кто такой DevOps инженер и чем он занимается?
Прежде чем перейти к определению того, кем является DevOps–инженер, сначала разберемся с данным типом подхода к разработке программных продуктов.
Dev – Development – разработка, Ops – Operations – системное администрирование.
В совокупности это набор методов, позволяющий выстроить эффективное взаимодействие между разработчиками и операционным отделом. В традиционном подходе процесс выстроен следующим образом: сначала разработчики пишут код, который затем отправляют на проверку тестировщикам; последние проводят проверку, находят ошибки и отправляют код назад на доработку; в это время администраторы следят за тем, чтобы все это эффективно работало.
То есть каждая из команд работала по отдельности и минимально взаимодействовала с другими отделами. Это имеет множество недостатков. Это значительно замедляет процесс разработки. Тестировщикам приходится проверять очень большой объем кода, что трудозатратно и приводит к риску возникновения человеческого фактора. Разработчикам приходится прилагать немало усилий, чтобы исправить все найденные ошибки и узкие места в программе. И даже после выпуска продукта пользователям приходится часто сталкиваться с багами и другими проблемами, что добавляет работы техподдержке.
DevOps позволяет сделать эти процессы параллельными, что ускоряет цикл разработки. Кроме того, увеличивается объем взаимодействий между членами проекта в разных отделах. Совместно им удается своевременно находить ошибки и узкие места. Это позволяет улучшить код, сделать его более качественным, надежным и безопасным. За счет того, что проблемы решаются на ранних стадиях разработки. На следующих этапах их число сокращается, а значит и снижается трудоемкость процессов.
Какую же роль во всем этом играет DevOps–инженер?
Чтобы объединить усилия команды и выстроить между ними регулярное взаимодействие, потребовался человек со знанием основ метода DevOps. Он помогает систематизировать и автоматизировать процессы, создавая единую структуру, за счет чего оптимизируется разработка.
В небольших компаниях роль DevOps–инженера возлагается на системного администратора. Большие организации имеют отдельную должность для этой работы. В любом случае ключевая цель специалиста заключается в том, чтобы код непрерывно прошел полный жизненный цикл разработки.
Когда и кому нужен DevOps инженер?
В первую очередь он нужен тем организациям, которые занимаются разработкой программных продуктов. Причем неважно, делают ли они это для собственной выгоды или на заказ.
Чтобы возникла потребность во внедрении методологии DevOps, должны возникнуть следующие условия:
Для поддержания высокого уровня конкурентоспособности необходимо часто выпускать новые продукты или обновления.
Есть сложности в налаживании коммуникации между разработчиками, администраторами и тестировщиками, что негативно сказывается на производительности и качестве программных продуктов.
Процесс разработки имеет множество рутинных задач, которые выполняются по большей части вручную, что повышает уровень трудозатрат и замедляет процесс создания нового проекта.
В случае, если компания имеет лишь небольшой отдел разработки для собственных нужд и им не важна скорость выхода на рынок, то внедрение DevOps не требуется. Но если все–таки хочется применить некоторые методики, то достаточно нанять сисадмина, обладающего необходимыми знаниями и владеющего DevOps–инструментами.
Задачи DevOps инженера на разных этапах жизненного цикла продукта.
В процессе планирования с его помощью удается определить архитектуру будущего программного продукта и то, каким образом оно будет масштабироваться.
Проводит регулярный мониторинг работоспособности всех сред разработки и инструментов, которые используются для создания проекта.
По возможности автоматизирует процессы за счет внедрения различных инструментов. Например, добивается использования облачных решений для проведения тестирования, чтобы не задействовать собственное железо.
Участвует в налаживании коммуникации между различными участниками проекта. Это необходимо для того, чтобы разные отделы обладали актуальными данными по продукту и могли предпринимать соответствующие действия.
Помогает устранить проблемы в процессе разработки продукта, а также ищет возможности для улучшения этого процесса.
Помимо инженеров, также бывают DevOps–программисты. Это тип разработчиков, которые не только могут написать код и довести его непрерывно до конца цикла разработки, но и разбираются в администрировании, а также могут создать нужную инфраструктуру для создания продукта. Но это скорее частный, чем распространенный случай, так как он рассчитан на небольшие проекты.
Какими знаниями и навыками должен обладать DevOps инженер?
В идеале, чтобы стать успешным DevOps–инженером, должна быть база в разработке или системном администрировании. То есть, если специалист имеет представление хотя бы об одной из сторон Development или Operations, ему будет проще освоить оставшуюся. Ему это необходимо для того, чтобы в целом понимать процесс разработки со всех сторон и затем грамотно его организовать для всех.
DevOps–инженер должен обладать как техническими знаниями и навыками, так и soft skills. Первые нужны для того, чтобы он мог погрузиться в процесс разработки и не плавать в понятиях. Вторые необходимы для построения взаимодействия между отделами. Рассмотрим требования к DevOps–инженеру подробнее.
Технические навыки.
Иметь навыки системного администрирования Linux, чтобы проводить настройку веб–серверов и осуществлять поддержку работы сайтов.
Обладать знаниями сетевых технологий, чтобы иметь возможность настраивать локальные сети и управлять ими.
Наличие базовых навыков программирования даст большое преимущество. Это позволит не только разбираться в жизненном цикле разработки продукта, но и писать скрипты на различных языках программирования.
Также важно знание технического английского языка, так как большинство полезной информации о DevOps написано именно на нем. Соответственно, за всеми советами и ответами на вопросы придется идти в зарубежную часть интернета.
Знать, что такое облачные решения, уметь выстраивать в них инфраструктуру и работать с ней.
Знать инструмент контейнеризации приложений Kubernetes. Это необходимо для того, чтобы быстро осуществлять доставку кода и масштабировать продукт.
Владеть инструментом конфигурации Ansible. Его применяют при автоматизации настройки и развертывания программного обеспечения. Но в целом для настройки инфраструктуры можно использовать и другие аналоги с похожими функциями.
Обладать навыками настройки конвейера доставки кода. Для этого используются различные инструменты CI/CD, например, такие как Jenkins.
Уверенно использовать GitLab для управления версиями кода.
Владеть языками разметки JSON и YAML. Это текстовые форматы, которые могут легко читаться людьми. Они используются для сериализации сложных структур и считаются более подходящими для этого, чем XML.
Знать и владеть инструментами для мониторинга системы, которые необходимы для того, чтобы находить там ошибки.
Прокаченные навыки коммуникации.
DevOps–инженер сам по себе должен иметь развитые навыки коммуникации, иначе он не сможет расположить к себе команду и уж тем более объединить разные отделы между собой.
Умение сотрудничать.
Можно обладать прокаченными техническими навыками, хорошо знать языки программирования, но умение работать в команде и идти по необходимости на компромиссы не менее важно. Не зря во время анкетирования кандидатов есть опрос, в котором необходимо указать степень влияния различных факторов на эффективность работы. Среди прочего там указан пункт «Здоровые отношения в коллективе/дружеская атмосфера в команде» и прочие похожие формулировки. Конечно, от одного сотрудника может быть немало пользы, но от слаженной команды ее будет гораздо больше.
Способность к обучению и к преподаванию.
Для DevOps–инженера важно постоянно развиваться и расти в профессиональном плане, ведь от его действий и знаний зависит эффективность работы целой команды. Он должен предоставлять специалистам актуальную и достоверную информацию, которая позволит повысить их производительность. Кроме того, инженер должен быть готов к обучению других членов команды, которые не посвящены в особенности методологии DevOps.
Умение решать конфликты.
В случае перехода от одного метода разработки к другому, не все члены команды могут быть настроены позитивно. Кто–то может воспротивиться самой смене условий, у кого–то может возникнуть конфликт на фоне интересов. Причин для стычек может быть много, но нужно умело их разрешать, чтобы это не отразилось негативно на производительности.
Критическое мышление.
Этот навык пригодится во множестве случаев. Например, для принятия решений, при выборе инструментов, для решения конфликтов и много другого.
Аналитические способности.
DevOps–инженеру постоянно придется работать с большим объемом самой разнообразной информации, поэтому ему нужно уметь ее анализировать и вычленять самое важное. Даже если он будет иметь инструменты, которые имеют функцию визуализации данных, их необходимо правильно интерпретировать, чтобы это не привело к возникновению ошибок.
Толерантность.
Состав команды может быть абсолютно разным. Можно, конечно, утверждать, что все участники проекта профессионалы, но, разумеется, есть свои «но». DevOps–инженер должен быть терпимым к любым расам, религии, культуре, так как является примером для всей команды.
Это минимальный набор, который можно считать базовым. В каждой компании будут свои требования. Их укажут в резюме или огласят на собеседовании, если речь идет о повышении на карьерной лестнице.
Какие имеет преимущества и недостатки профессии DevOps-инженер?
Методология DevOps набирает все большую популярность среди команд разработки, так как обладает множеством преимуществ. Она оптимизирует процессы за счет автоматизации рутинных задач, а также за счет выстраивания открытой коммуникации и доверительных отношений между отделами. Каждый член команды понимает цель проекта одинаково, что снижает риск возникновения ошибок.
Кроме того, специалисты погружены в процесс и имеют представление о роли каждого, что позволяет не только лучше выстраивать работу, но и формировать командный дух. Каждый осознает не только свою собственную ценность, но и ценность других членов команды.
Это позволяет DevOps переместиться из нишевой отрасли в глобальную, что подтверждают данные Research and Markets. Лишь в 2020 году рост доли на рынке произошел на 29,3%. С каждым годом спрос на инженеров и программистов DevOps становится только выше. Причем даже начинающим специалистам предлагают высокие заработные платы и прочие выгодные условия сотрудничества.
Пройти обучение по этой специальности можно на различных электронных курсах, но поддерживать и повышать уровень квалификации придется постоянно. IT–сфера никогда не стоит на месте, да и сами методы разработки периодически пересматриваются и улучшаются.
Теперь рассмотрим достоинства и недостатки профессии DevOps–инженер.
Плюсами можно назвать:
Востребованность.
Скорость разработки растет ввиду высокой конкуренции и спроса на программные продукты на рынке. Разработчики вынуждены искать решения, которые позволят им работать в наиболее комфортных условиях. Для этого осваивают различные инструменты автоматизации и облачные сервисы. Чтобы это все эффективно работало и команда могла это использовать независимо от своего географического положения, и нужны DevOps–инженеры.
Таких специалистов на рынке пока что недостаточно, чтобы полностью закрыть спрос. А по–настоящему высококлассных специалистов ещё меньше, потому что профессия относительно молодая. По этой же причине им предлагают высокий уровень дохода. И действительно готовы за это платить, если результат будет очевиден и предсказуем.
Разнообразие задач.
Если специалист имеет широкий спектр навыков и знаний в сфере программирования, но пока что не знает, куда именно он хочет углубиться, то вакансия DevOps–инженера будет подходящим вариантом. Этот специалист выполняет множество различных задач и должен владеть большим количеством инструментов для администрирования и разработки. Скучать вряд ли придется.
Способ релокейта.
В России и странах СНГ DevOps пока что недостаточно востребован по сравнению с заграницей. Там данная модель разработки весьма востребована, поэтому есть высокий спрос на инженеров и программистов. Соответственно, некоторые специалисты могут освоить эту профессию для дальнейшей релокации. Для тех, кто не решится на переезд, работы все равно хватит.
К минусам можно отнести:
Сложность.
DevOps–инженер является универсальным солдатом в IT–сфере. Даже на старте карьеры у него должен быть достаточный уровень сопутствующего опыта, а также развитые технические навыки и soft skills. Знать языки программирования недостаточно, поэтому кандидату придется пройти жесткий отбор, чтобы получить вакантное место в компании. Для русскоязычных разработчиков все усложняется тем, что большинство информации для саморазвития доступно лишь на английском языке, а поехать на обучение за границу весьма затруднительно.
Особая важность практики.
Разумеется, одной лишь теорией все не ограничивается. Важно постоянно оттачивать знания на практике, что не всегда возможно. Не так много компаний могут дать опыт именно по DevOps, потому что метод просто–напросто у них не внедрен. Поэтому приходится искать смежный опыт, который будет максимально приближен к требованиям.
Новизна профессии.
DevOps появилась в 2009 году и за 15 лет все ещё остается относительно новой методологией, которая лишь набирает обороты. Не во всех странах она одинаково хорошо распространяется, поэтому где–то для ее освоения и внедрения созданы все условия, а где–то нет.
Часто компании не до конца понимают, кто такой DevOps–инженер и зачем он, собственно, нужен. Это может привести к тому, что специалист будет попросту заниматься не своими обязанностями и задачами. Соискатель должен сразу обозначить свой круг компетенций, чтобы работодатель имел представление, справится ли специалист с поставленными целями. А инженер даст знать, что намерен заниматься именно внедрением и управлением DevOps, а не приносить шефу кофе с булочкой из кафешки за углом.
В чем разница между DevOps и Agile?
Agile–разработку часто сравнивают с другими методами создания программных продуктов. На самом деле это даже целый набор практик, которые пришли из разных сфер деятельности, от промышленности до коммерции.
В основе Agile лежат четыре ключевых идеи:
Люди и коммуникация между ними играют более важную роль, чем процессы и инструменты, которые для этого используются.
Гораздо важнее иметь качественный и работающий продукт, чем глубоко детализированную документацию по нему.
Условия контракта между разработчиком и заказчиком важны, но сотрудничество и регулярное взаимодействие для получения обратной связи по продукту ещё важнее.
Команда должна быть готова к любым изменениям на любом этапе разработки. В особенности, если это позволит улучшить продукт.
Agile ставит в приоритет снижение рисков за счет разделения рабочего процесса на короткие циклы. Практики данного подхода к разработке часто используют в небольших и средних командах, где допустим либеральный стиль управления проектами.
DevOps является самостоятельной методологией управления разработкой, которая предлагает автоматизировать повторяющиеся рутинные задачи, чтобы оптимизировать процесс. Этот подход часто используется в тех случаях, когда команде нужно быстро перенести программный продукт в производственную среду с большой долей повторений.
DevOps имеет три главные ценности:
Непрерывная доставка кода, которая позволяет создать качественный продукт в короткие сроки.
Обратная связь внутри команды, что дает возможность обмениваться опытом и актуальной информацией по проекту.
Постоянное обучение позволяет улучшить навыки специалистов, что, разумеется, положительным образом скажется на качестве программного продукта и эффективности процессов.