C-разработчик
Навыки: C. Квалификация: Middle. Специализации: Инженер встраиваемых систем.
Привет! Меня зовут Дмитрий, я Team Lead команды разработки в отделе Сервисных маршрутизаторов.
Мы разрабатываем программное обеспечение для сетевых устройств, которые используются в качестве пограничных маршрутизаторов. Аппаратные платформы устройств также разрабатываются на нашем предприятии, поэтому мы работаем на стыке Linux, сетевых технологий и embedded-разработки.
Наш проект представляет собой полноценный программный стек сетевого устройства:
- начальные загрузчики (Bootloader);
- операционная система Linux;
- драйверы устройств и вспомогательные модули ядра;
- системные процессы, библиотеки и утилиты;
- протоколы маршрутизации и коммутации;
- системы управления устройством и интерфейсы для его настройки.
Проект постоянно развивается: появляются новые аппаратные платформы, сетевые протоколы и функции, расширяются возможности управления устройствами. Поэтому перед командой регулярно возникают задачи как по развитию существующего функционала, так и по созданию новых компонентов с нуля.
Нам нужен Middle-разработчик, который сможет самостоятельно решать технические задачи, разбираться в существующем коде и постепенно брать ответственность за отдельные компоненты проекта.
Чем предстоит заниматься
На этапе адаптации предстоит познакомиться с архитектурой проекта, инструментами разработки и существующим кодом. Первые задачи будут связаны со стабилизацией и развитием различных компонентов, что позволит постепенно погрузиться в проект.
В дальнейшем, в зависимости от выбранного направления, предстоит заниматься:
- разработкой и развитием сетевых протоколов и функций маршрутизации и коммутации;
- реализацией функциональности от конфигурирования до логики работы протокола;
- разработкой и сопровождением системных процессов и библиотек;
- поддержкой аппаратных платформ и взаимодействием с драйверами;
- развитием интерфейсов управления устройством;
- анализом и устранением сложных проблем на уровне приложения, ОС и сетевого стека;
- проектированием и реализацией новых компонентов;
- рефакторингом и развитием существующего кода.
Разработка ведётся совместно с другими участниками проекта. Решения проходят Code Review, а итоговая функциональность проверяется командой разработки и отделом тестирования.
Что требуется от кандидата
- уверенное знание языка C/С++ и опыт промышленной разработки на нём;
- понимание структур данных, алгоритмов и основных принципов разработки ПО;
- опыт разработки многопоточных приложений;
- понимание процессов, потоков, системных вызовов и механизмов IPC в Linux;
- опыт разработки сетевых приложений;
- понимание принципов работы L2/L3 сетей и TCP/IP;
- уверенная работа с Linux на уровне разработчика;
- опыт работы с Git;
- понимание принципов сборки проектов с использованием make и Makefile;
- способность самостоятельно разобраться в существующем коде и архитектуре;
- умение декомпозировать задачи на подзадачи и самостоятельно оценивать объём работ;
- опыт проведения и прохождения Code Review;
- умение документировать технические решения и результаты работы;
- опыт командной разработки.
Будет плюсом
- опыт разработки для embedded/Linux-платформ;
- опыт разработки модулей и подсистем ядра Linux;
- опыт работы с активным сетевым оборудованием;
- знание сетевых протоколов маршрутизации и коммутации;
- практический опыт использования Wireshark, tcpdump;
- опыт отладки с использованием GDB, Valgrind, Sanitizer;
- знание Docker;
- опыт проектирования и разработки высоконагруженных или отказоустойчивых систем.
Что интересного в работе
- разрабатываем собственное сетевое оборудование и ПО полного стека — от Bootloader и Linux kernel до сетевых протоколов и интерфейсов управления;
- можно глубоко погрузиться в Linux, networking и системную разработку;
- работаем с реальным сетевым оборудованием, а не только с виртуальной инфраструктурой;
- задачи разного уровня: от исправления отдельных проблем до проектирования и реализации новых подсистем;
- можно выбрать и постепенно развивать собственное техническое направление;
- разработчики участвуют в обсуждении архитектуры и принятии технических решений;
- направление активно развивается: меняются архитектура, процессы и структура команд, появляются новые задачи и зоны ответственности;
- для проактивных людей здесь есть пространство для инициативы: можно не только решать поставленные задачи, но и предлагать и реализовывать собственные улучшения;
- используем Code Review, статический анализ и автоматические проверки качества кода.
В процессе разработки используем:
C, С++, Linux, Git, GitLab, Redmine, Jenkins, Docker, Make, AI.
Для анализа, диагностики и отладки используем GDB, Valgrind, Sanitizer, tcpdump, Wireshark и другие системные инструменты.
Условия работы
- официальное трудоустройство;
- работа в команде разработчиков с распределением ответственности по техническим направлениям;
- возможность профессионального и технического роста;
- участие в разработке реального продукта и принятии технических решений;
- ДМС (расширенный);
- зеленая зона, парк, уличный спорт рядом с офисом;
- современное офисное здание с удобной парковкой для авто и велосипедов;
- корпоративный транспорт;
- тренажерные залы в офисе, кикер и настолки;
- помощь с релокацией кандидатам из других городов.