Bookmark and Share
The logo for The Embedded Muse For hints, tricks and ideas about better ways to build embedded systems, subscribe to The Embedded Muse, a free biweekly e-newsletter. No hype, just down to earth embedded talk. 23,000 other engineers subscribe. It takes just a few seconds (all we need is your email address, which is shared with absolutely no one) to subscribe to the Embedded Muse.

CS Schooling

Published 5/3/2008

Mike Anderson, a frequent speaker at the Embedded Systems Conference recently wrote about why embedded engineers in the US are losing their edge (http://www.todaysengineer.org/2008/Feb/help-wanted.asp). He feels CS departments are doing a poor job turning out graduates trained in the skills needed in firmware design. That's a complaint I've heard from many other sources, particularly from companies trying to hire embedded engineers.

In the olden days embedded folks were mostly EEs who picked up programming skills from their education or on the job training. Now my informal surveys show that, here in the US at least, around half of all firmware developers have CS degrees. Considering the time needed to obtain a EE degree (5 years is typical) and the expense (an additional year of school plus some universities now have a surcharge for engineering and science) it's reasonable to expect fewer EEs and more CS folks will be entering this field.

So I looked at course requirements mandated by the CS department at one large university. The results backed up Mike's assertions. Required classes in the major program are:

- Object-Oriented Programming I and II (in Java)
- Discrete Structures (in Java)
- Introduction to Low-Level Programming Concepts (no programming requirement I could discern)
- Computer Organization (a bare introduction to assembly but that appears superficial)
- Organization of Programming Languages (C, Pascal, ML, LISP, Prolog, C++, and Smalltalk - so many, it's hard to imagine a harried student would master any of them.)
- Algorithms (no apparent programming)

Numerous electives are required as well. As far as I can tell only one has a programming requirement. Classes offered include networking, security, databases, usability, formal grammars, numerical analysis, crypto and the like. There's a single class - which is not required - on software engineering with dated material (like chief programmer teams) that requires a significant amount of programming.

So a CS major graduates with a minimal exposure to assembly language, and no real C or C++ experience. She's basically a Java whiz who would be baffled by pointers, dynamic memory allocation, resource constraints, or many of the other critical issues faced by firmware folks.

In a recent poll on this site (http://embedded.com/pollArchives/showPoll.jhtml?surveyno=254401002) only 7% of respondents said they have used no assembly at all. 79% have used at least a couple of different assemblies. Though assembly is a diminishing part of our work, it's as essential as word processing.

The same school's EE department requires a C programming class, courses on signal theory, assembly language, and computer organization - even for students pursuing a specialization in power engineering or other non-computer aspect of electronics. Many electives target our work: DSPs, control theory, programming microprocessors, OS design, filters, and the like.

What do you think? Are CS departments missing the mark when it comes to preparing firmware developers for the real world?

 
Upcoming Events

You can bring this class to your company! Click here to find how we can come to your facility and present the class.


Did You Know?

Salary Survey
Here are the results of the 2012 salary survey..