>i'm saying that most of what goes on in academic CS departments is not what we need as a society and it's not what most undergrads hope to get into when they enroll. most undergrads get into CS to write software, not to learn "theory" or "compiler design" (although, again, as i pointed out in the post, if this happens to be your bag, more power to you -- but this isn't really about you, it's about the mismatch between what university CS programs do and what people and society really want or need.)
I don't think that catering to what undergrads want is a good thing, at all. The majority of undergrads are 17 to 21 year old kids that really don't know what they want to do. They don't know the industries they want to get into. I certainly didn't, and my experiences at UIUC turned me away from going into game programming to a totally different space. And I wasn't a good programmer out of college. I was pretty terrible. But work has taught me a LOT, most of which I wouldn't understand without the theory basis.
>software engineering is obviously teachable (i've been doing it for 20 years) and that's true even if you personally didn't have any good software engineering instructors or mentors. it looks like you and i are in agreement that rapid change in software engineering makes universities not the optimal place to teach software engineering (that was the point of my post). but it doesn't follow that because universities are bad at this, that software engineering is "not teachable".
Like I said in my post, the difficulty of teaching programming and SE in general is that it's changing at an incredibly rapid pace. Languages have evolved. C/C++ were the de-facto languages for a while, then Java gained quite bit of popularity. Recently, C# seems to have taken a large majority of the mindshare.
20 years ago, a lot of SE practices were highly structured, highly documented(and highly wasting of time) systems. IBM's RUP is one example. 10-15 years ago, less structured systems like XP started showing up, and gained quite a bit of popularity. In the last few years, Agile has become very popular. I learned about RUP and XP in my SE courses, but the place I work at doesn't use any of the above.
So what would the program teach? Just the most current, up to date stuff? Or would you try to teach a bit of everything?
The problem with teaching just the brand new shiny is that you end up with the Java mills from the 90's. They're not teaching programming. They're teaching Java. And it may be worthless in a year. While that may just be what the student wants, it's not what society needs.
> I don't think that catering to what undergrads want is a good thing, at all
that's not what i proposed at all. what i propose is to bring curriculum into the 21st century, and to call out the fact that cargo cult thinking and poor organization on the part of universities are standing in the way of that.
I don't quite understand what you mean by that. Dijkstra's algorithm is the same both in 20 and 21st centuries, ditto for red-black trees. Are you proposing universities should be teaching iOS programming and web development with ruby instead of data structures and complexity theory?
I don't think they should be teaching that at all. It's a bigger waste of time than teaching differential equations. At least diff. equations are there forever and might one day come in handy if you end up writing some software for modeling physical processes. Ruby, on the other hand, will be replaced by some other trendy language in a few years. Plus, if you already know a couple of programming languages with different paradigms, picking up Ruby (or Python, or PHP, or Java) is really easy to do on your own, you can start writing production code in matter of weeks.
This isn't about whatever language is the flavor of the month, although seeing universities teach a language that is less than 20 years old would be nice. It's more about CS programs that produce graduates who have no practical ability to code at all, in any language.
Language proficiency, by and large, is the easiest thing for anyone to pick up. Again, new CS grads are, on average 21 or 22 years old. I was programming C/C++ for around a decade at that point, and I was still a terrible programmer. Work taught me a lot more on how to write good C code.
Programming languages are tools. Knowledge of a language is not the final goal of a CS education, because it's the same as teaching a mechanical engineer how a drill works.
Also, the tools are based entirely on the theory of computing. And once you understand the theory, understanding what the tools are doing, and how they work, becomes much easier.
I don't think that catering to what undergrads want is a good thing, at all. The majority of undergrads are 17 to 21 year old kids that really don't know what they want to do. They don't know the industries they want to get into. I certainly didn't, and my experiences at UIUC turned me away from going into game programming to a totally different space. And I wasn't a good programmer out of college. I was pretty terrible. But work has taught me a LOT, most of which I wouldn't understand without the theory basis.
>software engineering is obviously teachable (i've been doing it for 20 years) and that's true even if you personally didn't have any good software engineering instructors or mentors. it looks like you and i are in agreement that rapid change in software engineering makes universities not the optimal place to teach software engineering (that was the point of my post). but it doesn't follow that because universities are bad at this, that software engineering is "not teachable".
Like I said in my post, the difficulty of teaching programming and SE in general is that it's changing at an incredibly rapid pace. Languages have evolved. C/C++ were the de-facto languages for a while, then Java gained quite bit of popularity. Recently, C# seems to have taken a large majority of the mindshare.
20 years ago, a lot of SE practices were highly structured, highly documented(and highly wasting of time) systems. IBM's RUP is one example. 10-15 years ago, less structured systems like XP started showing up, and gained quite a bit of popularity. In the last few years, Agile has become very popular. I learned about RUP and XP in my SE courses, but the place I work at doesn't use any of the above.
So what would the program teach? Just the most current, up to date stuff? Or would you try to teach a bit of everything?
The problem with teaching just the brand new shiny is that you end up with the Java mills from the 90's. They're not teaching programming. They're teaching Java. And it may be worthless in a year. While that may just be what the student wants, it's not what society needs.