Question of the Week: Are universities adequately preparing graduates to enter the embedded engineering workforce?

Friday, May 21st, 2010 by Robert Cravotta

[Editor's Note: This was originally posted on the Embedded Master]

The timing of this question is prompted by a special report (“Hot Careers for College Graduates 2010”) released this Monday by the University of California, San Diego Extension. Of specific interest is the report states that embedded engineering is the fourth hottest career. The report references the Bureau of Labor Statistics figures that predict there will be an additional 295,200 software engineer jobs, an increase of 32 percent, over the 2008 to 2018 decade. I ask whether universities are adequately preparing graduates to enter the embedded engineering market because my own informal and limited survey suggests that many people consider universities as are doing an insufficient job preparing graduates for the embedded community.

The number one hot career in health information technology may offer some insight into this sentiment. According to the report, “Technicians are needed for emerging jobs such as healthcare integration engineer, healthcare systems analyst, clinical IT consultant, and technology support specialist.” While each of these job titles involve competency with computers, the computing skill sets for these types of jobs are completely different than those needed for embedded development. My quick search for university curriculums addressing embedded engineering found a few bachelors, masters, and extension curriculums that appeared to offer appropriate courses.

This question reminds me of how the engineering curriculum changed a few decades ago. My engineering education was broad-based with a strong foundation in all physical sciences. I did not attend my first college programming class until my second year (note: I had already written assemblers, multi-terminal simulators, and database engines in high school). The engineering curriculum morphed from a broad based set of courses to a narrow, discipline-specific set of courses. Freshmen started programming classes in their first year at the expense of not taking any chemistry courses. The curriculum also split CS20 – the 6 unit course that redirected more than two-thirds of the engineering candidates away from computers – into two smaller and easier to digest courses. I often wonder if these changes short-change the freshmen and prolong the day of reckoning for those students that ultimately do not really belong in that curriculum. In my opinion, the killer CS20 route was rough but more humane because it allowed those students that could not cut it to redirect their energy sooner to something they could succeed at without wasting a year on watered down courses.

Even then, I learned embedded development principles on the job, but my educational background left me with enough understanding in the physical sciences that I could quickly understand the new concepts I needed to embrace to build embedded systems.

Is my survey sample biased? Are universities adequately preparing graduates to enter the embedded workforce? Or is the primary burden of growing the next group of embedded developers falling on the shoulders of private industry? And in either case, is that a good or bad thing?

No Responses to “Question of the Week: Are universities adequately preparing graduates to enter the embedded engineering workforce?”

  1. S.K. @LI says:

    Hello ,
    Well i am glad that you have started this post.
    I and an Electronics Engineer.
    With little focus on programming concepts in C or assebly
    Also the gravity of programming a 8051 was not given any importance
    Let alone staring up with avr and dspics..
    I did a P.G. Diploma course in Embedded System Design out of curiosity
    and got introduced loading codes to 8051, TI DSP, Rabbit processors…Still just worth saying i think i know what i am getting into…
    Only after i started to working i realized the magnanimity of working on a AVR32 , a dspic 33f, 30f or an avr16/32….
    Also the concept of an RTOS was just conceptual until when i started working on RTOS, ECOS , LWIP etc.. so yeah its a slow cure at least here in india
    And after working for about 1.6ys i now hear bout VX Works,,, Windows CE programming, Linux device drives. FPGA programming..which makes all i have done till date just trivial or kids play..
    Also there is a huge lack of direction and information on what is the growth cure here in India if not then Abroad as not many know about it.
    Well if it doesn’t seem inappropriate i would like to know
    after working on different uc like dspic33f, 30f, to avr32:ap7000,uc3a0512 and atmega16/32.
    Also after going through Free RTOS and ecos
    1>what should be the way ahead in terms or knowledge growth
    2> Linux device drivers , Win CE programming VX works all diversions to be taken now or later.. i do not understand what lead to what.
    3> OR after 18months of industry exp should Masters in Embedded, or Computers in some colleges from place’s like US be given a though to enhance knowledge and open wider options..
    Hope you do provide some help !!! thank you

  2. J.S. @LI says:

    Much of embedded programming is done by EEs who have little background in software concepts. The code produced by those engineers borders on the horrible. It may “work” or appear to work. I see little in the CS curriculum that focuses how to develop reliable and testable code. Most programs seem focused on churning out low grade programmers focused on web development.

    Another discouraging trend s to teach “programming” with Java. The extra distance from the underlying hardware hinder’s the student’s understanding of the underlying execution of code.

    This is not a pretty stuation, EEs who may know circuits with no software understanding and programmers with no connection to the underlying hardware. It takes an understanding, if not some level of mastery, of both to produce good embedded systems.

  3. A.K. @LI says:

    In one word: NO

  4. B.P. @LI says:

    The DoD says that we are not. The May/2010 issue of CrossTalk, the journal of Defense Software Engineering, just out, is all about “Software Human Capital”. Articles cover Software Competencies, Software Practitioner Recruiting, and one on distinguishing between software professionals and “amateurs”, among several others.

    The overall theme of the issue is that the DoD can not find enough knowledgeable people to create and maintain the software and firmware of today’s complex modern weapon systems.

    More at:

  5. B.B. @LI says:

    Universities generally do not turn out CS degrees with sufficient hardware knowledge or resource concerns to effectively program embedded systems. EE’s generally do not learn enough software to effectively create software.

    Over the years I have witnessed that schools seem to be teaching less and less general science/engineering and encouraging less critical thinking. I find that EE’s who create embedded systems generally do not understand many basic principles of software construction while modern software degrees taught web based development (Java, Databases, etc). Some programs have taught embedded systems development but in the end most training must occur in the field.

    Neither group (EE’s and CS’s) are prepared for the work. Unfortunately even among those who have been in this field for a decade, I find basic understanding and skills are at appalling levels. For example people who have developed bare metal for years who do not comprehend the need for conservation of resource usage in interrupts. Or that comprehend proper separation into interrupt/time driven activities versus loop/thread driven activities.

    The issue with learning on the job is the level of those teaching and the code examples available. Over my career I have come into companies with mature embedded systems that are exhibiting serious issues. Usually it is the basics of the systems that show the stress of years of having features built upon a poor foundation that is failing. So even when people learn on the job, the habits and skills learned can become part of the issue.

    There is no magic bullet. This is not a field for everyone. You can teach principles and could combine EE classes with CS classes and could teach heavy courses such as compilers, C structures and pointers, etc. which all would provide a basis for the field.

    In the end the trade offs of resources (do I use a bit more RAM to save EEPROM or vice versa in a situation) and the proper breakdown of problems to determine effective implementation both from the aspect of today and the products future will always be difficult to teach.

  6. S.K. @LI says:

    @B.B. very well said…
    yeah coming from an electronics background i do experience a huge chunk of my time spent in just learning new software syntax and semantics…
    Also correcting critical software framework bugs which are not mentioned in books but u face it only when it happens….
    A question what’s with the universities that offer Embedded Systems as Masters Program how good is that in terms of embedded skill development…(just to give some idea the univ from U.S.)
    Because work related improvement is more of a cure not precaution…

  7. A.P. @LI says:

    B., you are absolutely correct about CS degrees; I’ve taken a lot of flak over the years because I’m on record as stating that I’ve never seen a good embedded programmer with a CS degree (disclaimer: my degree is in mathematics with an emphasis in CS). They’ve simply never learned how to work in a resource-constrained environment, let alone how the hardware works.

    But, J., I disagree with you about the quality of the code from EEs. Most of the EEs I’ve worked with started out writing code like they designed hardware: if they needed a new stage in a filter or a function which was only slightly different from something they already had, they simply added on. They barely though about subroutines, never mind making a subroutine more generic so that it could handle variant cases. That, certainly, does not result in optimal code; it will be crude and verbose. But it will be reasonably understandable and maintainable. Not what I would call horrible. And they learned quickly: my experience has been that an EE who’s been at this a little while generally writes pretty good code. Not “best practices” maybe but not bad.

    For my money, the best embedded and (especially) real-time programmers I’ve met had degrees in hard science subjects like physics, chemistry and, yes, mathematics. They may not have started out with the hardware background but they knew how to get it and they knew how to solve problems.

    Of course, this is just my experience and, while I’ve been at this longer than I like to think about, I’ve tended to stick “close to the metal” with 8- and 16-bit embedded systems (although I have some hard real-time experience on 32-bit systems). Other’s experience will necessarily be different and they may reach different conclusions.

  8. W.W. @LI says:

    There are many forms of embedded systems programmings. Some does a lot of hardware accesses while others maybe highly algorithmic – requires deep understanding of mathematics..

  9. A.K. @LI says:

    A very similar discussion was held about two months ago on the Embedded Systems Professionals group and the universities are really botching it.*2_1

  10. M.A. @LI says:

    I have a couple of articles that I’ve written for IEEE on this topic. You can find them here:
    and here:

    And no, colleges and universities are not preparing students for embedded systems work. Of the universities I’ve talked with, the response has been that embedded systems have been “reduced to practice” and, therefore, were no longer of any interest. Essentially, if there’s no research money in it, they’re not interested.

    So, it means that as someone who would look to hire embedded systems developers, our best bet is likely a computer engineering graduate. More concrete than the Java-enamored CS people and more software-oriented than the EEs. However, even with that caveat, plan on spending months to years to retrain them in the skills a good embedded developer needs, while undoing the damage that the “everything is a virtual machine with infinite memory and CPU horsepower” mindset causes.

  11. R.W. @LI says:

    I agree with W.. There are so many different applications it’s difficult for a university to provide all the needed skills. I do think they could do a better job with a background in basic hw architecture, even for CS degrees. Overflows make more sense if you understand the basics of register sizes, and how data moves within a system. As more “embedded systems” are really scaled down desktops, the EEs could also benefit from more high-level architecture classes. It’s really a broad topic.

    Maybe we need more specific degrees. Universities can probably get more “bang for the buck” by offering more general degrees that will at least help someone get their foot in the door, and let them specialized “on the job.”

    Reports by universities are self-serving. They’re selling education, and should be read with an understanding that they have an agenda, much like any business promoting the results of their research. It’s not the best source for determining what professions will be in the most demand.

  12. A. @EM says:

    The recent graduates that I have seen have been at best, marginal, in their ability to write code. That being you tell them to write something to do something. But for embedded work, is this enough? I don’t think so. One crucial skill that I have not observed at all is the ability for new graduates to achitect a system. Give them a set of requirements, and they can write code to do something close for each of those requirements, but the final product lacks any homogeneous structure, and becomes a mess of spaghetti code that is near impossible to test or debug. They lack the ability to see how to structure their code to the bigger picture.

  13. G.S. @EM says:

    Can you teach designers to see the big picture ?

    I doubt it. Some brains get it and some don’t. That’s why I favour a Fred Brooks approach. Universities should teach according to the abilities of the student. Usually that does not happen. University is more like a cattle drive. Still ….. the great ones will find their way.

  14. A. @EM says:

    Development is structure

    Graduates I’ve seen in the last couple of years are smart enough. They grasp what’s asked but then they completely skre it up because they have not learned to work structured.
    The work they deliver looks like a big garbage can.
    What they learned is working with tools. They did not learn to work in structures and to think before to do something.
    The ones who learn fast to view the picture behind the tools and build structure (hierarchy) in their work will find their way fast.

  15. D.C. @LI says:

    M. A.:
    Very well written articles;
    A question to you and everybody else;

    If you designed an advanced embedded controller course(s); what you be in the syllabus? What lab equipment would you select? Maybe there is a business opportunity for a company to partner with a university and design an on-line course that would address real world issues.

  16. M.A. @LI says:

    Well, there’d have to be both 8-bit and 32-bit controllers. I’d probably use an 8051 variety like Tensilllica, an ARM Cortex M3 and then an ARM Cortex A9 (dual core). This would enable being able to run on bare metal, a small RTOS like uC/OSII and then an embedded Linux/Android. The equipment could be had fro about the price of a set of books.

    These platforms would enable compiler optimization study, boot loader work, and some real-world type assignments. The Univ of Wyoming took my original paper and actually turned it into a degree program. But, I wish they’d included a bit more 32-bit processor work. I think that the Cortex M3 is cost competitive with the 8051 now days. So, although I still believe that you need to learn the 8-bit gear, I believe that most of the emphasis is starting to shift to 32 & 64-bit.

    As for a syllabus, I’d have to give it some thought. As for partnering with a university, I’d love to. But, the impression that I get from the universities is that embedded development has been reduced to practice so they’re not interested. But, perhaps a college who is not so interested in research grant money and more interested in ensuring their graduates are employable would be a better candidate.

  17. P.M. @LI says:

    As a recently graduated computer engineer entering into an embedded job I have only one thing to add to this discussion.

    The software engineering people are interfering with the comp. eng. curriculum and have removed the teaching of C.

    Luckily I was in a different stream when I entered so I got those classes (not that I hadn’t already already taught myself)

  18. John F. Loder says:

    I was prepared by both schooling and mentoring. Schooling was 2 5hour courses in electronics for Physicists, plus an independent project for advanced lab work, plus a computer architecture class starting with PDP-8s then KIM 1s. This got me a job designing circuit boards then firmware to operate them. After that ground work I had the good fortune of being hired by a MIT grad with good schooling in the subject and good experience in the defense industry. He suggested that I read “Structured Design” by Yourdon and Constantine as our structure was based on it although we had advanced the art considerably from where that book was. THe work was on a PBX in a small box in Z80 assembler hung together with NROFF macros. Yes it wasa object oriented programming without the perversion of language enforced principles which still allow bad code to be written. Later I wrote robot operating systems. 30 years later I am retired with a little personal work and consulting.

Leave a Reply