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

Rust — молодой и всё ещё редкий язык для российского комьюнити, однако мы уже использовали его в нескольких проектах и понимаем, какие задачи удобно решать с его помощью. Например, написанное на Rust ПО устойчиво к уязвимостям. Нанять rust-программистов будет непросто, так как язык не очень популярен, а значит и оценить их компетенцию будет сложнее — нужны специфичные знания. Эта статья поможет вам разобраться с этим, а также объяснит, в каких случаях стоит набирать команду в штат, а когда лучше отдать задачу на аутсорс. 

История и характеристики языка

Работу над Rust начал сотрудник Mozilla в 2006 году, спустя пару лет компания заинтересовалась технологией и начала активно поддерживать её развитие. Рабочая версия Rust 1.0 была представлена в мае 2015 года.

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

Rust быстр и эффективен в работе. Программы напрямую компилируются в машинный код, а ключевой особенностью языка является отсутсвие сборщика мусора. Производительность языка сопоставима с показателями языков C и C++ и порой превосходит Swift, Go или Java. Тот факт, что Rust не позволяет одновременно использовать состояния между потоками или задачами, позволяет достигать максимальной производительности, например, в программировании сетевых задач. 

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

Во время разработки на Rust программисту не приходится осваивать сторонние программы и библиотеки. Встроенный менеджер пакетов Cargo поддерживает написание, тестирование и развертывание кода. Так, пакет cargo doc используется для генерации документации, cargo build — инструмент компиляции кода для Windows, Linux, OSX. Он легко расширяем с помощью дополнений, что дает разработчикам возможность легко добавлять в него отсутствующую функциональность.

  • Универсальность

Изначально Rust задумывался как язык системного программирования. Но благодаря своим характеристикам он получил применение в разных сферах. Фреймворки yew и actix-web позволяют писать фронтенд- и бэкенд-код, создавать мощные веб-приложения и сайты. Строгие требования к безопасности и небольшой расход ресурсов позволяют использовать Rust для сетевого программирования и при разработке встраиваемых систем, применять в разработке блокчейн-сетей, кроссплатформенных инструментов командной строки и игровых движков. 

  • Безопасное управление памятью

Концепция владения в Rust обеспечивает безопасную работу с памятью без ущерба для производительности. Система владения позволяет компилятору оперативно управлять памятью, а в случае, если программа небезопасна, она не сможет пройти стадию компиляции. Это помогает избежать ряда ошибок: неожиданного сбоя, утечки информации и выполнения произвольного кода. Благодаря этому свойству Rust используется для создания многопоточных сервисов и сервисов с высокими требованиями к безопасности. 

Понятие владения и заимствования — не только значительное преимущество Rust, но и причина, по которой язык довольно сложен для изучения. Разработчикам нужно не просто освоить новый синтаксис: на освоение ключевых концепций уходит значительно больше времени, чем, например, на овладение языком Python или Go.

Сферы применения Rust

Как компания, во многом причастная к развитию языка, Mozilla широко использует Rust в работе над своими сервисами — например, в браузерном движке Servo. Компания отмечает, что концепция владения делает процесс написания параллельного кода простым и безопасным. Программисты могут повторно использовать код для сокращения циклов разработки без угрозы для безопасности, экономят время на проведении peer reviews и тестировании кода. Наконец, новым членам команды проще влиться в процесс.

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

Образовательная платформа Coursera написала на Rust ряд дополнительных инструментов для оркестрации контейнеров. Язык был выбран за потокобезопасность и безопасность памяти, а также удобство экосистемы и встроенных инструментов. 

Команда разработчиков Amazon Web Services написала на Rust Firecracker, технологию виртуализации с открытым исходным кодом. Платформа работает с AWS Lambda и Fargate и предоставляет средства для создания и управления изолированными окружениями и сервисами. Firecracker оптимизирует расход ресурсов и пользовательский опыт клиентов Lambda и Fargate. 

Redox — Unix-подобная операционная система. На Rust написана основная часть ПО, собственная стандартная Си-библиотека, библиотеки для работы с EFI, загрузочный код и другие элементы сервиса. 

Наши проекты с использованием Rust

Dotenv-linter — анализатор, который проверяет .env файлы, где хранятся все переменные окружения приложения, на наличие самых частых ошибок. Например, дублирование имён, неправильный разделитель, переменные без значения. Своевременная проверка помогает избежать ситуации, когда для решения небольшой проблемы привлекаются несколько разработчиков и тимлид. Анализатор написан на Rust, что обеспечивает быструю работу и запуск вне зависимости от используемого в вашей компании языка программирования. 

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

