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 и другие системные инструменты.

Условия работы

  • официальное трудоустройство;
  • работа в команде разработчиков с распределением ответственности по техническим направлениям;
  • возможность профессионального и технического роста;
  • участие в разработке реального продукта и принятии технических решений;
  • ДМС (расширенный);
  • зеленая зона, парк, уличный спорт рядом с офисом;
  • современное офисное здание с удобной парковкой для авто и велосипедов;
  • корпоративный транспорт;
  • тренажерные залы в офисе, кикер и настолки;
  • помощь с релокацией кандидатам из других городов.

    See also

    Software Engineering jobs by country — openings, pay and top skills →

    Tailor your CV for this role?

    We couldn't check your fit for this role — add a CV to your profile to see it next time.

    A new version of freehire is available