http://www.ericdaugherty.com/blog/2010/01/complete-software-developer.html
Education
While a Computer Science or Computer Engineering degree is not required to develop software, it can provide an understanding of the foundational elements on which everything else is built. Understanding both how a computer actually works, and the fundamentals of algorithms, data structures, and operating system design will provide a solid theoretical foundation for an entire career. I also believe it is important that the degree focuses on theory more than practice
I find that a lot embedded software engineers lack knowledge of experience whatsoever with OO concepts. That's gonna hurt when devices become big enough so that C won't just cope with large projects.
I hope though we'll skip C++ altogether.
Consulting
I believe that every new college graduate's first job should be with a consulting company. Not just any consulting company, but one large enough and experienced enough that it provides real training on how to be a Consultant, in addition to how to develop software. Consulting is a skill, and it is one that will pay dividends through an entire career.
It's been true for me.
Build a product
Work for a startup
Learn
Mentor
Build and mantain your Network
I couldn't agree more