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

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

Преимущества 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как начать работать с нами?
01
Напишите нам
Поделитесь своей идеей, техническими требованиями и важными деталями
02
Мы обсудим проект
Разработчики предложат решение вашей задачи, а менеджеры подготовят расчёт
03
Выберем формат работы
Мы расскажем о разных моделях работы команды и вашего участия в проекте
04
Составим roadmap проекта
Определим ключевые шаги и сформируем дорожную карту разработки проекта
05
Выделим команду
Найдём специалистов нужного уровня и подготовим их к работе над проектом
06
Подпишем документы
Как только мы определимся с условиями и деталями, подписываем контракт и стартуем
07
Начнём работу
Команда начнёт работу и будет держать вас в курсе продвижения проекта к реализации
  • Взять сотрудников на аутстафф

Аутстаффинг — возможность привлечь сотрудников на проект, не задумываясь об их долгосрочном пути в компании. Особенно удобен аутстаффинг, когда в компании уже имеется команда разработки, но ресурсов не хватает для выполнения поставленной задачи. При аутстаффинге сотрудников компания не перекладывает ответственность на стороннего исполнителя, а сама руководит проектом и принимает все решения. Распространённая практика — аутстаффинг тимлида или 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 и можем обеспечить грамотный менеджмент для работы над проектом — от понимания задачи до запуска. Если у вас ещё нет описания задачи, технический писатель и аналитик из нашей команды помогут вам сформулировать требования и прийти к четкому пониманию целей. Напишите нам, чтобы обсудить ваш проект. 

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