I’m reading a great series of articles (thanks be to the hyperlink!) that have rekindled my on-again, off-again interest in the problem of the precipitous decline in the number of computer science graduates – nationally and internationally.
Let’s sum up the key popular arguments:
- CompSci isn’t hip enough for students.
- Nobody needs a CS degree to do 90% of the professional work in the field.
- Java is responsible, an argument put forth in considerable detail by (among others) Dr. Robert Dewar and Dr. Edmond Schonberg of ADACore. Joel Spolsky put in his two cents a couple years ago as well.
- K-12 education is giving our students an aversion to, or insufficient exposure to, computer science.
- Worries about the job market are turning kids off.
That last one is obvious bullshit. Every day you can go to Monster.com and look up thousands of programming jobs, at top salaries. A job in software development is among the most portable, and highest paid, of any profession. And believe me, a key thing on the mind of almost every college kid is “how much can I make when I graduate?”
Regarding Java: Mark Guzdial, in a well written post on the subject, writes:
The curriculum did not change that dramatically from 1997 to 2002, but that’s when the enrollment changed so dramatically.
Hm. Wasn’t that when Java adoption in CS programs really took off? Remember when Java was the Next Great Thing, the Grand Unifier, the Language to End All Languages? You couldn’t walk 10 feet in a Barnes and Noble without somebody’s Java book falling off the shelf and knocking you silly.
I was EXTREMELY fortunate to start my computer science education with Ada. I haven’t programmed in Ada in 15 years, but the lessons learned there have served me well in all subsequent parts of my career. Java? I’ve never liked Java. Java is a language for people who lack rigor in their thinking processes.
***********************
The thing that concerns me the most, however, is that the examples of truly innovative computer science programs are few and far between – at least they don’t get enough exposure. I see a lot of defensiveness among university educators about the issue, but no one seems to be grabbing the problem, Tom Peters style, and leading the charge. One might infer that (some) university CS programs are risk-averse; one might also suppose that the administrators of said programs are obtuse, obstinate, or supercilious.
What’s my personal opinion on the key factor that is leading to the decline of undergrad CS graduates? Twofold:
1) Programming qua programming is unsexy. Point #1 above. When your leading lights in the software world are this guy and this guy, you see my point.
How to fix this? Expand the curriculum. Include gaming, multimedia, cross-disciplinary majors, and track the sexy related topics like bioinformatics, clean energy, citizen journalism, etc.
2) Programming is fucking hard. Nobody likes hard. That’s why there are about 100 times as many communications majors as there are math majors.
How to fix this? At some essential level, you can’t. It’s a complex subject, and software is – as somebody points out every few minutes – the most complex thing ever created by humans. You don’t hear talk about “the singularity” for nothing.
However, there are steps that the universities can take.
- Make tutoring an essential part of any CS curriculum.
- Get the tool bullshit out of the way and don’t make students struggle unnecessarily with the ramp-up chores.
- Encourage or demand internships where students will get real-world, hands-on, ten-hours-a-day experience doing actual programming.
- Encourage and foster communication among the students, but don’t puss out and do “group projects” exclusively because to do otherwise would hurt student’s feelings.
- On the other hand, don’t choose arcane topics, languages, or tools on the theory that “if the witch sinks, she’s not a witch”.
Interested to hear your comments.
