Кар'єра в IT: посада Embedded-розробник
Карьера - Профессии
20.12.2019
ImageПродовжуємо серію «Кар'єра в IT»: на цей раз поговоримо про позицію Embedded-розробника. Це фахівець, який займається розробкою вбудованого ПО.

За даними DOU, середньому українському Embedded-розробнику 30 років, він має досвід роботи 5-6 років і отримує $ 880 на рівні Junior, $ 1750 на рівні Middle і $ 3500 на рівні Senior. Зарплата тім- і техлідов - близько $ 4200.

Про особливості своєї спеціальності нам розповіли Embedded-розробники з компаній Celeno, eZLO Smart Home Automation, GlobalLogic, Ring Ukraine, TowerIQ і Ubiquiti Labs Ukraine.

Завдання та обов'язки

Embedded-розробник працює з вбудованими пристроями. Вбудована система - це та, яка працює під управлінням комп'ютера. Тобто під це визначення потрапляють всі девайси і гаджети, оснащені апаратною платформою.

По суті, ця спеціальність лежить на стику програмування і апаратної інженерії. Завдання бувають різними - від розробки драйверу для якогось модуля до інтеграції коду з існуючим ПЗ. Все залежить від конкретного проекту. Іноді обов'язки обмежуються тільки роботою з платою, а іноді Embedded-розробники беруть участь в написанні бізнес-логіки продукту або розробці самого «заліза».

    «Я адаптую код до прошивцки камери і покращую роботу існуючого коду. Багато спілкуюся з колегами з усього світу, щоб разом ефективніше вирішувати завдання ». (Олександр, Ubiquiti Labs Ukraine)

На відміну від класичних Software програмістів, Embedded-розробники працюють не тільки з кодом, а й з «залізом».

    «Поясню суть своєї роботи на прикладі нашого проекту. В Японії випускають "залізо", яке має стати частиною автомобіля. Наш експерт їде на завод в Японії і робить все, щоб Android з периферійної платою замовника ожив. Далі "залізо" потрапляє до нас в офіс. Ми займаємося всім - від моменту включення пристрою і закінчуючи призначеним для користувача інтерфейсом. Будь то kernel, драйвер, демон або гарна анімація при натисканні на кнопочку ». (Денис Глусскій, GlobalLogic)

Головний виклик Embedded-розробника на початку проекту - правильно вибрати апаратну платформу, на якій все буде реалізовуватися. Якщо цей вибір виявиться неправильним і апаратних засобів платформи не вистачить, доведеться починати роботу з нуля на новій платформі. Якщо ж, навпаки, апаратна платформа була обрана з дуже великим запасом, кінцевий продукт вийде дорожчим, ніж міг би бути.

Наступне завдання - вибір і адаптація існуючих реалізованих алгоритмів під обмежені ресурси обраної платформи. Для цього потрібні навички Kernel, System і Application-інженерії в одній особі.

    «Перш ніж починати програмувати, Embedded-розробник повинен забезпечити собі базову функціональність. Змусити плату працювати, запустити початковий завантажувач, написати або оновити якісь драйвера. Часто це доводиться робити без будь-якої підтримки з боку софту: для налагодження використовується не відладчик і навіть не серійна консоль, а миготіння світлодіодом на платі або аналіз сигналів осцилографом. Недарма у ембеддерів "Hello, World!" - це мигнути світлодіодом на новій платі ». (Андрій Лукін, GlobalLogic)

Image

Приклади Embedded-систем (image source)

Embedded-розробник не працює з інтерфейсом користувача, базами даних або файлами складних форматів. Як правило, вся його увага зосереджена навколо «заліза» і його характеристик, наприклад: потужності процесора і кількості пам'яті. Через особливості середовища ці ресурси завжди обмежені. А тому доводиться робити упор на оптимізації по пам'яті, продуктивності, а також енергоспоживанню.

    «У Embedded вкрай важливо приділяти увагу питанням надійності і довготривалої автономності, так як продукт може роками працювати без уваги користувача. Потрібно враховувати креш, зникнення або ослаблення живлення, переклад дат та інше. Істотну роль грає автоматична процедура оновлення ПЗ і його компонентів - наприклад, поновлення SSL сертифікатів ». (Олександр С. і Олександр Є., Celeno)

    «Працюючи з платами, девайсами, микроконтроллерами, Embedded-розробник тісно співпрацює з hardware-командою. Це допомога не тільки в підборі компонентної бази, а й в прийнятті архітектурних рішень: від того, як спроектувати систему або які інтерфейси використовувати, - і до того, який сенсор на яку шину посадити ». (Вадим Ткачук, Ring Ukraine)

