Кто такой Embedded-разработчик. Обзор изнутри от Вадима Егораева
О профессии рассказывает Вадим Егораев, Software Engineering Team Leader в ЕРАМ, 10 лет в ИТ, развивает программы тренингов для Embedded-разработчиков.
Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней. Спикер и автор материала поддержат дискуссию и ответят на вопросы.
Змест
Что такое Embedded-разработка?
Это разработка встроенного программного обеспечения. Я определяю Embedded-разработку как «практически всё, что делается не под компьютер, мобильный телефон и сервер».
Встроенное ПО есть во многих привычных вещах. Например, беспроводные наушники — передача данных на них идёт при помощи софта. Веб-камеры — в звуковой карте есть ПО, которое управляет громкостью, входами, выходами, переключает их. Ещё люди ездят на машинах, смотрят телевизор, фотографируют на камеру и т. д. — процессоры сейчас есть практически везде, и Embedded-разработчики пишут для них ПО.
Как развивалась отрасль?
Активное развитие устройств со встраиваемыми системами началось, когда процессоры стали низкопотребляющими, достаточно дешёвыми в выпуске и внедрении. Личный пример: если в 1988 году у моего Audi 100 не было внутри никакой цифровой электроники, то в середине 90-х появились первые устройства, которые управляли системой антиблокировки тормозов (ABS) на основе процессора. А с 2000-х цифровой электроникой стали контролироваться стёкла, дворники, фары и всё, что угодно.
Последние 5 лет в тренде — умные устройства вроде интеллектуального чайника, роботов-пылесосов, смарт-ламп и область IoT в целом. Развитие направления происходит, в том числе, благодаря таким платформам, как AWS, Azure, Microsoft и GCP, к которым можно быстро и качественно подключать сотни тысяч умных устройств, а затем обрабатывать данные с них.
Чем занимается Embedded-разработчик?
Рассказать легче в сравнении. У разработчика, который пишет на Java, Python или других высокоуровневых языках, 70–80% времени уходит, чтобы создать само ПО. То есть бизнес-логику — разработку того, что приходит из требований заказчика.
У Embedded-инженеров наоборот: они используют 70% времени, чтобы заставить платформу работать. Мы создаем все условия, чтобы ПО запустилось, можно было принимать данные от сенсоров, управлять мотором, работать с драйверами и загрузчиками, светить светодиодами и так далее в зависимости от контекста. Делаем то, что не связано с непосредственными задачами устройства.
Типичные задачи Embedded-разработчиков: написать что-то, что даёт данные или куда-то их пересылает. Например, принять данные от температурного датчика и передать их в облако. Другой задачей может быть написание, скажем, драйвера сенсора.
Какие знания пригодятся?
- Понимать платформенные особенности: как устроены процессоры и микропроцессорные системы, каким образом данные располагаются в памяти, про кэш данных, как работает программа, как происходит ее исполнение с операционной системой и без и др.
- Знать базу: что такое системы версионирования, bug-трекеры и СI-инструменты, такие как Jenkins или Azure DevOps.
- Из языков программирования чаще всего нужен С, хотя в последнее время всё больше Embedded-программ пишутся на С++. Процессоры становятся дешевле в производстве, поэтому почти в каждое устройство можно поставить Linux — серьёзную систему, которая фактически даёт возможность писать встроенное ПО на любом языке программирования.
- Электроника — один из главных пунктов. Все встроенные устройства сделаны на базе специализированных приборов, которые предназначены для решения конкретных задач. Они очень разнообразны и отличаются друг от друга схемотехникой, набором периферии, элементной базой. Embedded-разработчик должен уметь разбираться во всём этом: читать схему устройств, понимать, как это воплощено в печатных платах, как работают сенсоры и так далее.
- Понимать специфику работы операционных систем разного рода и как отлаживать код в ОС реального времени. Во встроенном ПО обычно есть одна конкретная цель, например, включить-выключить реле, которую важно сделать вовремя (счёт идет на мили- или микросекунды). Linux и Windows, например, этого гарантировать не могут, потому что их главная задача — равномерно и честно распределить процессор между всеми программами. А вот ОС реального времени гарантирует, что посылаемый сигнал точно дойдет вовремя. Порой это очень критично: задержка исполнения сигнала в тормозной системе машины может привести к большому ущербу здоровью и жизни человека.
- Знать прикладные области, где встроенное ПО используется. Например, поскольку IoT становится всё более популярным, Embedded-разработчику стоит знать всё, чтобы подключить устройство к облакам. Это и беспроводные технологии, такие как Bluetooth и Wi-Fi (основные), LoRa и Narrow-Band IoT — список большой. Кроме того, нужна «база» о сетях: как работает интернет, что такое роутеры, DNS, DHCP и высокоуровневые интерфейсы, к которым мы все привыкли, например, HTTP. Еще есть специфические, узконаправленные знания, например, в автомобильной, медицинской и промышленной отраслях. Они приобретаются с опытом, во время работы на проектах.
- Безопасность. Часто клиенты не хотят подключать свои устройства в интернет, потому что боятся взломов. Поэтому сейчас большое внимание уделяется соединению по безопасным каналам, а все прошивки, которые на них заливаются, подписываются специальными сертификатами, чтобы их невозможно было подменить. Поэтому Embedded-разработчику нужно знание криптографии: ассиметричной и симметричной, как работают аутентификация, подписи и блочное шифрование, как вообще хранить ключи шифрования на устройстве, чтобы их невозможно было украсть или подменить.
Завершу список упорством и постоянным саморазвитием. Элементная база непрерывно обновляется, как и наборы инструментов, и среды разработки — нужно изучать, что происходит в отрасли и около неё, чтобы быть «на гребне волны».
В каких направлениях можно работать?
Самые разные сферы, диапазон проектов большой. В ЕРАМ я занимался и рулевым управлением автомобиля, и кофеваркой, и зарядкой для электромобилей, которую используют в частных домах, и преобразователями интерфейсов, и сетевым ускорителем DNS запросов и многим другим. Всё зависит от специфики компании, в которой вы работаете, и доменов заказчиков. В любом случае, Embedded-разработка всегда очень интересная и разноплановая, особенно в больших компаниях, куда приходят разные клиенты.
Возможность смены профессии
Вариантов много. У нас даже шутка есть: главное требование для разработчиков встроенного ПО — не убежать в Java. 😊 Потому, что на Java сегодня пишутся много интересных проектов для самых разных областей. Например, в нашем департаменте Embedded, Standalone & IoT Delivery есть и Java, и Python, и Ruby, и Go, и еще много разных стеков. Что привлекает и держит меня в своей области? Возможность видеть вживую и трогать руками то, что делаешь (плату, например), а потом сразу наблюдать за результатом работы. Твой продукт не просто где-то там на сервере крутится на другой стороне планеты, а лежит у тебя на столе, светится, издает звуки и т. д.
Где учиться?
Если с нуля, то лучший вариант базы — электроника (сам так начинал). Ребята, которые закончили кафедры БГУИР, БНТУ и региональных технических университетов по специальностям промышленной электроники, автоматизации или общей электроники, имеют подходящий набор скиллов и знаний (например, понимание цифровых схем и азов программирования), чтобы стать хорошим Embedded-разработчиком. Потом им остается прокачаться в области ПО. Кстати говоря, мы так и делаем: доучиваем студентов-электронщиков, чтобы потом взять их в команду.
Переквалификация. В Embedded проще прийти из C и С++. Это лучший вариант: так как нам довольно часто приходится работать с памятью, то очень важными оказываются знания в логике работы указателей, которые есть далеко не во всех языках программирования.
Для самостоятельного обучения из онлайн-курсов могу посоветовать Coursera и LinkedIn Learning. Там есть и про Linux, и про операционные системы, и про разработку встроенного ПО, и про криптографию:
- IoT Foundations;
- IoT Standards and Ecosystems;
- C for Embedded;
- Low-Power Wireless Networks;
- Cryptography I
П. С. Про работу и хобби
Помимо разработки я увлекаюсь музыкой, сейчас активно учусь игре на электрогитаре. Моя работа и хобби пересекаются и дополняют друг друга, ведь электронная музыка и встроенное ПО сильно связаны. Вообще я и начинал изучать электронику со звуковой и звуковоспроизводящей электроники. Знаю, как работают микрофоны, динамики, звуковые карты, цифровые сигнальные процессоры, как создаются звуковые эффекты — это помогает мне развиваться как музыканту, видеть мир звуковоспроизведения и звукозаписи с нескольких сторон. Например, я понимаю, какие звуковые волны происходят из моего музыкального инструмента, как они распространяются, почему что-то идет не так или не работает. А различные звуковые эффекты мне представляются цифровыми фильтрами определенного рода.
Среди моих знакомых Embedded и IoT-инженеров есть много ребят с очень интересными и необычными хобби, они постоянно пробуют что-то новое. Пожалуй, это отлично поддерживает креативность и вдохновляет мыслить outside the box — советую!
Читать на dev.by