Програмування вбудованих систем (якими я займаюся вже 30+ років) вимагає зовсім іншого мислення, ніж більшість інших програм розробки програмного забезпечення. Діапазон обчислювальної потужності дуже варіюється, від 8-бітових мікроконтролерів, які коштують 30 центів за кількістю, до 32-розрядних мікропроцесорів, що працюють під управлінням Linux або деяких інших поширених ОС. Зараз я роблю проекти на обох кінцях цієї шкали. Пам'ять коду на найменших мікросередовищах може становити лише кілька КБ, лише кілька сотень байт оперативної пам'яті. 16-розрядний мікробіт середнього класу, який коштує 3 долари США, може мати 256 КБ пам'яті програми та 16 КБ оперативної пам’яті.
Окрім обмежених ресурсів пам’яті, одним із аспектів вбудованого програмування, на відміну від інших областей розробки програмного забезпечення, є те, що програміст часто має справу безпосередньо з обладнанням на рівні реєстру - або на самому мікро, або на периферійному пристрої, приєднаному до мікросередовище через серійні шини, такі як UART, SPI або I2C. З цієї причини вбудовані мікрофони низького класу, як правило, програмуються на мові С або на монтажі.
Вбудовані системи часто мають справу з подіями в режимі реального часу, тому вбудована програма вбудованого програмного забезпечення зазвичай має багато процедур переривання і можлива невелика RTOS (ОС у режимі реального часу). Налагодження таких систем часто вимагає апаратної допомоги за допомогою декількох виділених ліній в мікро, так що точки перерви можна встановити віддалено від ПК. Логічні аналізатори, аналізатори шин та осцилоскопи - додаткові інструменти, що використовуються для налагодження цих систем.
Через апаратні аспекти вбудованої розробки, розробники часто мають певну електроніку. (У мене є ступеня як в EE, так і в CS).