Главная/ Блог/ Нанять Go разработчика

Как найти и нанять Golang разработчика

Использование языка Go может усилить ваш проект. Но чтобы использовать его преимущества вам нужны опытные разработчики. Как их найти и понять, что они смогут превратить сервисы на Go в сильные стороны продукта? Мы применяем этот язык для клиентских проектов, например, в финтех-проектах или для разработки частей ERP, и делимся своей экспертизой, чтобы вы могли собрать свою Go-команду.

June 2024

Преимущества Golang

Golang, или просто Go, — многопоточный язык программирования, разработанный командой Google в 2007 году. Язык создавался для решения проблем, с которыми сталкивалась компания, и был призван повысить скорость разработки, сделать процесс более эффективным и масштабируемым. Поддержка Google и многочисленные преимущества сделали язык популярным.

  • Простота

Официальная спецификация Go умещается на 50 страницах, что не сравнится с сотнями страниц спецификации Java. Язык состоит из простых конструкций, использует достаточно простой синтаксис. Это качество языка упрощает изучение и написание кода. Простой синтаксис облегчает чтение чужого кода и поддержание сервиса. При создании языка для Google было критически важно, чтобы любой разработчик из многочисленной команды мог разобраться в коде, написанном другим сотрудником.

  • Высокая скорость исполнения

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

  • Встроенные инструменты

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

Инструмент GoDoc анализирует исходный код и комментарии и автоматически генерирует документацию в формате HTML или текстового документа. GoDoc упрощает процесс написания документации, поэтому используется всем сообществом go-разработчиков.

  • Конкурентность и параллелизм

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

Сферы применения языка

Язык востребован в самых разных отраслях. В стандартной библиотеке Golang имеется необходимый функционал для работы с сетевыми запросами. А параллелизм языка позволяет задействовать максимум ресурсов при разработке. Поэтому Go получил широкое распространение в сфере разработки микросервисов и сетевых приложений.

На этом использование Golang не ограничивается. Пакет GopherJS используется для переноса Go кода в чистый JS, а значит, Go может использоваться при разработке на фронтенде. С коллекцией библиотек Gonum в некоторой степени Go можно применять и для сбора и обработки данных, проведения вычислений. На языке Go написано много популярных инструментов разработки: Docker, Kubernetes, Terraform, Prometheus. Знание языка помогает DevOps инженерам углубиться в эти инструменты и их использование.

Язык Go создавался под нужды Google, и компания применяет язык во множестве внутренних проектов. Но Go получил широкое распространение и среди других крупных компаний.

  • Инфраструктурное ПО и веб-сервисы

Docker — инструмент для быстрого развёртывания приложений и управления контейнерами, знакомый многим разработчикам и системным администраторам. Docker написан на языке Go, что даёт пользователям удобный механизм для интеграции ПО в свою экосистему, делает технологию изоляции процессов отзывчивой. Kubernetes, Terraform — другие инструменты, используемые DevOps-инженерами и написанные на Golang.

Golang использовался при разработке инфраструктуры GitHub, крупнейшей социальной сети для разработчиков и совместной работы над IT-проектами.

С ростом числа запросов Bitly, сервис сокращения URL, переписал некоторые сервисы с Python на Go. Язык используется при написании кода для распараллеливания и балансировки HTTP-запросов к нижестоящим системам.

  • Медиаплатформы

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

Netflix использует Go, чтобы обработать большое количество запросов, приходящих одновременно.

Видеостриминговый сервис Twitch использует комбинацию Go и C++ при потоковой передаче данных. Golang помогает достичь высокого качества видеостриминга.

  • On-demand сервисы

Сервис Uber использует Go в работе функции GeoFence, чтобы показать доступность автомобилей в определённом месте и отображать изменение цены в районах с высоким спросом. Компания выбрала язык за скорость, с которой технологии на Go могут обрабатывать сотни тысяч запросов.

Другой сервис заказа такси, Gett, практически всю продуктовую веб-разработку ведёт на Golang. Например, функции отображения местоположения машины и её движения к клиенту были написаны на Go.

  • Интернет-магазины и маркетплейсы

Несколько лет назад интернет-магазин Ozon начал переходить на микросервисную архитектуру с использованием Go, Kubernetes и других инструментов, написанных на Golang. Компания использует адаптеры для Go в инструментах для высоконагруженных систем.

Lamoda тоже широко использует микросервисную архитектуру на основе Go и даже выложила свою библиотеку для тестирования сервисов в open-source.

Наши проекты на Golang

 СберМегаМаркет - усилили in-house команду маркетплейса и разработали новые фичи для e-Commerce платформы.

Cryptopay — интегратор для инструментов платежных систем и транзакций по купле, продаже и обмену криптовалют. Бэкенд сервиса написан на Go и Ruby.

Humaniq — блокчейн-платформа и финансовое мобильное приложение для аудитории пользователей с высоким уровнем безграмотности.

Vexor — облачный сервис непрерывной интеграции.

Разработка CRM-системы для KFC. На языке Go был разработан UserAPI, высоконагруженный микросервис для взаимодействия со внешними устройствами.

Opensource решение - Go-clean-template: шаблон чистой архитектуры для сервисов на Go.

 

Где искать Golang разработчиков?

