Pemrograman sistem tertanam (yang telah saya ikuti selama lebih dari 30 tahun) membutuhkan pola pikir yang sangat berbeda dari kebanyakan jenis pengembangan perangkat lunak lainnya. Kisaran daya komputasi sangat bervariasi, dari mikrokontroler 8-bit yang harganya 30 sen secara kuantitas hingga mikroprosesor 32-bit yang menjalankan Linux atau OS umum lainnya. Saat ini saya sedang mengerjakan proyek di kedua ujung skala ini. Memori kode pada micros terkecil mungkin hanya beberapa KB, dengan hanya beberapa ratus byte RAM. Mikro kelas menengah 16-bit seharga $ 3 mungkin memiliki 256KB penyimpanan program dan 16KB RAM.
Selain sumber daya memori yang terbatas, salah satu aspek dari pemrograman tertanam yang tidak seperti bidang pengembangan perangkat lunak lainnya adalah bahwa programmer sering berhadapan langsung dengan perangkat keras pada tingkat register - baik pada mikro itu sendiri, atau dalam perangkat yang melekat pada mikro melalui bus serial seperti UART, SPI atau I2C. Untuk alasan ini, micros tertanam low-end biasanya diprogram dalam bahasa C atau bahasa assembly.
Sistem tertanam sering berurusan dengan peristiwa waktu nyata, sehingga program firmware yang tertanam biasanya memiliki banyak rutinitas interupsi dan kemungkinan RTOS kecil (OS waktu nyata). Debugging sistem seperti itu sering membutuhkan bantuan perangkat keras menggunakan beberapa jalur khusus ke dalam mikro sehingga breakpoint dapat diatur dari jarak jauh dari PC. Penganalisis logika, penganalisa bus dan osiloskop adalah alat tambahan yang digunakan untuk debugging sistem ini.
Karena aspek perangkat keras pengembangan tertanam, pengembang sering memiliki beberapa latar belakang elektronik. (Saya memiliki gelar di EE dan CS).