Ще одна специфіка Embedded - необхідність працювати з різними пристроями. Звичайний програміст може розробити софт на своєму комп'ютері і там же зайнятися запуском або дебагом. У Embedded-розробника такої можливості, як правило, немає. Для розробки і тестування йому необхідно мати при собі свій пристрій. Спочатку він компілює код на своєму комп'ютері, потім заливає на девайс і вже там запускає.

Типовий робочий день Embedded-розробника включає в себе:

  •     роботу з «залізом»;
  •     роботу з кодом;
  •     налагодження;
  •     тестування;
  •     вивчення документації;
  •     мітинги і зізвон з колегами.

Конкретні активності залежать від специфіки проекту, а також методологій і практик, яким слід команда. Ось кілька різних сценаріїв:

    «У Embedded менше часу йде на написання коду і більше, наприклад, на те ж налагодження. Цілком звична ситуація: Embedded-розробник пише 10-20 рядків коду, а весь день витрачає на з'ясування причин, через які він не працює. Адже доводиться мати справу з різними виробниками, різними микроконтроллерами, різними чіпами - і у кожного своя імплементація. До того ж на деякі компоненти немає хорошої документації. Доводиться шукати форуми, дізнаватися, не стикався чи хтось з аналогічними проблемами. Нерідко в таких випадках доходить до підключення більш серйозного дебага, осцилографа, логічного аналізатора. Такий глибокий аналіз може зайняти весь день ». (Вадим Ткачук, Ring Ukraine)

    «З мого досвіду, на написання коду у Embedded-розробника йде максимум 30% робочого часу. До 50% всього часу займають дослідження суті проблеми, яку потрібно вирішити. Решта - дебаг». (Віктор Семенов, TowerIQ)

    «На поточному проекті я займаюся інтеграцією коду від 5 різних Software house в одне ціле. Близько 40% часу йде на на інтеграцію, 30% - на код рев'ю, 20% - на ділову переписку і 10% - на рефакторинг і поліпшення. До позиції інтегратора 60% часу займався написанням коду, 20% - інтеграцією, 10% - код рев'ю, 10% - рефакторингом та іншими поліпшеннями. У будь-якому випадку близько 4-х годин на тиждень витрачаю на читання статей і вивчення вихідного коду AOSP. Зазвичай роблю це під час складання проекту». (Денис Глусскій, GlobalLogic)

    «Іноді потрібно просидіти пару днів в оточенні електричних схем, файлів друкованих плат і контрольно-вимірювального обладнання в пошуках несправності або шляху оптимізації роботи будь-якого вузла. Якщо апаратна частина налагоджена, можна весь день писати код, перериваючись на різного роду мітинги і обговорення. Також час від часу з'являються завдання, пов'язані з налаштуванням робочого оточення і оптимізацією процесу розробки, читанням і написанням документації або тестуванням. В середньому за часом 50-60% часу йде на написання коду, 30-40% - на тестування і 10% - на різні мітинги і обговорення». (Володимир Свістельніков, eZLO Smart Home Automation)

Змінюються завдання і на різних стадіях життєвого циклу продукту:

    «Чим більше працюєш з пристроєм, тим більше часу займає робота, власне, з кодом. На самому початку взагалі навряд чи кодиш, більше розбираєшся в документації, читаєш принципові схеми, якщо є. Уточнює вимоги з замовником. Потім багато часу може йти на перезбирання операційних систем. Під кінець проекту найбільше часу, по-хорошому, йде на тести». (Андрій Лукін, GlobalLogic)

Іноді Embedded-розробникам доводиться самим брати в руки паяльник - наприклад, якщо потрібно терміново припаяти якийсь проводок або кнопку на плату.

Переваги і недоліки