Хотя языку Go уже больше 10 лет, он всё ещё считается молодым, и на большой спрос приходится не так много программистов. Конкуренция за таланты очень высокая. Помимо компаний, с нуля создающих проекты на Go, есть ещё компании-гиганты, которые решили перейти с монолитной архитектуры на микросервисную и для этого нанимают десятки или, как Ozon, сотни программистов на Golang.

  • Сайты с вакансиями и резюме вроде hh.ru и «Мой Круг»

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

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

  • Тематические сообщества

Активное онлайн-комьюнити — черта многих языков программирования. Сообщество русскоязычных golang-программистов можно найти по тегу #golang на русскоязычном StackOverflow. Вакансию можно разместит в Slack- и телеграм-чатах. 

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

  • Конференции и митапы

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

  • Обратиться в рекрутинговое агентство

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

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

  • Отдать проект на аутсорс

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

Аутсорсинг проекта — это возможность быстро преодолеть расстояние от этапа «задача поставлена» до этапа «задача в разработке». Заполните заявку и мы подберем команду и запустим проект за 3 дня. 

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

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

Процесс найма Go разработчика на аутсорс

  • Взять сотрудников на аутстафф

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

Что должен знать Go разработчик, и как об этом спросить на собеседовании?

Хотя порог вхождения в Go и невысокий, чаще можно встретить резюме разработчиков, которые начинали с других языков и со временем перешли на Golang. Часто такие инженеры уже знакомы с основами программирования, инструментами управления версиями кода, принципами разработки продукта и в целом легче осваивают новый язык. Поэтому при общении с кандидатами стоит обращать внимание на моменты, с которыми чаще всего возникают сложности. Например, задавать вопросы на понимание горутин и каналов.

Примеры вопросов на понимание синтаксиса, конструкций и парадигм языка:

  • Какие есть принципы отношений объектов в Go?
  • В чём различия горутины от потока системы?
  • Как устроен срез, и чем он отличается от массива?
  • Что такое канал, и какие типы каналов бывают в Go?
  • Как работают буфферизованные и небуфферизованные каналы?
  • Является ли Go языком ОПП?

Вопросы на знание инструментов:

  • Каким редактором разработки пользуетесь?
  • Какими инструментами для управления зависимостями вы пользовались?

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

Опыт работы с базами данных

Go широко используется для написания серверных приложений, что требует взаимодействия с базами данных. Для работы с реляционными базами данных применяется встроенный пакет database/sql.

Примеры вопросов, чтобы оценить, как разработчик работает с БД:

  • Как собирать метрики по пулу соединений?
  • Что делать, если в пуле нет соединений?
  • Зачем закрывать подключение к БД?

Опыт разработки микросервисной архитектуры

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

Какие вопросы задать на собеседовании:

  • Какие есть недостатки микросервисной архитектуры, а в чем её преимущества перед монолитом?
  • Какие инструменты вы использовали для трассировки сервисов в прошлом проекте?
  • Какие низкоуровневые события из стандартной библиотеки или среды выполнения могут быть включены в трассировку?
  • Что такое потокобезопасность?
  • Как работать с консистентностью данных между несколькими микросервисами?

Gokit — это стандартный набор пакетов для реализации различных компонентов микросервисной архитектуры. В работе также используются gRPC, микрофреймворк Gin, Go-micro, Gizmo, Micro, Echo, HTTP-стек. Инструментов много, и стоит тестировать на знание тех, которые действительно будут необходимы.

Дополнительным источником вопросов и практических задач для собеседования разработчиков микросервисов может послужить телеграм-канал Golang задачи с собеседований. На канале можно найти вопросы на знание языка, горутин, фреймворка Gin, системы gRPC, архитектуры и HTTP стека.

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

Как определить грейд разработчика?

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

Junior-разработчики часто не имеют коммерческого опыта разработки, многие инструменты знают в теории, а не на практике. Поэтому в работе часто обращаются за помощью к программистам с большим опытом. Если компании нужно быстрое решение и она не готова тратить ресурсы на обучение новых сотрудников, стоит искать middle и senior golang-разработчиков.

Знания middle-разработчика хорошо систематизированы, он в состоянии самостоятельно решать задачи. Такой специалист понимает контекст, в котором работает, принимает решения, учитывая технические особенности и бизнес-задачи. Но в отличие от senior-инженера middle-разработчик не всегда представляет картину целиком, не может оценить, как решение интегрируется в архитектуру проекта.

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

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

  • Какую роль вы играли в работе над последним проектом?
  • Что было самым сложным, а что не вызывало затруднений?
  • Как проводите тестирование кода?
  • Участвовали ли вы в принятии продуктовых и технических решений?

Инхаус-команда, аутсорс или аутстафф?

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

Сравнение найма разработчиков в штат или на аутсорс

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

Как выбрать агентство

Первое, на что стоит обратить внимание, — участвует ли агентство в митапах, конференциях или других мероприятиях по своему профилю.

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

Третье — отзывы других компаний, которые уже работали с агентством. Если нет отзывов на сайте, запросите их. Если нет вообще — аккуратней.

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

Пятое — обратите внимание на список услуг и возможностей. Маленькие агентства обычно предоставляют только один вид разработчиков и один тип оплаты. Более крупные могут предложить разработчиков из разных сфер (backend-, frontend-разработка, аналитика, дизайн) и технологий (Ruby, Python, Golang, Rust, Javascript, Typescript и т.д.), по одному или целой командой, в том числе с тимлидом или техническим директором.

Расскажите о вашем проекте, и мы будем рады помочь в его разработке и развитии

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

Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.