Land War in Asia (aka, CS undergraduate education)

Jun 20 2011 Published by under computer science, education

I really didn't want to get involved in the debate going on over at Matt Welsh's blog, but I would like to offer a slightly different perspective.

The debate on Matt's blog is a classic one in CS undergraduate education. That question is: how much should we teach "real world" skills? And usually the answer I've heard is, "This is Computer Science, not a vocational program.", or, "This is Computer Science, not Engineering." etc.

Having spent a long time in industry, I can tell you the single most important thing a industrial Computer Scientist needs to know is: What the hell is this and how do I fix it.

That's it.

Now, how do you get to that? How do you feel comfortable diving into deep hardware and software problems? Tinkering. Practice. Persistence. Being comfortable with failure. Knowing how to ask questions, read manuals, and type complex, arcane search queries into google.

You need to understand and appreciate not just how computers work, but how other computer scientists think. To do this you need to understand geek culture to some extent - why we always take shortcuts across the grass, why we hate Windows, why we sometimes describe programs as beautiful.

This all takes time, patience, and practice. And an incredible amount of stubbornness and persistence. The challenge to us as Computer Science educators is how to best cultivate this sense of duty toward solving problems.

Now some might argue the beauty of mathematics is enough to slog through Discrete Math. The burning desire to know the soul of a machine is enough to endure hours a night hunched over a soldering iron followed by eight hours of doing it again.

I think for some students this is true. But for many students this is not enough to stay the course, as it were.

We need to teach Computing that has purpose and meaning. Students need to understand why all this stuff matters. The "eat your Theory vegetables because it teaches you how to think" argument doesn't really hold here, but nor does a vocational PHP course.

Undergraduate CS Education needs a story - with a beginning, a middle, and an end. Students need to learn not just how to make and stack the building blocks, but to see how they fit into the context of the play room.

Give students that, and they will eat their theory vegetables gladly. Retention rates will soar. Instead of saying, "So what?", underrepresented minorities will say, "So that's what!"

3 responses so far

  • Karen says:

    I would disagree slightly; my version would be How Do I Figure Out What The Hell This Is and how do I fix it. Before I left engineering 7 years ago, I had a real problem with kids coming out of school with CS or CE degrees and a certainty that they knew everything, but a complete lack of ability to learn anything that didn't come out of a book. I gather from my husband, who's still an engineer, that it hasn't changed much.

    There are so many ways to learn in the workplace that defy the young professional: studying somebody else's code; hanging out with the techs and seeing what they really do for setup in the lab; taking the time to learn from professional testers how they test code; building yourself a computer; etc. Once in awhile I made the mistake of suggesting some of these approaches, and was told that was beneath them.

    Occasionally my husband can wrangle a week to work remotely (I'm finishing up a thesis, I can work anywhere) and we escape to our cabin in the (internet-served) sagebrush. We are both more productive in the rural, quiet environment. But this last trip, he needed a particular setup in the lab, so he could access it over the 'net. He talked with a fellow engineer who agreed to set it up for him. Didn't work. He faxed a drawing of what he needed. Didn't work. Finally he quit early on Friday in frustration, we went home, and the following Monday he spent five minutes in the lab and got it working. I saw the drawing and I understood what he wanted -- and I'm seven years out of the field, and from a different subfield to boot.

  • David Rutter says:

    I do see a need to differentiate between Computer Science (as a subfield of Mathematics, concerned with the solving of abstract Problems by Algorithmic Methods, with results to be published in FOCS) and Computer/Software Engineering (which is where you really need to know what this is and how to fix it, how to make it do that instead, and how to prevent it breaking in future). I don't really understand why (in my lifetime anyway--this may be changing) universities lump together these two very different things in a BS Computer Science. I much preferred the heavily theory oriented classes, and got more and more bored the less abstractly mathematical and more real-world practical the material became, to the point where I barely skated by my Operating Systems class, missing failing by one point.
    This shouldn't be hard. Different people have different interests. What is currently called Computer Science is easily split into two disjoint pieces. So make separate degrees for those parts, and let the students pick one. If they enjoy both equally, let them pursue a dual degree (which will be more natural than most such, the two degrees having a number of overlapping ideas).

  • uba babs says:

    I think this war could be defitted if the sopports it through collaboratin,thereby rendering assistance by making fund available.

Leave a Reply