Все очень просто. Не бывает "просто программирования". Программирование - это всегда инструмент для решения каких-то задач.
Программирование под железо - по большей части распихивание нужных битов по нужным регистрам. Для простых устройств существенная часть кода относится именно к этому типу. Здесь железячник вне конкуренции, потому что лучше всех знает, что, куда и зачем.
Прикладное программирование наборот, игнорирует аппаратную составляющую, но фокусируется на алгоритмах. Скажем, оконный интерфейс будет функционировать примерно одинаково на любой архитектуре - сама логика его работы не зависит от системы, специфика проявляется только на уровне драйверов. Код гламурной анимации сворачивания окна можно разрабатывать, не зная про режимы развертки монитора.
Потому разным специалистам лучше удаются разные задачи.