This may get me in an assload of trouble but I think it needs to be said. Following the announced restructuring of the University of Florida CS program and this classic quote about how Yale shouldn’t be in the business of teaching “trade skills” (meaning, applied software engineering), I’m going to argue that more (not all, but more) academic computer science programs should be shut down or reorganized. Here’s my rationale:
- Most undergraduates and professionals actually want to learn applied software engineering, not “computer science”. Most companies want to hire college graduates who know applied software engineering. But most university CS programs don’t actually teach applied software engineering. This isn’t to say that CS isn’t useful or valuable (even to someone who goes on to become an applied software engineer). But the majority of university CS programs are oriented to training undergraduates to become either systems programmers or academic computer scientists. I’m going to go out on a limb and say this isn’t what most 18-year-olds who enter undergraduate CS programs actually want to do. And I’m certain that the ratio of the demand for software engineers to systems programmers in industry is on the order of 100:1 (maybe even 1000:1).
- University undergraduates are not discriminating consumers of education. This has a lot to do with the “halo factor” of schools that are perceived to be elite. If you get into the University of Michigan (which has an elite CS program) and you spend forty hours coding in Java while you get your four-year degree, you’re probably feeling pretty good about yourself, at least until you get your first job interview after graduation and they realize you can’t actually code. But if you’re in a CS program that happens to be awful, there’s no way you’d know it as an 20-year-old undergrad. This means that consumers of the resource (which in an economy usually punish substandard products by taking their business elsewhere) are really a captive audience. This is one big reason why all universities are slow to adapt and reform in general.
- It should not be necessary for two universities located within commuting distance of each other to have the same academic department (this goes for any department, including English Literature as well as CS). To put this another way, wouldn’t it make more sense for UCLA and Cal State LA to have a single, combined computer science program that’s among the best in the country, instead of two mediocre computer science programs? (The city of Phoenix doesn’t have four major league baseball teams for the same reason.)
- Applied software engineering is a discipline that lends itself to being effectively taught online. There’s no reason to suffer through a mediocre or outdated CS program when lots of good online courses are available. If you’re looking to actually learn something (instead of just getting your ticket punched) you should be able to pick from whichever course best suits your learning objectives, even if that course isn’t available at your school.
- Most university computer courses simply aren’t that good if your goal is to get a job doing applied software engineering. This is because the Ph.Ds who are teaching in these programs generally got their degrees from five to ten years ago at a minimum, when the tools and tactics for software engineering were very different. The industry simply changes faster than academia. Most (not all, but most) universities just can’t keep up with this pace of change using the standard administrative playbook. This isn’t a criticism of the smart, hard-working folks who work in our CS departments; it’s a criticism of the way their departments are organized.
- University academic departments in general should have limited charters and should be reorganized frequently. (Again, not just CS departments, but all departments.) I spent nearly all of my undergraduate career working in academic administration, and I can say that academic departments exist mostly to protect resources (mostly money and people). They don’t really exist to serve students. One good example is cited in an awesome book on educational reform called Crisis on Campus by Columbia professor Mark Taylor: one of the most pressing problems that humanity has today is obtaining clean drinking water. Yet no university has a Department of Water. Why is this? Because campuses are an endless successions of zero-sum games: the formation of a new department necessarily means that resources must be taken away from existing departments, so existing departments viciously defend the status quo, even when that doesn’t align with reality. Computer science education has not been in alignment with reality in a long, long time.
I’m going to pre-empt the inevitable Hacker News countertrolling by responding in advance to the arguments that always come up when I talk about the way that software engineers are trained:
- You need to have a good basis in algorithms and higher math to be successful as a software engineer, and computer science provides that. That’s probably true for systems programmers. It’s not really true for the remaining 99% of software engineers, the vast majority of which will never do pointer arithmetic and shouldn’t really have to. (If you accept this argument, then you must also accept the notion that all plumbers must have the ability to smelt copper and forge their own pipes, because how could you possibly lay pipes effectively without having ever created one with your bare hands from elemental materials?) Otherwise, you’re just enforcing the priesthood of the technologist, which is not a good thing for the profession or for society.
- I’m a systems programmer and/or a CS major and your post makes me confused, sad, or angry. It’s great that you’re a systems programmer and/or a CS major; I value your service to humanity. But this isn’t really about you. This is more a criticism of university administration than the relative worth of systems programmers.
- Coders should learn by coding, not sitting in classrooms. I’m actually not a big fan of classrooms either, but this unfortunate argument is like an abused child who boasts about how a lifetime of beatings was responsible for their good manners and generally pleasant demeanor. The state of software engineering education today is terrible, so it’s no wonder that a lot of good coders are forced to become autodidacts. But learning it on your own isn’t the best or most efficient way to do it. Saying you learned how to code on your own isn’t an indictment of the discipline of teaching software engineering; it more likely indicates that the quality or quantity of software engineering instruction isn’t what it should be. Which leads us to…
- You have a dog in this hunt. Yes, of course. I’ve taken coding courses in CS departments at three different US colleges. I’ve taught coding at the university level as well. I started CodeLesson because I wanted to provide awesome, up-to-date instructor-led coding courses, since a lot of universities and businesses aren’t providing this today.