The explanation is that the number of devs (and many related trades) is increasing rapidly, largely driven by hires of young neophytes rather than retraining of e.g. 50 year old lawyers. The neophytes are younger and have lower wages than the mean dev. This brings the average down faster than raises and aging bring the average up.
You can verify this if you look at data for particular career cohorts, either people or experience levels. In the 4 years I've been on HN the quotes I hear for "generic CS undergrad from Stanford" are up more than 25% (80k to 110k or so, starting salary offer). Companies that I work with complain bitterly that their competitors are bidding irresponsibly. The going wages for interns are substantially in excess of what I expected to earn in mid career when I graduate not even 10 years ago.
Also, anecdotally, of the couple hundred people whose professional statuses I'm routinely exposed to I don't think I've ever heard "Boo, got to take a pay cut" except for making the BigCo to startup or self-employment transition.
Just looking at Stanford grads is far from representative. In fact Stanford is possibly the most extreme outlier!
The US median salary for a fresh CS grad in 2013 was $59,221 . Adjusted for inflation, that's $41,323 in 1998 dollars , which at that time was a pretty unremarkable salary for a fresh CS grad (or anyone who just knew HTML, for that matter).
Barring a more methodical argument, I think it's more likely that your perception of the market is skewed by "generic CS undergrads from Stanford" you rub shoulders with than it is that the widely cited averages of the entire market are skewed by a sudden youthfulness of the workforce.
However, as a Ph.D. holder in quantum optics and semiconductor manufacturing, I would be happy to introduce you to a dozen physicists and EEs who are unemployed or who work for half my salary. There is no apparent shortage of physicists. My impression is that the biologists have it even worse.
The problem in this conversation is the notion that (e.g.) "web and mobile software development" is a subspecies of STEM. This premise gets sillier by the year, as more and more babies grow up teething on their parents old iPhones. Many of the best developers I know have no training in science or engineering: They're musicians or historians or artists, or they have no formal schooling beyond high school. Web development is as much about project management, self-direction, self-education, patience, consistency, pattern recognition, memory, design sense, decisiveness, experience, practice, persistence in the absence of immediate positive feedback, equanimity when faced with a thousand distractions, and – above all – communication as it is about scientific or mathematical knowledge.
And, while the combination of skills that make a great developer is evidently rare – or so the market conditions seem to say – it doesn't serve anyone to pretend that this represents a shortage of physicists or biologists or even of computer scientists.  It's a shortage of developers, and a particular subspecies of developer at that.
 Well, anyone who doesn't run a school for STEM, anyway.
