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