An old school programmer points out the way in which even programmers are being taught to be glorified power users rather than actual computer engineers:
If I may be so brash, it has been my humble experience that there are two things traditionally taught in universities as a part of a computer science curriculum which many people just never really fully comprehend: pointers and recursion.
You used to start out in college with a course in data structures, with linked lists and hash tables and whatnot, with extensive use of pointers. Those courses were often used as weedout courses: they were so hard that anyone that couldn’t handle the mental challenge of a CS degree would give up, which was a good thing, because if you thought pointers are hard, wait until you try to prove things about fixed point theory.
All the kids who did great in high school writing pong games in BASIC for their Apple II would get to college, take CompSci 101, a data structures course, and when they hit the pointers business their brains would just totally explode, and the next thing you knew, they were majoring in Political Science because law school seemed like a better idea. I’ve seen all kinds of figures for drop-out rates in CS and they’re usually between 40% and 70%. The universities tend to see this as a waste; I think it’s just a necessary culling of the people who aren’t going to be happy or successful in programming careers.
The other hard course for many young CS students was the course where you learned functional programming, including recursive programming. MIT set the bar very high for these courses, creating a required course (6.001) and a textbook (Abelson & Sussman’s Structure and Interpretation of Computer Programs) which were used at dozens or even hundreds of top CS schools as the de facto introduction to computer science. (You can, and should, watch an older version of the lectures online.)
The difficulty of these courses is astonishing. In the first lecture you’ve learned pretty much all of Scheme, and you’re already being introduced to a fixed-point function that takes another function as its input. When I struggled through such a course, CSE121 at Penn, I watched as many if not most of the students just didn’t make it. The material was too hard. I wrote a long sob email to the professor saying It Just Wasn’t Fair. Somebody at Penn must have listened to me (or one of the other complainers), because that course is now taught in Java.
I wish they hadn’t listened.
The real reason the courses are being dumbed down, of course, is so that women can pass them. But they’re not only being dumbed down, they are being prettied-up and sparkle-ponied in an attempt to make the girls feel as if they’re actually able to do something meaningful. This isn’t the case, of course, but the programs are being designed in such a way that the young women won’t figure out that they’ve been sold a very expensive course in self-esteem until after they graduate and realize they can’t actually do any real programming.
This isn’t good for anyone, not for the girls who should be majoring in something else, the girls who could handle the traditional programming curriculum, or the young men who would be better off teaching themselves to program instead of paying tens of thousands of dollars to not learn the more rigorous aspects of the discipline.
I started out as a CompSci Engineering major myself. In the first semester, I realized that I didn’t enjoy the level of detail required to succeed and immediately switched to Economics. I am very, very glad that my university didn’t make the course more to my liking, as I now know that I would not have made for a good programmer, much less a great one. This isn’t a case of old school guys rhapsodizing about the good old days either, the situation is materially detrimental to practically everyone concerned except the universities and the banks profiting from the student loan system.
As an employer, I’ve seen that the 100% Java schools have started churning out quite a few CS graduates who are simply not smart enough to work as programmers on anything more sophisticated than Yet Another Java Accounting Application, although they did manage to squeak through the newly-dumbed-down coursework. These students would never survive 6.001 at MIT, or CS 323 at Yale, and frankly, that is one reason why, as an employer, a CS degree from MIT or Yale carries more weight than a CS degree from Duke, which recently went All-Java, or U. Penn, which replaced Scheme and ML with Java in trying to teach the class that nearly killed me and my friends, CSE121. Not that I don’t want to hire smart kids from Duke and Penn — I do — it’s just a lot harder for me to figure out who they are.
Universities should be making the entry STEM courses harder, not easier, but as it stands, both their financial and their PR incentives run in precisely the opposite direction.