Embedded-розробників приваблює ця спеціалізація тим, що дозволяє не просто побачити, а й і «помацати» результати своєї роботи. В Embedded йдуть інженери, яким цікаво працювати з «залізом», мікросхемами і низькорівневими деталями.

«Мені подобається створювати нові речі фізичного світу. Наприклад, раніше смартфонів не було, а тепер вони є. Раніше ви платили в метро жетонами, зараз смартфоном. Ще один плюс професії - її затребуваність. Беручи участь в наймі персоналу, я зрозумів, що ринок сильно потребує кваліфікованих Embedded-розробників». (Віктор Семенов, TowerIQ)

«У Embedded мене завжди приваблювало" залізо ". Те, що ти можеш помацати результат своєї роботи, а він тобі якимось діодіком підморгне ». (Андрій Лукін, GlobalLogic)

    «Embedded привабливий для тих, хто бажає бачити результати своєї праці, свій код, оживляють спочатку мертве, нерухоме залізо. Навряд чи ця професія підійде любителям високих об'єктно-орієнтованих абстракцій і теоретикам». (Олександр С. і Олександр Є., Celeno)

«Embedded-розробник кожен день робить те, що до нього ніхто не робив. Ти приходиш на роботу - і закрутилося те, що без тебе ніколи б не закрутилося. Це досить круто. Тішить самолюбство. Особисто я за освітою радіоінженер, тому писати програми для мене було логічним розвитком моїх знань по електроніці і радіотехніці». (Максим, Ubiquiti Labs Ukraine)

    «Я за освітою інженер-електрик і спочатку в основному займався електронікою. Але з плином часу став більше захоплюватися програмуванням. Мені подобається можливість вдихнути життя в залізяку, подивитися, як бігають електрони». (Віталій Васильська, GlobalLogic)

Image 

Робота з Embedded-системою (image source)

Серед мінусів професії Embedded-розробники відзначають проблеми з налагодженням, вузьку спеціалізацію, а також складності в тому, щоб організувати віддалену роботу:

    «Складність роботи дуже висока. Крім програмування потрібно знати апаратуру. Чим ближче до апаратного рівня, тим менше ресурсів для налагодження. Аж до того, що з певного рівня програмні засоби налагодження вже неможливо використовувати, і потрібен уже апаратний відладчик. З цим усім треба вміти працювати». (Віталій Васильська, GlobalLogic)

«Є не недоліки, але деякі складності. Наприклад, те "залізо", яке ви використовуєте, може бути експериментальним. Якщо це engineering-зразок, він часто глючить сам по собі - і без вашого коду. Це необхідно враховувати при налагодженні». (Олександр С. і Олександр Є., Celeno)

    «Буває, ти цілий рік розробляєш певну прошивку для пристрою якогось специфічного виробника. До кінця проекту вже знаєш його досконально. Але проект закінчується, і в наступному тобі дають процесор іншого виробника. Принципи одні й ті ж, але все одно доводиться розбиратися заново. Отримувати нові знання, які, ймовірно, надалі тобі не знадобляться, - це буває не так цікаво, як здається з боку». (Вадим Ткачук, Ring Ukraine)

«Embedded-розробнику, який займається низкорівневою розробкою під мікроконтролери, практично неможливо працювати віддалено. При великому бажанні таку роботу знайти можливо, але вам все одно потрібно буде облаштувати робоче місце вдома або ще десь. А також доведеться самостійно забезпечувати себе допоміжними інструментами: налагоджувальними платами, кабелями, перехідниками, приладдям для пайки. Так що працювати з ноутбуком сидячи на пляжі - не вийде». (Віктор Семенов, TowerIQ)

Як стати і куди рухатися далі

Щоб стати Embedded-розробником, необхідно бути знайомим з базовими поняттями електроніки та електротехніки, мати хороші знання апаратної частини, розуміти роботу мереж. Знадобляться знання схемотехніки, теорії обробки сигналів, математики, алгоритмів, Linux OS і мов програмування С та С ++.

Почати вивчення спеціальності можна з книг «Мистецтво схемотехніки» Хоровіца і Хілла, «Архітектура комп'ютера», «Комп'ютерні мережі» і «Операційні системи» Ендрю Таненбаума. В Embedded-розробці не обійтися без фундаментальних знань з комп'ютерних наук.