It also seems unlikely that the decreasing averages don't affect the wages of older tech workers. They compete with the young, cheap tech workers after all - why should companies continue to pay high salaries to old tech workers if they could replace them with cheap young tech workers?
Because young workers are not a substitute for old workers.
You could argue that four fresh graduates are a substitute for a single good senior dev, but in many cases even that is not true. Thus, old guys continue to find good jobs for good money.
This worry is as old as software. The cheap hordes will replace you. It used to be cheap hordes from overseas, and now it's cheap hordes fresh out of school. They're on there way. But somehow they never seem to arrive.
I wonder if that's because the demand keeps increasing. Software is eating the world. Sure, supply is increasing from overseas, and young people, but demand is growing more.
Everyone sees their wages increase substantially, as they gain experience. This does not mean that wages are increasing.
Inflationary effects should be taken into account - wages should at least increase with inflation. Everyone seems satisfied to receive a 5% pay increase, even if that is a freeze in real terms.
If wages were indeed frozen since the 70s, your actual countable people may not notice due to the above two effects. I gather that you understood that, but I thought it worth making clear.
Your argument boils down to the idea that wage figures are biased by the fact there are more new entrants into STEM careers than there were in the past. Do you have evidence for that? I suggest (based on the graduate figures) this may not be the case.
On your point about Mexicans creating low paid work:
I would assume that immigrants are now doing jobs that Americans used to do - so it's not that they have created additional low paid work that biases the statistics, it's just that they have taken over a portion of the low paid work.
So, I think this should not be taken into account in the stats.
However, the data does show that when you restrict the data to Americans with American parents, incomes have risen for everyone outside the top quintile.
It might be just pretty argument which is very useful for politicians and labor unions (or the like).
Actually the opposite can be argued. If those workers get a lot less, the team's cost as a whole drops, making room for paying you raise. Except for external factors like management just taking the cost savings and put them somewhere else. But then again, these savings could have been taken out of your paycheck ...
Averaging same-age, same-years-of-experience, inflation-adjusted developer salaries across years would make better sense.
Neither represent the overall technology picture. Wages have stagnated, so "Boo, got to take a pay cut" won't happen, but you may not get a raise for 1-2-3 years which in effect is a pay cut.
The CS grads that I've interviewed fall into three groups:
1) They were good at Math, spent 4 years avoiding anything involving computers, and whose career goal is to find a cushy middle-management job.
2) Arrogant CV-fillers who think that their HTML/JS 'skillz' make them them God's gift to the world. Who then end up working for Big Consultancy Firm working on Sharepoint (because the money is good).
3) The rare gem, who love computers, love coding, and get usually get snapped up instantly by Google/Microsoft.
As someone who doesn't have a degree, I find the level of CS graduates from (top!) universities disheartening. I've seen people who couldn't implement a simple sorting algorithm in pseudo-code (or even explain how they'd do it!).
Things I can do with my eyes closed; you know, because I have actually read my algorithms book cover-to-cover.
The cause is clear: developers can earn very good money at the moment. It's a good career move. So it's attracting the lazy chancers who just see the $$$$$.
What ever happened to pursing a career doing something because you, you know, love doing it?
What I mean is that those are the parts of a CS background that have actually been useful in my everyday coding life, and that I would expect from candidates I interview. To be opposed to knowledge/implementation of different types of sorts, which is also a part of a CS background, but has low practical use in my everyday coding.
Someone fresh out of school would have no idea how to discern that from anything else in the wide, wide world of CS unless they have experience working in the industry (from, say, a summer internship or co-op terms).
Hell, mastery of basic DVCS operations (say, git pull, git commit, git merge, although equivalent experience with hg, perforce, or TFS would be reasonable) isn't a guarantee, even if students spent four months in a lab "using" such a tool.
The people who "do best" in university get told by their professors to become graduate students. Most are not optimized to teach the skills you seek -- if you picked a random fresh graduate and they happened to have those skills, it's probable that either they taught themselves or they learned them at another employer.
I just like doing cool things, honestly. And I know a few people that are just like me.
Heck, I passed a harder version of the test (including the theory, I'm a senior/lead/old-fart so I was expected to implement everything on top of the discussions) and I left formal education at 17 :)
They don't have to implement a working version, just give a good outline and be able to answer questions about it :)
For experienced people we go further, and do ask for some coding.
You've got 5 years experience in SQL? Then solve this simple problem which requires using JOINs and aggregates.
Java expert with a focus on patterns? Then you should be able to implement one of: Singleton/Factory/Command.
We get more people who have 10 years of experience with C# are are self proclaimed experts, but who don't know the difference between the heap and the stack then we do CS students applying for the wrong job.. but that's for a different thread :)
A developer who writes an implementation of the quicksort algorithm as part of their job should usually be removed from their post for incompetence.
The interview process should be a two-way procedure which also allows the candidate to understand what is expected of them in a role (and make their decision about the job accordingly). If regurgitating quicksort is expected, then this is a fair test: otherwise, this is not how you should be presenting the job.
But I love discussions too, and if it's something I'm comfortable with, I could keep talking about the topic for as long as the interviewer wants.
In my case I got an internship where they gave me a 24 hour project to demonstrate my skills. I found that way less stressful than any interview I've ever had. And after the internship the company was so happy that they offered me a full time job!
Unless that knowledge is something vital and general. I.e. like not knowing what HTML is.
In the future I want to use internships to find younger engineers - it lets you get to know people a bit, and keeps new ideas flowing through the company.
Thankfully I got an internship that let me do a small project to demo my skills, instead of hazing me. And after my internship they were so happy that they offered me a full time job.
It is stress. Introverts like myself I imagine collectively are horrible under intense pressure from random strangers who can dictate your future for months or years.
That being said, other, more practical questions may exist that retain the signaling characteristic.
4) Actual computer scientist. If you ask him how to write mergesort, he will ask for a book to look it up in, same as if Einstein was asked for the value of pi. If you ask him to describe his favorite algorithm or the details of his current research, he will gladly tell you in extensive detail.
The problem with hiring those of us in category (4) is that it's hard to tell if we're bullshitting you, since after all we operate at a far more advanced and specialized level of expertise than most software development jobs actually use or require.
I wouldn't expect an interviewee to know sorting algorithm X because they may just have forgotten. But why wouldn't they be able to come up with a sorting algorithm, and have some feel for the behavior? Seriously, selection sort is about as easy to come up with as fizzbuzz. If they can't think through a simple problem and come up with a solution, is it wrong to question their problem-solving skills?
Likewise, teachers lead to the student often becoming more productive and wealthy by knowledge transfer.
There is value in almost anything you do. We just have a social organization where some things are overvalued and others are undervalued.
No wonder you can't hire anyone if you want rocket scientists to build your world-changing photo sharing app.
1) There is a business preference to find the best candidate for the lowest rate (practical sense) which leads towards hiring the youngest/cheapest resource available who meets the criteria.
2) Existing companies refuse to invest in building up / educating employees. In the old days you hired based on merit and potential, but you also provided training to make sure employees adapted with technology. These days, there is no training and employees are expected to adapt on their own (there are certainly arguments for keeping on top of things, but if you have a full time job and other obligations, external interests might not be technical/career related)
Unfortunately, because of (1) and no requirement for companies to commit to (2), there is a push to allow for more non-domestic workers through programs like H1-B and related visas.
Personally, I think most engineers should hone their skills and continue to learn and evolve. That said, some situations don't allow that and when coupled with a refusal of companies refusing to hire/train based off potential, we end up in the mythical "STEM crisis".
I'm not talking the founder visa issue here, I am talking the normal boots on the ground. For which, no longer training and wanting the cheapest option have created a toxic environment for a certain segment of the tech community.
1) Requiring more experience than necessary or even plausible on certain technologies. 5 years of experience in X. When X is 2 years old.
2) Focusing too much in a specific technology stack. We use X, Y and Z. You lack Z? Bye. Or we use Z 1.2, you've only used 0.9? Bye.
3) The 3 day interview, the brain-teaser interview, the work-for-free interview, the you-only-got-1% psychometric test interview.
Regarding your point #2, Mexico recently implemented tax incentives for companies hiring first-time employees. That's something other countries should consider.
Again, my argument is based off the norm that companies invest much less in their employee development than they used to - the onus is strictly on the employee these days. Which is the other extreme.
Free trade (and movement of labour and capital) is better for our economy, and better for the rest of the world. The people on the other side of the fence are human, too!
Some work can be easily moved around the world. Some can't. For instance, workers on your local railway can for up wages because the railway can't move, and local people need it. Software can be written anywhere, so if US wages are high, it will be written elsewhere.
And you do see this. US wages, and Japanese wages, are higher than in Europe for developers. Here in the UK, a lot of engineering is essentially R&D outsourced from the US to a place with cheaper STEM workers.
At the same time, I feel wages can be at current levels because developers don't realize how much they are worth. A big part of this is because it's hard to link revenues, even at a software company, to an individual developers achievement. If profit is a pie(chart) carved up between different workers and the share holders, then the worker who has best visibility how the money gets there, and how they contributed, will do best. Hence sales/marketing, management, and finance, all tend to do better, because they get to see the budget.
So for instance, in Basingstoke, an area where land is cheap just outside London, Sony, Huawei, and ST Ericcson (semiconductor major), all do high grade R&D work. Friends that work for those companies tell me that the work is run from a head office in America, Japan, or China, but done in the UK because of good IP laws, and lower cost workers than in Japan or America.
Similarly, AMD have a huge R&D presence in India, and a lot of foreign talent is willing to relocate there because although wages are lower than in the US, they can enjoy a very high standard of living.
I think the outsourcing you are talking about (small, non IT business buys a custom warehouse management system, programmed as s service), has little resemblance to the actual movement of jobs within large companies that I discuss.
This (movement for whatever reason) has happened to whole industries. The UK used to be a center for semiconductor manufacture, but lost that status for 2 reasons. One was a series of catastrophic strategic decisions at UK semiconductor companies. But the other was that the UK government stopped giving tax breaks to the same extent, and were outbid by Singapore, which was willing to provide tax breaks, infrastructure, and an easy ride through city planning.
The reason semiconductors moved was that the industry involve huge capital investments, and would make them where the deal was best (otherwise they would be outcompeted by a company that got a better deal).
In software, the primary cost is definitely wages, so I'd presume large companies will be very sensitive to wage prices, and go the place the trade off is best.
The positions with higher pay should be open to the candidates with better skills, wherever they happened to be born.
There are quite a lot of assumptions in this statement. You assume an efficient market (something that does not and probably cannot exist at scale, if at all). You assume information equality, which is the exact opposite of actual practice, you assume the people who make the hiring decisions have some means of separating the average from the above or below average. In practice development skill is a completely separate and unrelated skill to marketing (of one's self). Ability derives from the former, salary from the latter.
So no, unrestricted labour movement most definitely does not mean you get paid average if you are average (not that I care about this anyway: I think all developer pay should go up across the board). What it will mean is employer perception will be that they should be able to get even better talent at even lower prices. And since employers can wait literally years to fill positions and people can rarely go more than a month without a job, this will certainly drive salaries down even further.
Of course, one could imagine that eventually everything would become more efficient and companies should recognise that better developers cost more. But how many companies actually care about having better developers? For the majority of IT jobs, the hiring company doesn't care about developer quality, they care about costs. If development takes longer, so what. Everyone else in their market will be working under the same constraints so it doesn't matter.
Software development appears to be the one the most exposed to cheap competition.
The issue is, those people "on the other side of the fence" can have dramatically lower costs of living. A completely free labour market for software development would mean that nearly all software developers would have to live in some extreme low cost location just to survive.
And who does this benefit exactly? Not the software developers, the majority of them would take a massive reduction in salary or complete loss of one. Not consumers because that's us. Those who just got a massive pay cut or lost their job. Nope, just executives who are already making far over their share.
In other words, globalisation of the labour force helps those who need the least help.
They are doing that and in effect we are all getting a better more efficient society. Plus the best minds aren't working on world peace because people vote for people with the best hair to do that job.
If this is true, we should all be mortally terrified and running around like headless chickens, screaming to the heavens to save us.
Ie get the most interesting market messages to the right people, while not bothering the rest.
Not that I do anything related to advertising, but when done intelligently it can actually be a pretty important.
The facts that ads are paid per click and not per impression creates more ad impressions, not more efficient ones.
Sometimes the illusion wavers for a moment, when the product part fails to happen (e.g. Color) but everything else still does.
The huge disparity of pay between different STEM disciplines should clearly show where the demand is. Biologists compete over shrinking government grants, while petroleum engineering students receive job offers of $90K starting. Treating STEM as a homogenous bloc will hurt the less in-demand fields while failing to treat the shortfall in others.
When I took mechanics/fluids/electronics/materials classes, I discovered that the math was all the same, except that the EEs liked to use 'j' instead of 'i'.
> ... except that the EEs liked to use 'j' instead of 'i'.
And that only because of the coincidence that 'i' refers to current in electrical equations.
It also addresses the issue that, with respect to getting useful results from a computer, one's mathematical knowledge and ability is now more important than one's knowledge of a computer's inner workings.
Too much of education is aimed and evaluated for data storage rather than brain training.
Yes, or Japan, where being different or standing out in any way is seen as the height of rudeness. Sumimasen, arigatōgozaimashita
I guess we have to face the fact that the ability to think for oneself, and think critically, is rather unpopular, with rare exception.
No where in the article is "STEM" defined precisely, but the author clearly notes that is NSF number includes health-care workers, psychologists and social scientists. Even if we replaced "STEM" with "Engineering" in the entire article, it's still a fallacy to say "there are 0.3 million engineering jobs, and 11.7 million engineering graduates -- there can't possibly a shortage of engineers." I wouldn't automatically assume that someone with an undergraduate degree in Chemical Engineering or Civil Engineering is qualified to work at <insert software company here>, in the same way that I would be completely unqualified to be hired run an oil field or draft up a plan for my city's mass transit system. Sometimes people do have extra skills atop their degree that lands them in a job outside of their field, but that's not true for everyone.
If anything, I think the whole "STEM shortage" sounds like a plea to US post-secondary institutions to make their CS/EE/CE/SE graduating classes bigger -- perhaps at the expense of other STEM programs.
Edit:  I'm assuming a software company small enough that it's not doing city planning on its own. I wouldn't be surprised if there actually were Civil Engineers working at the likes of Microsoft and Google, trying to figure out the master plan for their main campuses, but that's not my point.
I wonder if buying up a bunch of houses in Detroit, and offering one as a starting bonus (along with gigabit Internet and a nearby Wal-Mart) would be enough to entice people to work for less.
The STEM shortage is nothing more than employers looking for cheaper workers (either salary-wise, or without any obligation to train them the necessary skills).
After all, working as a Mech Eng even at minimum wage should for him be preferable to flipping burgers at minimum wage or being unemployed, especially with a family...
Also there is lots of room between an "adequate" engineering salary and minimum or no wage...
Figuring out how to get underachieving academics into paying or even wellpaying jobs should be a higher priority in politics.
I did say that "pay for work is (within reason) preferred over pay for no work", all else being equal.
The term is "contrafreeloading", and is for example explained in Dan Ariely's coursera course: https://class.coursera.org/behavioralecon-001/lecture/57
By the way, "this person" in the lecture happens to be one of the preeminent researchers in behavioral economy...
So please try to refer me to a study that I can apply in a general office environment with people aged 30 and a real-world job so we can check the claim.
I hire developers anywhere in the world to work on cutting edge infrastructure software and it's still tough. But not as tough as restricting us to the Bay would be.
Startups are a different story as time to market is crucial and you have almost no slack.
In other industries , new startups seem to usually come from people with experience who have been round the block who have some idea of what is required to ramp up a company in the sector.
In technology it seems that if you haven't founded a company in your 20s then you have "missed the boat".
So, assume a $30K salary differential, times 115K jobs = $3.45 Billion dollars in savings.
Well, that will pay for some lobbyists...
That's wildly optimistic. The reality is unemployment rate for indian engineering graduates now ranges from an optimistic 50% upto 80%..
In fact, many people choose bogus courses like "hat science" just to get study allowance and access to the other benefits. So it's not surprising people pick CS thinking "it's good money so why not".
On the flip side, spending four years learning about computability theory instead of the latest frameworks in foo language likewise doesn't prepare a CS major for employability. Their first employer will have to spend lots of time and money training them in the vocational skills they'll need.
Universities' attempts at recognizing this and educating students for this reality give us majors like Software Engineering and Information Systems which don't exactly match what the market needs either.
What's needed is to take a relatively smart, but ignorant person off of the street, and in 4 years spit out a mid-level developer, with specialties in web development, server development, etc. Their coursework should be nothing but learning languages, APIs, development environments and frameworks and how to coherently document their work.
For those specializing in web development, their senior project should be to build, from scratch, an entire e-commerce site, with product catalogs, promo codes, wishlists, shopping carts etc, including setting up all the servers, and gluing them together. The entire thing should be meticulously documented and launchable tomorrow.
Similar senior projects should go to those specializing in game development (like the senior projects out of digipen), desktop software development (make a basic office suite), server software development (write a database and web server from scratch with full APIs), etc.
In very specific markets this has already happened. Video Game development, for example has spawned vocation focused education like digipen.
CS is both over and underkill for most jobs. And the result is that we interview for CS skills, for a job that doesn't really need them.
I'm not a developer. Last year, I was learning programming. I also had a track record of starting and successfully executing projects. Small personal ones, but they made money.
I tutored a student for the LSAT, and he thought I was smart. When he heard I was learning programming, he introduced me to his sister's boyfriend, who was a manager at a local hardware/software firm.
The guy met with me, was interested in turning me into a developer and offered me a decent salary to do so.
He said he couldn't hire enough competent developers.
I ended up pursuing another opportunity (large commute at this job + I wanted to build my own stuff), but this impressed on me the high value currently given to STEM expertise. I didn't have any! Just an interest was enough.
Edit: I has learned the basics of programming, having gone though most of K & R, and a couple of Udacity courses. But I has no programming skills that were worth paying for at that particular moment. Nothing tht could immediately make anyone money.
Maybe, just maybe a couple of passionate employees could be quickly trained? What a radical idea....
to sift through the many persons with degrees (or even without degrees) to find the smaller number of persons who can actually do the job. Key idea: use a work-sample test to hire for any job.
This seems to be the sort of problem that markets are pretty good at dealing with. I wouldn't worry about it.
I don't listen to it any more. When I walked out with my doctorate, jobs were very scarce in the science/engineering fields (although software jobs were increasing).
From what I can gather, the soothsayers simply do a linear extrapolation of current jobs and candidates, and show a shortage. They do no real forecasting by trying to reason about future needs.
So, I don't pay attention any more.
 Disclosure: I am a STEM educator, and I am a little bit worried that this effort might even flood the market for STEM grads lowering wages.