Embedded programming requires a certain mind set. Board support packages, memory organization, interrupt handling schemes, latency management, working around chip set bugs/oddities, reverse engineering, close collaboration with hardware designers for field programmable gate arrays or ASICs, bootstrapping, and system integration are NOT taught in any school I have discovered. The closest I have found is Computer Engineering programs that offer robotics or some other courses/projects that include interfaces to controllers and sensors.
Smart programmers can learn all of this, but it is a very different environment than the application level programming with "managed" languages that most students learn. Compilers often don't work seamlessly. A little machine language (let alone assembly language) is often needed to get development started. If you have never done any assembly language programming, that is a good skill to develop.