📍 Тбилиси (Грузия)Помощь с переездом
Английский
B2 — Upper-IntermediateB2 — Upper-Intermediate
Мы создаём набор программных инструментов для разработчиков беспилотных автомобилей, автобусов и грузовиков. Технологии обкатываем (во всех смыслах) на местном прототипе наземного POD’а, на коммерческих образцах для наших клиентов, а также на гоночных болидах нашего партнёра Roborace.
В проекте используем лидары, камеры, радары, ультрасоники, инерциальные и спутниковые навигационные системы. Поэтому работа тесно связана с протоколами и SDK производителей. Частично работа включает в себя доработку и адаптацию прототипов до промышленного уровня, так как ещё много экспериментируем и пробуем варианты компоновок.
Наши наработки объединяем в платформу для получения данных от сенсоров, записи, воспроизведения и отображения датасетов, а также калибровки сенсоров по датасетам и онлайн.
Технологии/инструменты
C++GitBashLinuxDockerSTLCMakeBoost.Asio
О технологиях в проекте:
- CMake 3.16, Ninja, CPack, CTest, С++14, STL, Boost для написания кода.
- Ubuntu 16.04 — текущая целевая операционная система. Ещё по остаточному принципу поддерживается macOS. Ожидается поддержка QNX и обновление Ubuntu до 20.04.
- Amd64 (x86_64) и arm64 (aarch64) — целевые аппаратные архитектуры.
- Doxygen и Sphinx для документации.
- GitLab и Docker для сборки, тестирования, генерации документации.
- Debian-архив для доставки пакетов.
- Python 3.5+ и Bash для автоматизации рутинных задач.
- Qt 5.15, QtQuick и QML для создания интерфейсов.
- Cucumber и Gherkin для BDD-тестов приложений.
- Tmux или screen для работы на удалённых машинах.
- IDE выбирается по личным предпочтениям.
Общий круг наших задач
- Проектируем архитектуру платформы.
- Пишем библиотеки, консольные и визуальные инструменты.
- Декодируем протоколы устройств и работаем с форматами файлов на низком уровне.
- Пишем обучающие руководства, примеры, справочную документацию.
- Налаживаем процессы сборки, генерации и публикации документации, тестирования, пакетирования, разворачивания и выпуска версий.
- Оказываем техническую поддержку.
Кого ищем
- Уверенно использует и администрирует Linux.
- Владеет командной строкой и пишет Bash-скрипты.
- Использует C++14 как основной язык.
- Попробовал мета-программирование.
- Знает компоненты и алгоритмы STL.
- Умеет работать с библиотекой Boost.Asio.
- Владеет современным диалектом CMake и знает, как оформить библиотеку в виде зависимости, которую легко подключить: специфичные макросы и пути к публичным заголовочным файлам и библиотекам распространяются автоматически.
- Уверенно пользуется Git’ом: создать feature-ветку не проблема, свободно перемещается с одной на другую и stash’ится; легко жонглирует commit’ами и rebase’ится, но при этом понимает уместность подобного переписывания истории изменений; умеет искать регрессии bisect’ом.
- Владеет Docker’ом: понимает разницу между образом и контейнером, запуск контейнера для рутинной задачи не представляет сложностей.
- Обладает базовым знанием линейной алгебры.
- Практикует приёмы дизайна и создания переиспользуемых компонентов.
- При работе с вводом-выводом предпочитает инверсию управления, асинхронность, промисы и реактивное программирование.
- Умеет или готов учиться создавать программные продукты для других разработчиков.
- Умеет или готов учиться создавать критические и отказоустойчивые подсистемы.
Приходите на собеседование, если умеете большинство из списка выше.
Мы особенно рады, когда кандидаты разделяют нашу систему ценностей:
- Трудоёмкие операции автоматизируем или описываем в виде дружелюбных руководств.
- Чувствуем границу между личными интересами саморазвития и потребностями бизнеса при решении задач.
- В повседневных задачах используем техники и приёмы, которыми хорошо владеем, а не ставим эксперименты.
- Решение задачи предпочитаем встраивать в общую картину проекта, но понимаем, что бывают исключения.
- Чувствуем моменты необходимости рефакторинга кода, планируем это и оцениваем последствия.
- При необходимости внести изменения, ломающие совместимость, прорабатываем миграцию, но не устраиваем из этого болото.
- Покрываем код автотестами и не забываем про предварительное системное тестирование до передачи в QA.
- Беспокоимся о читаемости кода, но не цепляемся за неё зубами.
- Когда не хватает выразительности языка программирования, в комментариях к коду используем естественный язык, чтобы дать другим знать о деталях выбранного решения.
- Ценим одноранговое code review, активно в этом участвуем и внедряем изменения через merge / pull request’ы.
- В описаниях commit’ов и request’ов лаконично выражаем намерения этих изменений.
Ряд вопросов на собеседовании снимается демонстрацией кода на публичных площадках вроде GitHub или GitLab.
Приветствуется владение английским языком хотя бы на уровне письменного изложения, так как приходится часто общаться с зарубежными коллегами, партнёрами и иногда со службами поддержки поставщиков оборудования. Ещё лучше, если не испытываете трудностей в обсуждении на английском рабочих задач. Возможны командировки зарубеж.
Наталья Чурякова Talent Acquisition Manager