Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Channels ▼

Mark Nelson

Dr. Dobb's Bloggers

CS Grads: You Don't Know Jack

May 04, 2008

This week  Embedded.com has Jack Ganssle trot out what is by now a thoroughly exhausted straw man in his article CS Schooling, where he asks Do CS departments come even close to producing graduates that meet the needs of the firmware community?

Jack is addressing firmware specifically, and for his punching bag he looks at the required courses in a typical CS curriculum (parenthetical comments are his):

  • 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)

Jack uses this list to make two points:

  1. He thinks that the CS curriculum is weofully deficient in classes that require programming, and more importantly, C and C++.
  2. The EE curriculum is much more in tune with the requirements needed to write firmware.

Jack Fell Down 

Jack Ganssle
Jack Ganssle
Personally, I think Jack is batting .500 at best. His contention that CS undergrads aren't doing enough programming isn't even born out in the class list he offers up - most of those classes will have plenty of programming work.

And honestly, complaining that taking an Algorithms class doesn't help prepare you for real life because there's no programming is like saying Organic Chemistry doesn't prepare you for a career in medicine because there's no interaction with patients. I think CS students could use more work in algorithms, not less, and that class can (and perhaps should) be taught very effectively with nothing but pencil and paper. (As Dijkstra has so famously maintained.)

As for the superiority of the EE curriculum for training people in firmware develpment, I guess my reaction is Duh! As you move closer and closer to the hardware, you're going to find that a greater and greater percentage of firmware developers are EEs. There's a reason for this: it's their home turf.

When a firmware developer has to work directly with hardware for things like development of device drivers, management of interrupts, control of MMUs, and so on, an EE is definitely going to be more comfortable by training. Pure CS people can play happily in this domain, but they need to acquire hands-on experience, whether that be in the workplace or outside. And giving that in-depth exposure as part of a general CS curriculum would probably not stand up to a cost/benefit analysis.

Should We Care?

Jack's arguments don't really inspire any call to action, at least not to me. But does this mean we shouldn't care about the CS curriculum? Of course not.

Believe it or not, the majority of people in academia do care, a lot, about properly preparing their students for industry. They know darned well that their students face a lot of competition for entry-level jobs, and schools that don't place their students are going to suffer.

But professors and department chairs can't do their job in a vacuum. The best thing you can do to help the situation is to provide feedback. Establish a relationship with the schools that you hire from, and let them know where they are falling down, and where they are doing well.  If you care about the profession, it's an excellent way to give something back.


Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.