There's an information delay that causes these trends. Remember that the people making decisions on their college majors are 16-18 year olds. They're basing these decisions on $$$. The university encourages these decisions because of $$$. The new students aren't looking at the job market and recognizing that they're pushing it towards a glut (as a cohort), as individuals they're making a sound decision in that moment with the incomplete information and lack of forethought typical of someone that age.
Of course, that lack of forethought isn't exclusive to them. You see the same behavior in other markets. Today I see that someone has developed X and is making money, but the market isn't captured (lots of growth potential). So I decide to make X (sound decision on what I know). However, 98 others also make the same decision at about the same time. By the time we all start shipping X we've flooded the market and now it's not profitable (getting too small a slice of the whole, or competition drives prices too low). I'm trying to recall the precise term in systems theory, "bounded knowledge" maybe?
EDIT: "Bounded rationality" was what I was trying to recall. It's useful in a number of fields, I came across the term (proper, the concept wasn't new to me) in studying systems dynamics.
I've talked about this with friends – is CS a gold rush right now? I'm sure with the younger generation being fed that it's a cheat code to make money the market will flood and wages will be driven down. Or, web dev jobs will be flooded and proper system design jobs will stay the same since they have such a high barrier of entry? We'll just have to wait and see.
I'd be curious to know whether there's a good way to avoid this. As someone who's currently in high school and looking to major in CS, this really worries me - am I actually going to be able to find a job a few years from now? Should I be planning to study something else instead?
Personal opinion, the general guidance I give to teenaged kids of friends:
The best way is to choose to do it because it actually interests you, not just because you want the money. You can get a job with the degree despite the glut of graduates. Just accept that you may not always be getting the $150k/year starting salaries you sometimes hear about.
But if CS is only of passing interest and you have other majors you're considering:
I wish more people would minor in CS, rather than major in it (NB: Not all schools have a good CS minor program even if they have a good CS major program). I have a lot of engineer friends (from my professional career or my time in school) who have little programming skill, but find themselves increasingly needing to program. Even the first 5 CS courses in most programs (versus the first 1-2, at best) would make them 10-100x more effective in their jobs.
A former colleague (EE) wrote test analysis software (we were both doing verification and validation work) that took minutes to analyze the data. My slightly improved version resulted in getting execution time down to seconds in the worst case (500MB file being processed). The improvement didn't need more understanding of programming than a 2nd year CS major would have, but he didn't have it because he'd taken literally one programming course (and never programmed again, except for small matlab things). I've seen similar things from aerospace and other engineers. Their code is usually correct, but often inefficient. Or they lack an understanding of the underlying memory model of a language like C and try to do impossible things (that, again, a 2nd year or so CS major ought to know).
So: Stay the course with CS if it is of real interest to you. Otherwise, look to double major or minor and use your CS skills to stay ahead of others in your discipline.
Thanks, that's a good point! I definitely am interested in the subject itself, and I think I would want to do it even if the money won't be as good as it is now, but it's hard to deny that's a factor as well. Mostly, I'm worried that there will be enough oversupply that there will barely be any jobs available at all, but it's reassuring to hear that may not necessarily be true.
I almost wonder if it would make more sense to major in CS and minor in something else, which would hopefully make it easier to specialize in a particular field rather than competing against a lot of generalists. I'm not entirely sure what else I'd want to do though, which goes back to the lack-of-interest problem that you mentioned. It's definitely something to think about!
Of course, that lack of forethought isn't exclusive to them. You see the same behavior in other markets. Today I see that someone has developed X and is making money, but the market isn't captured (lots of growth potential). So I decide to make X (sound decision on what I know). However, 98 others also make the same decision at about the same time. By the time we all start shipping X we've flooded the market and now it's not profitable (getting too small a slice of the whole, or competition drives prices too low). I'm trying to recall the precise term in systems theory, "bounded knowledge" maybe?
EDIT: "Bounded rationality" was what I was trying to recall. It's useful in a number of fields, I came across the term (proper, the concept wasn't new to me) in studying systems dynamics.