ekinoderm’s “Who did Kill the Software Engineer?” ruminates upon Robert Dewar and Edmond Schonberg’s excellent “Computer Science Education: Where Are the Software Engineers of Tomorrow?” (both well worth reading) and fostered in me two thoughts about computer science classes:
I can remember students in my classes constantly grousing about how topics like Scheme or Finite State Automata were “useless” and we should spend our time doing “useful” things like learning how to use VB to make a database app or something. … the adoption of Java is driven almost entirely by a desire to make programming “fun” and to alleviate students’ fears that they won’t learn anything “useful” from a course taught in an academic language like Scheme
My first thought: if your comp-sci course is easy then you’re either a genius or you’re wasting your money. The odds on that are not in your favour.
My second thought: if your comp-sci course takes you to the edge of weird when it comes to computing (to put it another way: if you’re constantly thinking “when will I ever need to use this??”) then you’re probably really quite fortunate. Drink it in.
As Hunter S. Thompson put it:
When the going gets weird, the weird turn pro.
All the rest learn Java.*
Personally, after fifteen years writing various kinds of software professionally I find that every day I wish I’d had a deeper, weirder comp-sci eduction in my youth. I suspect I would have written better code sooner, understood more easier, and saved a lot of the time I’ve spent this last decade and a half playing catch-up (functional programming is a concept only two years old to yours truly… sigh) which could have been used learning even weirder stuff.
While I don’t believe that Java is to blame for the evils of modern puppy-mill comp-sci (I really try not to blame the tools) I also don’t believe I shall ever take seriously any developer who only knows but one programming language.
Or to put it in human terms, wouldn’t you laugh at someone who calls themselves a “linguist” simply because they speak English?
(*I couldn’t resist one shot)
Update 22:01: This topic seems to be one that’s growing in popularity around the web. If this is of interest to you, also check out Reg’s No Disrespect and then track back for Why You Need a Degree to Work For BigCo. And then I recommend Brian Hurt’s What good is a CS degree?. Here’s a teaser:
Here’s the kicker- there was not one class at the college I could take that would teach me C. Not one. How unfair was that? Their attitude, when the issue was brought up, was “we’ve taught you Pascal, we’ve taught you assembly language- here’s a copy of K&R, figure it out.”
One thing I want to make very clear is that I don’t believe that Java the Language is to blame. In fact, I know it because a couple of the smartest developers I’ve ever had the pleasure of working with were Java developers creating stuff that still fascinates me six years later.
It seems to me that when people blame Java what they’re really saying is “computer science has started teaching languages that are easy to teach the basics of and call that a comp-sci degree”. When put that way, what fault the tools?
From this point on should I comment on the subject I’m going to use the venerable Blub rather than Java, or VB (remember the good ol’ days when VB was everyone’s favourite whipping boy?) or ActionScript or even <your most hated language here>.
I also don’t think a degree is necessarily useless. Like every other degree it depends on where it came from, who gave it to you, and what you did to earn it. More importantly, it likely informs what you did (or will do) after you earned it: if it instilled a love of programming and seeking the esoteric then chances are you’ve got a personal project that speaks volumes about your abilities.
If you skimmed through the puppy mill to get the piece of paper you probably don’t have an interesting personal project and that says just as much, yeah?
Update 2008-01-22, 15:23: Ben asks an excellent, important question down in the comments:
What is a student who doesn’t get into the big name schools (MIT, Caltech, Stanford, etc.) do to ensure a good CS education?
If you’ve got thoughts on that please post them to the comments or even better write them up in a blog post and link ‘em. I’m really interested in hearing that answer too.