Couldn't agree more. The discrepancy between academia and industry is disgraceful. I just finished a particularly academic Masters in CS, and failed to learn a lot of skills that would have been useful in the real world - specifically languages like C#, python, or Ruby, big-data, server administration, parallel/distributed programming, etc. I'm not opposed to learning these skills on my own but it's annoying that I am not more prepared for industry.
Did you work BEFORE you went to school? I think a lot of this could be avoided by having kids take 1-2 years between high school and college to work. Then they would know what to study. It is kind of a catch-22 though.
I gravitated towards the theoretical in my B.S. and Masters subjects because that's what I liked. In retrospect I should have learned more about OS's and such. Though I learned it while working through self-study, so it worked out OK.
My education gave the impression that all computer scientists did was various kinds of linear algebra, whereas I don't think I've used linear algebra once in 10 years of professional programming, even working at a video game company, and Google (i.e. I've actually had jobs more likely to use math than most programming I would say)
On the other hand, I don't think you should be annoyed... theoretical foundations are worth learning. A lot of stuff you mention will be less important or commodified in some way in 10 years. Your education is supposed to last your whole life, not just prepare you for whatever's hot the decade after you graduate.
This is a great point, but the logistics are daunting. I'm starting to think the idead "university" education is something like this: 2 + 1 + 2. That awards the equivalent of two degrees. Even one liberal arts and one more technical in nature. with a paid, internship for 12 months in between. You get credit for the work done in the field, and then this is more cost effective and time-efficient than 4+2+2 for a masters (saves 3 years of time and 2 years of tuition). By the time you are done, you are much more likely to be ready to "hit the ground running". [1]
_________
[1] This proposal depends on having a highly challenging and good quality work experience (not entry level garbage job), which might also be a conideration for many Uni's to manage. It might not be possible at scale.
Yeah, that's closer to what I think would work. But it's actually not all that different than "co-op" programs. For engineering majors, it's common to have programs where you work at a company for 6 months in the middle of school instead of a semester of classes.
I happened not to take advantage of that because I was having fun in college. But I know people who did.
Really, CS majors shouldn't be complaining that they didn't learn any skills in college, because they learned about the halting problem and network flow rather than source control and automated testing. Logical thinking is a transferable skill. Liberal arts majors should the ones complaining!
The current system is somewhat broken in that a lot of smart kids get sucked into academia without realizing how little what they're doing matters in the professional world. But there are a lot of other systems that would be equally or more broken.
I think there are some schools with a mandatory coop program for engineers. I think Waterloo in Canada? Looking back I think that's pretty close to ideal... within 4 years you can't really do much more for a student.
Notice the S in that CS. Science degrees are generally just that, and political science students don't get gigs in city council, state government, and White House.
What you were looking for is more of a trade school skills experience, which some community colleges provide, particularly for languages.
I keep seeing this. The reality is compared to the number of CS graduates there are only a tiny, tiny number of jobs where you can sit around worrying about whether an algorithm is nlog(n) instead of n^2 or if a language is NP complete. It's just disingenuous to pretend the bulk of CS degree holders won't be looking for software development positions.
It wouldn't destroy the university system to teach these people some useful software engineering skills.
Of all the stuff you mentioned, the only things that might make sense in a CS MSc programme are big-data (assuming you're talking about the really interesting parts of it, and not a Hadoop cookbook), and parallel/distributed programming (again, assuming you're interested in designing distributed algorithms, etc).
The rest are just skills, and do not belong in a CS MSc programme, particularly one you describe as 'particularly academic'.
Most people doing those things learned all of them on their own. If you need a class to learn your tools, how are you going to figure anything out when you get a job and on day 1 you have to solve a problem that their isn't a class for?