12/29/05: Computer Science vs. Software EngineeringJoel on Software has a great essay about the "dumbing down" of CS curricula world-wide that happened when they all decided to teach Java instead of C and Scheme. While I believe Java is better than C, they are both terribly flawed languages and teaching them is best left to vocational schools -- or, as Joel says, to the first week on the job for someone who already knows functional programming and pointers.
A flaw in Java as a pedantic language left unmentioned by Joel is that people who learn Java think that because they've learned a language with some Object-Oriented features that they've also learned OOP/OOA/OOD. No such luck. As I have mentioned before (and will again -- have a draft post on that very topic), OO is hard. As my pal Miško says,
OO is like teenage sex: everyone says they're doing it, almost nobody is doing it, and those who are doing it aren't very good at it.At least with MIT's Scheme curriculum there was no pretense of OO: you're learning data structures, and algorithms, and recursion, and continuations, and you get to fully and deeply learn about each.
And argh, why do OO teachers do inheritance first thing out of the gate? Inheritance is just delegation plus polymorphism, with some really nasty semantic problems attached (overloading, multiple inheritance, virtual method dispatching, fragile base classes, etc.)...