CS Grads: You Don't Know Jack
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:
- He thinks that the CS curriculum is weofully deficient in classes that require programming, and more importantly, C and C++.
- The EE curriculum is much more in tune with the requirements needed to write firmware.
Jack Fell Down
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.