So, does the United States have a shortage of engineers? Well, if we are talking about engineers who understand how computers work, then I’m afraid we do. I can understand not wanting to get into the nitty-gritty of bus transceiver logic, etc. Some folks like that level of design, and I’m happy that we have them. But, as embedded systems developers, we must all understand the effects of memory management units (MMUs), caches, instruction pipeline flushes, scheduling policies, context switches and the like, to be effective in creating working embedded systems.
As for today’s CS programs, it seems that long gone are the computer architecture classes, writing code in assembly language (or even C at this point) and engineering software economics. In fact, a large number of CS majors apparently believe that everything can be implemented in a virtual machine and that both memory and central processing unit (CPU) cycles are infinite. Based on a typical x86-centric desktop computer view, these observations are perhaps less unrealistic. However, the net result of this perspective is the code bloat we perceive in certain operating systems and applications. Certainly, our “lean and mean” perception of what it means to be an embedded system is not consistent with the infinite CPU and memory viewpoint.
The educators and curricula developers are quick to claim that they are simply teaching their students what the industry is demanding. This is often based on a quick look at the local want ads or a search of employment sites on the Internet. Java, PHP and HTML developers all seem to be in high demand. However, these are again skill sets that are easily outsourced. Proximity to the hardware and the hardware designers as well as test equipment is precisely why it is so much harder to outsource embedded development jobs.
Embedded engineering requires understanding both circuits and compilers, and as the article says, that kind of cross-disciplinary teaching is not done in modern US colleges. The only way I can think of to resurrect embedded engineering is to get serious about teaching mechatronics (i.e., robotics) in schools. You'll be forced to learn a little mechanical, electrical and software engineering if you want to build robots. In this, Dean Kamen is far ahead of the rest of us.