advertisement

Weblog:   What would you put in a Computer Science Curriculum?
Subject:   We're hurting for real Software Engineers
Date:   2005-09-11 11:04:01
From:   jmh_az
I really have to disagree with Mr. Zambonini. One of the courses listed as not useful for getting a job was "embedded systems". Ahem. In case some folks haven't bothered to notice, something like 70% of all the "computers" on this planet are invisible. Now consider how many computers are "visible", and that works out to be a BIG number. Seems to me that there might be a bit of disconnect here. But, all that aside, I manage a lab developing software for space missions, and before that I managed projects developing and testing software for things like engine control systems on commercial aircraft. When I posted a job opening I would have been thrilled to see a resume with "embedded systems" in the list of courses taken by the applicant. I'd be thrilled to see one now. Every time I post a job opening at the lab I get something like 40 resumes. Of those I would say that 90% list things like web server maintenance, Java and web page design as major skills (with a smattering of Visual Basic and C++). Besides the fact that I can't figure why these people even bothered to apply (the job posting clearly states that we're looking for things like embedded and real-time knowledge, real-time image data processing, ANSI C programming, and robotics), the ones I do end up picking to interview can usually do a perfect "deer in the headlights" impersonation when I ask them about things like assembly language, real-time deadlines, coordinate transform algorithms and cyclic complexity. It's sad.


As for the author's distinction between "computer science" and "software engineering", well, I'm sorry but I really don't think someone who can whack and hack a server-side PHP application is a "software engineer". A software engineer, by my definition, is someone who owns and has read Knuth's "The Art of Computer Programming", knows who Edsger Dijkstra was (and can pronounce his name correctly), can define the difference between a binary and counting semaphore, and can tell me why Java and C++ are generally bad ideas for use in high-reliability, hard real-time systems. A real software engineer, in my opinion, should also know the difference between a waterfall and a spiral, and what IEEE 12207 is (DO-178B is a bonus, but I don't hold out much hope for ever seeing that on the resumes I get).


Most of the current crop of "computer science" graduates I encounter can't do these things to the level necessary for me to feel good about turning them loose with code that will eventually end up millions of miles away from Earth. They typically had the kind of college cirriculum espoused by Mr. Zambonini.


What I think is seriously lacking in college cirricula is a sense of what is really important in the "real world". I don't think we need more Java programmers, OO languages are not the be-all, end-all that the compiler vendors and pointy-haired bosses wanted us believe, and knowing how to design the life cycle for a project and then implement it is a critical skill that I feel gets seriously short-changed by academia. I won't even get into why the phrase "unit testing" drives me insane. We need people who can do real software engineering with the same level of rigor found in mechanical engineering, electronics engineering, or aerospace engineering.

For example, would you get into a car and drive from New York to Los Angeles if you knew the car was assembled using trial-and-error methods by people who couldn't tell you what was really inside the engine or transmission? I hope not. But, yet, that is how a lot of software is created. Is it any wonder that something like 50 to 70% of all major software projects either do not meet the original requirements, are buggy, or just flat don't work at all (see this month's (September '05) issue of IEEE Spectrum for some illuminating articles).


We need more rigor, more theory and more basics in our college courses. We need people who stand on solid theoretical ground, know where the theory came from and why, and have an appreciation for how that theory is applied in the real world. What we don't need are more web page designers, Java hackers and XML wizards.


Want another opinion? Try this one () from Joel Spolsky. Or, how about this comment from Alan Kay, one of the founders of OO programming: "I’ve heard complaints from even mighty Stanford University with its illustrious faculty that basically the undergraduate computer science program is little more than Java certification." (ACM Queue vol. 2, no. 9 - Dec/Jan 2004-2005 () . Need I say more?

Full Threads Oldest First

Showing messages 1 through 2 of 2.

  • We're hurting for real Software Engineers
    2005-09-11 13:15:45  snap [Reply | View]

    ooooo... I'm not an embedded software engineer, but you make me want to become one so I can work for you! ;)

  • MISSING LINKS: We're hurting for real Software Engineers
    2005-09-11 11:08:36  jmh_az [Reply | View]

    I just discovered that the posting SW here isn't smart enough to handle embedded links. Here they are:

    http://www.joelonsoftware.com/articles/CollegeAdvice.html

    http://acmqueue.com/modules.php?name=Content&pa=showpage&pid=273&page=1

Showing messages 1 through 2 of 2.