Разработчик в группу системы сборки и тестирования
Мы разрабатываем систему сборки внутри монорепозитория, которая обеспечивает статическую, герметичную, воспроизводимую и инкрементальную сборку, тестирование и пакетирование исходного кода на шести языках (С++, 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 и другими
- Знаете теорию графов
- Знаете основы работы на разных операционных системах и их отличия
- Писали кросс-платформенный код