Чему учился в ИТМО

Меня всегда привлекали инженерные науки, а именно спутниковая навигация, поэтому я решил поступить в ИТМО и выбрал программу «Системы управления движением и навигация».

Я учился на мегафакультете компьютерных технологий и управления на кафедре информационно-навигационных систем на базе ЦНИИ «Электроприбор» (сейчас ― Институт информационно-навигационных систем ― прим.ред.). В 2015 году я окончил бакалавриат, а потом пошел в магистратуру на программу «Интеллектуальные системы управления движением и навигации», где защитился в 2017 году.

Во время обучения я узнал, что существует навигация не только на земле, но и под водой, где реализована своя система координат через триады гироскопов и акселерометров. Также я освоил навыки программирования на C, C++, MATLAB, изучил классические алгоритмы и получил знания по аппаратной части: схемотехнике и аналогово-цифровым устройствам, которые больше всего пригодились мне в работе. Например, при отладке ПО на железе и написании драйверов полезными оказались знания по аналогово-цифровым устройствам и схемотехнике, а для анализа и визуализации сохраненных данных, полученных с сенсоров встраиваемой системы, я использовал MATLAB.

Как искал себя в профессии и менял стек технологий

В индустрии программного обеспечения можно выделить два основных направления: девелопмент (разработка определенного функционала посредством написания программного кода) и QA (quality assurance, тестирование этого функционала, например, с помощью автотестов). Сначала я работал девелопером (писал программные модули как с нуля, так и поддерживал legacy-код) и фиксил баги. При этом мне всегда был интересен White и Grey box testing — тестирование продукта, которое учитывает внутренние механизмы системы или компонента. Мне хотелось попробовать проверять работу людей, которые что-то разработали.

Студенты ИТМО на хакатоне. Фото: Елизавета Козырина / Медиапортал ИТМО

Студенты ИТМО на хакатоне. Фото: Елизавета Козырина / Медиапортал ИТМО

Как и немалая часть специалистов, я пришел в верификацию систем на кристалле из Embedded-разработки (разработка встраиваемых систем). Это область, в которой пишут управляющее ПО для различных устройств и гаджетов. Например, embedded-разработчики создают прошивки под микроконтроллер, который обладает сравнительно небольшими вычислительными мощностями и недорого стоит. Их задача — обеспечить низкое энергопотребление устройства в специфических условиях. Я работал с железом Automotive в автомобильной промышленности — такой микроконтроллер должен потреблять не много энергии, при этом быть надежным.

Что такое инфраструктура открытых ключей

Еще со студенчества я работал в разных компаниях: создавал дентальный аппарат в КБ «Рентгеновские приборы», делал системы контроля аккумуляторными батареями для компании «Ригель», создавал полностью электрический автобус в компании Arrival.

Качественный скачок случился, когда я работал в шведской транснациональной компании Electrolux, которая занимается производством бытовой и профессиональной техники. Мы разрабатывали IoT-чип, который встраивается в холодильники, стиральные, посудомоечные машины и другие бытовые приборы. По сути, это система интернета вещей. Эти чипы нужны, чтобы пользователь мог подключить прибор к своему домашнему роутеру, отслеживать состояние техники и управлять ею.

Конкретно я курировал направление Public Key Infrastructure (PKI) — инфраструктуру открытых ключей. Мы занимались вопросами аутентификации и шифрования данных. Допустим, к нам приходит холодильник, внутри него генерируется пара ключей: приватный и публичный. Публичный знают все, приватный не знает даже разработчик, он находится в специальной доверенной зоне (Trusted Zone). Когда мы в первый раз подключаем холодильник к домашнему роутеру, плата генерирует запрос на получение сертификата (Certificate Signing Request). Запрос отправляется на сервер, который подписывает открытый ключ устройства, формирует сертификат и отправляет его назад. В дальнейшем плата сможет использовать этот сертификат для различных взаимодействий — теперь соединение защищено. Если злоумышленник попытается притвориться сервером или устройством, то у него это не получится, а если перехватит сообщение, то не поймет его.

Виктор Овчинников. Фото: Дмитрий Григорьев / ITMO.NEWS

Виктор Овчинников. Фото: Дмитрий Григорьев / ITMO.NEWS

Чем занимается сейчас

Сейчас я работаю старшим инженером по программированию систем на кристалле (СнК) в компании YADRO. Мы пишем верификационные тесты для этих систем на языке программирования С.

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

В России сейчас не так много специалистов, у которых есть подходящий бэкграунд для работы в этой сфере. Нужно разбираться в аппаратной части, понимать физические процессы, происходящие в блоках и соединениях электронного устройства, знать Булеву алгебру, языки описания аппаратуры (например, System Verilog) для моделирования электронных систем, язык С, а также обладать кругозором в области вычислительной техники. Именно такие специалисты сейчас нужны YADRO для fabless-разработки микропроцессоров.


Также работать и стажироваться в YADRO можно в области изучения качества программного обеспечения. Для этого YADRO и ИТМО открыли совместную магистратуру «Инструменты разработки и анализа программ». Там преподаются подходы к анализу программ и методы обнаружения ошибок, учатся создавать инструменты для разработки качественного ПО. Предполагается, что выпускники смогут создавать анализаторы кода и фаззеры, IDE и их компоненты: дебаггеры, профайлеры, проектировать новые языки программирования и разрабатывать эффективные компиляторы для них.

Прочитайте также:

В ИТМО стартует корпоративная магистратура YADRO, где научат создавать среды разработки и инструменты программирования

Советы студентам

  • Чтобы построить успешную карьеру вне зависимости от специальности, я рекомендую студентам начинать свои проекты еще в вузе — тогда знания будут браться из потребности. Это могут быть задачи в рамках стажировки или DIY-активности — даже организация «умного дома» может стать интересным домашним проектом, развивающим навыки.
  • Также стоит уделять особое внимание документированию собственного кода. Вернувшись к нему через несколько месяцев, вы рискуете не разобраться в заложенной в код бизнес-логике без дополнительных комментариев.
  • Важно учиться графически излагать свои мысли, чтобы вас лучше понимали другие члены команды и вы могли сэкономить время на обсуждении задач. Для этого можно использовать любой редактор, например, простой Draw.io или применить язык GraphML.
  • В случае обнаружения багов или аномалий нужно проводить детальный анализ кода и искать первопричины на самом низком уровне.