← Все вакансии

Разработчик в группу системы сборки и тестирования

Мы разрабатываем систему сборки внутри монорепозитория, которая обеспечивает статическую, герметичную, воспроизводимую и инкрементальную сборку, тестирование и пакетирование исходного кода на шести языках (С++, Python 2/3, Java, Kotlin, Go, TypeScript) с возможностью кросс-компиляции и прозрачного interoperability между языками.

Система сборки состоит из двух частей:

Утилита ymake


Написана на C++, выполняет анализ зависимостей и создаёт граф сборки — как и в каком порядке надо собирать код.

Наша команда


Развивает утилиты ya-bin и test_tool, написанные на Python 3, и предоставляет пользовательский CLI (интерфейс командной строки), запускает команды сборки, поддерживает изоляцию, обеспечивает взаимодействие с тестовыми фреймворками для разных языков программирования и агрегирует результаты.

Задачи и обязанности

Развитие модели системы сборки и тестирования


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

Написание эффективных алгоритмов


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

Работа с пользователями


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

Поддержка гарантий


Система сборки — это основа инфраструктуры: релизных процессов, инкрементальной сборки и тестирования. Это накладывает на нас определённые требования. Мы хотим, чтобы полученный в результате артефакт или тест работал одинаково вне зависимости от машины, на которой он был собран и запущен. Для этого мы пишем кросс-платформенный код, следим за функциональной совместимостью результатов компиляций и кросс-компиляций, не даём окружению «протечь» внутрь нашей сборки.

Больше о бэкенде в Яндексе — в канале Yandex for Backend

Требования

  • На достаточном уровне понимаете Python: базовый синтаксис, ассимптотики, Pythonic-код, типизацию, модель параллельности
  • Умеете и готовы писать тесты
  • Готовы брать на себя проекты длиной в квартал или полугодие и доводить их до конца
  • Любите учить и учиться, фиксировать свои знания и передавать их
  • Коммуникабельны, готовы общаться внутри команды и в рамках поддержки
  • Не боитесь брать на себя ответственность за свои ошибки и исправлять их
  • Умеете управлять своим временем, вовремя отдыхаете и не перерабатываете

Дополнительные требования

  • На хорошем уровне знаете C++, Java, Go, Kotlin
  • Работали с высоконагруженными системами
  • Работали с системами сборки для монорепозиториев: Bazel, Buck, Pants, Please
  • Работали с системами сборки исходного кода: Make, CMake и другими
  • Знаете теорию графов
  • Знаете основы работы на разных операционных системах и их отличия
  • Писали кросс-платформенный код
Python Java Kotlin Go TypeScript
Откликнуться →