Где найти Rust-разработчика?

Rust — молодой язык с высоким порогом входа, и на данный момент не так много программистов успели им овладеть. Будьте готовы к тому, что найти и нанять Rust-разработчика со всеми необходимыми компетенциями — это дорого и долго. 

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

Рекрутинговые сайты дают много возможностей для узконаправленного поиска. Например, вы можете перечислить в строке поиска технологии, которые должен знать ваш будущий инженер помимо Rust. Или отсортировать кандидатов по сфере применения языка — например, указав ключевое слово «блокчейн». А если у вас есть негласный «чёрный лист» или договорённость о непереманивании, из списка можно исключить сотрудников конкретной компании. 

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

Тематические чаты и каналы дают возможность охватить сразу большую аудиторию программистов на Rust. Вакансию можно опубликовать в чате Rust Jobs - вакансии & резюме. В чатах Rust — русскоговорящее сообщество и Rust GameDev правила запрещают публиковать предложения по работе, но активное участие в диалоге поможет сориентироваться в рынке или самостоятельно найти интересных вам кандидатов. Например, вбейте в строку поиска по истории переписки слова «увольняюсь», «ищу», «резюме», упоминание грейда или технологий и вступите в беседу с релевантными участниками.  

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

На протяжении уже нескольких лет Rust занимает первое место в рейтинге любимых технологий на Stack Overflow. Живой интерес к языку и его активное развитие подогревают оффлайн-сообщество. Конференции и митапы — хороший способ познакомиться с большим количеством разработчиков и перенять международный опыт. Такой вариант больше подходит для компаний, нуждающихся в целой команде Rust-разработчиков для долгосрочного сотрудничества.

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

Rust пока ещё мало распространён в России, поэтому на поиски специалистов уходит достаточно много времени. Обращаясь в агентство, вы перекладываете времязатратную задачу по поиску и первому контакту с программистами на рекрутеров. На стороне компании-нанимателя остается ответственность за техническую оценку кандидатов и проведение интервью.

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

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

Дополнительное преимущество — это скорость. Часто, чтобы закрыть задачу, нужна целая команда разработчиков. На то, чтобы её сформировать, отладить процессы и коммуникацию, может уйти до нескольких месяцев. А это критично, если вам, например, нужно за короткий срок запустить пробную версию сервиса. Аутсорсинг проекта не требует решения длинной цепочки административных вопросов: вы выбрали исполнителя, обсудили требования, и агентство за 2–3 дня приступило к работе.  Пример процесса найма в Evrone выглядит так:

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

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

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

Что должен знать и уметь Rust-программист?

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

Как об этом спросить во время собеседования:

  • Какой тип строки используется в Rust? В чём разница между Strings и &str?
  • Как произвести асинхронный ввод/вывод в Rust?
  • Как вы проводите повторное использование кода, написанного на Rust?
  • Расскажите о концепции владения и заимствования, как они реализуются при написании кода. 
  • Выделяется ли дополнительная память при передаче среза?
  • Когда можно использовать указатели?

Остальные навыки накладываются на эту основу. Например, при разработке клиентской части веб-приложений на Rust часто используется фреймворк yew. Для кросс-компиляции кода, помимо yew, применяется cargo-web. При разработке серверной стороны может быть использован фреймворк actix-web. Разработчик должен знать yew и actix-web или эквивалентные технологии. 

Примеры вопросов для собеседования веб-разработчика:

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

Помимо вопросов на знание инструментов для работы на Rust, расспросите кандидата о его прошлом опыте. Это поможет определить грейд программиста и то, сможет ли он быстро влиться в вашу команду.

Примеры вопросов:

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

Джуниор-программист, скорее всего, не имеет опыта коммерческой разработки на Rust. Middle хорошо знаком не только с базовыми принципами, но и с дополнительными инструментами. Главная ценность Senior-разработчика — это способность анализировать бизнес-логику и принимать решения на уровне архитектуры. 

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

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

Evrone успешно применяет Rust в реализации самых разных проектов, включая собственный инструмент непрерывной интеграции Vexor и open-source решение для проверки .env файлов Dotenv-linter. Расскажите нам о своей задаче, и наша команда разработает сервис с моментальной обработкой запросов, защищенное от уязвимостей программное обеспечение или другой продукт. 

 

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