Для більш детального знайомства з пристроями доведеться вивчати документацію до різних складових «заліза». Для цього знадобиться знання англійської - наші посібники користувача, як правило, написані на ньому.

    «Документація - наше все, якщо вона є :) Наприклад, керівництво Programmers Guide для процесора ARMv8-A займає 296 сторінок і описує лише основи. А Architecture Reference Manual для нього ж - уже 6354 сторінки». (Андрій Лукін, GlobalLogic)

    «Обов'язково варто присвячувати час вивчення форумів і community-порталів. По можливості відвідуйте різного роду івенти, дивіться вебінари, стежте за трендами». (Володимир Свістельніков, eZLO Smart Home Automation)

Щоб закріпити знання на практиці, Embedded-розробники радять придумувати і розробляти власні проекти:

    «Для отримання досвіду і знань я рекомендую зробити власний складний проект, що включає розробку плати, програмування, дебаг і калібрування. Наприклад, я робив саморобний квадрокоптер. Під час розробки дізнався безліч фундаментальних речей. Після того, як він полетів, вже нічого не лякає :)» (Віктор Семенов, TowerIQ)

    «Спробуйте зібрати якусь схему або готовий набір на кшталт Arduino. Це допоможе освоїти базові шини обміну даними і попрацювати з периферією. Придумайте собі завдання - наприклад, підключити до схеми датчики і написати програму, яка буде обробляти їх сигнали. У тому ж Arduino є багато бібліотек для роботи з шинами, датчиками, клавіатурою - спочатку можна використовувати їх. А потім спробуйте написати всі драйвера самостійно. Наступний крок - робота з Raspberry Pi. Після такої практики можна подавати резюме в компанії». (Олександр, Ubiquiti Labs Ukraine)

Image 

Платформа Raspberry Pi (image source)

 З особистих якостей важливі:

  •     цілеспрямованість;
  •     аналітичний склад розуму;
  •     тяга до незвіданого;
  •     увага до деталей;
  •     відповідальність;
  •     посидючість.

Також знадобиться широкий кругозір в предметної області продукту, над яким ви плануєте працювати.

   «Ви не напишете програму для прання мереживної білизни в машинці без знань про текстиль і швейну справу. Чи не напишіть ПО для станції автоматичного поливу рослин без знань з біології. Але ж хтось пише програми для апаратів УЗД, для досліджень слуху, зору. В цьому випадку розробник повинен керуватися тією ж клятвою Гіппократа, чи не так?»(Максим, Ubiquiti Labs Ukraine)

Можливі кар'єрні шляху Embedded-розробника:

  •     розвиватися як Embedded-розробник, вивчаючи нові напрямки вбудованих систем;
  •     стати архітектором Embedded-рішень;
  •     перейти в менеджмент - стати тімліда команди або СТО компанії;
  •     спробувати себе в суміжних галузях - наприклад, телеком або інфраструктурної архітектурі.

    "Куди далі? Будувати космічні кораблі, наприклад. Взагалі, прогрес постійно тримає в тонусі, попит на Embedded-рішення зростає. До речі, використовувати свої знання можна і для особистих цілей. Мій знайомий побудував собі автоматизовану теплицю. Система виконує всі необхідні дії сама, а він приїжджає виключно зібрати урожай». (Денис Глусскій, GlobalLogic)

https://dou.ua/

Читати також:

Бек-енд розробник (Back-end developer)

Рынок труда: Самые востребованные профессии будущего

Писатель. Как 26-летняя американка заработала миллион долларов на продаже электронных книг

Названы профессии, в которых роботы оставят людей без работы уже через 5-10 лет

Психологическая деформация программистов

 

 
След. >
2007-2020 © Дєньга. Інформаційний ресурс Дєньга має допомогти Вам досягнути матеріального достатку. Матеріали сайту розкривають тематики: Інвестиції(у тому числі в Нерухомість, Золото, Цінні папери), Банки, Створення власного бізнесу, Кар'єрне зростання, Освіта. Редакція не несе відповідальності за достовірність інформації, опублікованої в рекламних матеріалах.
Використання матеріалів Дєньга дозволено тільки при наявності активного посилання на головну сторінку порталу www.denga.com.ua