Кар'єра в IT: посада Embedded-розробник

Продовжуємо серію «Кар'єра в 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)

Приклади 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)

Робота з 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)

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

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

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

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

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

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

Опубліковано: 04/12/18 @ 11:00
Розділ Різне

Рекомендуємо:

Senior у пошуках роботи. Про задачі на технічних співбесідах і теоретичні питання
Финстрип за Листопад 2018, інфо-сайти. 140К+, багато думок
Ruby/Rails дайджест #24: реліз Ruby 2.6.0-preview3, оновлення JRuby до 9.2.4.1, а також вихід 5.2.2.rc1 фреймворку Ruby on Rails
Інтерв'ю - Джулі Джойс, SEO компанія Link Fish Media, США
Принципи роботи Garbage collection