Хотите дальше читать devby? 📝
Support us

Кто такой Embedded-разработчик. Обзор изнутри от Вадима Егораева

О профессии рассказывает Вадим Егораев, Software Engineering Team Leader в ЕРАМ, 10 лет в ИТ, развивает программы тренингов для Embedded-разработчиков.

Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней. Спикер и автор материала поддержат дискуссию и ответят на вопросы.

8 комментариев
Кто такой Embedded-разработчик. Обзор изнутри от Вадима Егораева

О профессии рассказывает Вадим Егораев, Software Engineering Team Leader в ЕРАМ, 10 лет в ИТ, развивает программы тренингов для Embedded-разработчиков.

Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней. Спикер и автор материала поддержат дискуссию и ответят на вопросы.

Содержание

Что такое 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, и про операционные системы, и про разработку встроенного ПО, и про криптографию: 

П. С. Про работу и хобби

Помимо разработки я увлекаюсь музыкой, сейчас активно учусь игре на электрогитаре. Моя работа и хобби пересекаются и дополняют друг друга, ведь электронная музыка и встроенное ПО сильно связаны. Вообще я и начинал изучать электронику со звуковой и звуковоспроизводящей электроники. Знаю, как работают микрофоны, динамики, звуковые карты, цифровые сигнальные процессоры, как создаются звуковые эффекты — это помогает мне развиваться как музыканту, видеть мир звуковоспроизведения и звукозаписи с нескольких сторон. Например, я понимаю, какие звуковые волны происходят из моего музыкального инструмента, как они распространяются, почему что-то идет не так или не работает. А различные звуковые эффекты мне представляются цифровыми фильтрами определенного рода. 

Среди моих знакомых Embedded и IoT-инженеров есть много ребят с очень интересными и необычными хобби, они постоянно пробуют что-то новое. Пожалуй, это отлично поддерживает креативность и вдохновляет мыслить outside the box — советую!

Помогаете devby = помогаете ИТ-комьюнити.

Засапортить сейчас.

Читайте также
«Яндекс» открыл сторонним разработчикам доступ к своим тестам для проверки ИТ-навыков
«Яндекс» открыл сторонним разработчикам доступ к своим тестам для проверки ИТ-навыков
«Яндекс» открыл сторонним разработчикам доступ к своим тестам для проверки ИТ-навыков
1 комментарий
В Беларуси ввели новую профессию  — «наладчик аппаратного программного обеспечения»
В Беларуси ввели новую профессию — «наладчик аппаратного программного обеспечения»
В Беларуси ввели новую профессию — «наладчик аппаратного программного обеспечения»
Самые востребованные ИТ-профессии 2021 года
Самые востребованные ИТ-профессии 2021 года
Самые востребованные ИТ-профессии 2021 года
Кто такой Quantitative Analyst? Обзор изнутри от Ракшитa Чудхари
Кто такой Quantitative Analyst? Обзор изнутри от Ракшитa Чудхари
Кто такой Quantitative Analyst? Обзор изнутри от Ракшитa Чудхари
О профессии рассказывает Ракшит Чудхари, СОO международной трейдинговой компании Deriv.  Продолжаем цикл материалов про ИТ-специальности. Каждую из них описывает «типичный представитель» — опытный специалист. Надеемся, что цикл поможет школьникам, студентам, переквалификантам, джуниорам и сочувствующим выбрать специальность в ИТ, оценить свои перспективы или просто сверить часы с авторитетным коллегой. Можно обсуждать и дополнять материал в комментариях, чтобы сделать его ещё полезней. Спикер и автор материала поддержат дискуссию и ответят на вопросы.
11 комментариев

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Anonymous
Anonymous
3

"Во встроенном ПО обычно есть одна конкретная цель, например, включить-выключить реле, которую важно сделать вовремя (счёт идет на мили- или микросекунды)" - реле для таких задач не очень хорошо подходит, все-таки это замыкание/размыкание механического контакта и для частых операций он не годится, вместо него чаще используют транзисторы. ИМХО :)

superavik
superavik Dev в CTDEV
0

О мля )

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
0

После подачи сигнала на реле - есть задержка включения. А после снятия напряжения - тоже размыкание не сразу происходит. Оба параметра - вполне себе технические характеристики и обычно присутствуют в даташитах. Думаю здесь речь может идти о "максимально быстро подать сигнал включения реле". Второй момент - это то что надёжнее реле пока что ничего нет.

PS: Кстати, вспомнил что работал когда-то с Вадимом, ещё в компании "лучший софт", очень позитивный и целеустремлённый человек!

zer0
zer0 Senior Software Developer в 2012-11-01
0

Не всякий транзистор потянет нужную мощность, например, если вам нужно замыкать ток на обмотку двигателя, то ПНП переход уедет не туда куда нужно или вообще случится пробой. Для таких случаев все же могут использоваться теже реле на базе геркона или другой балалайки

Anonymous
Anonymous
0

согласен, тут все зависит от типа задачи, если нужны частые переключение, то транзистор, если большие мощности и не частые переключения - реле

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
1

Embedded-разработчик - это тот, кто потом находит более оплачиваемую и благодарную работу на BE/Java или FE/Angular или DevOps, и говорит на собеседовании HR - а перед этим я работал как embedded-разработчик. А ему говорят - "прикольненько, и чё?".

yurand2
yurand2
0

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

ygjbjmbjbbmbb
ygjbjmbjbbmbb
0

Здравствуйте, мне понравилась ваша статья. Я хочу узнать, а какие конкретно проекты вы возглавляли как embedded Teamlead ?