Do CS departments come even close to producing graduates that meet the needs of the firmware community?
Mike Anderson, a frequent speaker at the Embedded Systems Conference
wrote recently on
Today's
Engineer about why embedded engineers in the US are losing
their edge. 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 Embedded.com 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?
Jack G. Ganssle is a lecturer and consultant on embedded
development issues. He conducts seminars on embedded systems and helps
companies with their embedded challenges. Contact him at jack@ganssle.com. His website is www.ganssle.com.