So I would argue that it's a problem with an asymmetrical job marketplace and poor long term decision making on the part of employers.
So I would argue that it's a problem with an asymmetrical job marketplace and poor long term decision making on the part of employers.
Besides, all you need is some books and open source software and you can train yourself, at least to the level that you're hirable. OK, some things you have to learn from experience in ways that are hard to accomplish outside of working for a big company (large scale distributed systems) but most of the companies that have large scale distributed systems are willing to hire straight out of college and, effectively, train them!
So, the rational thing to do is to let the "ok" developers develop their own skills and then hire the ones that end up being good. But then, I don't think the standard is unreasonably high in the first place.
There are too many tech fads and trends for a developer to self-train on everything a potential employer could possibly want before knowing exactly what that is.
In my opinion, tech employers should stop being so specific with their requirements and simply allocate some time for the new people to adjust to their in-house way of doing things. As many of us know well, every development team has its own slightly different way of doing things, which has to be learned in order to work more effectively. Nobody "hits the ground running", because the tech skills are hardly ever the limiting factor in hitting full productivity.
And I assure you that any company that wants to hire people to "hit the ground running" will forget to mention their new hires will be doing that running as a steeplechase over mismanagement hurdles.
Training doesn't improve the quality of a candidate. It assures the candidates you can find at the price level you have chosen are familiar with the specific technologies and processes that your company uses.
I worked for too long with Lua, and noone hires a Lua coder, so I am screwed :(
The mix is very heavily influenced by geographical locale. Around me, the market is mostly the large-but-not-huge companies that hire a lot of software developers but never promote them. So there's my bias. Google, Amazon, Microsoft, et al. do not have a presence here, so they cannot improve the behavior of other companies with their competitive pressure.
In the 1990s (and probably earlier), a lot of for-profit educational institutions, in collaboration with a number of large tech companies, produced a lot of "certifications" which tried to fill this gap. It failed pretty miserably for everyone but the for-profit educational institutions.
What's left? Most of the employers want to hire at a lower pay level than most of the qualified applicants are willing to take, especially since regular pay increases have dried up in many markets.
I've been on both sides of this coin, though. I know it's difficult to hire people even if you have plenty of good applicants, because, even when you're willing to train people on the specifics of the position you're hiring them to fill, truly qualified applicants may not work out after 6 months.
In a perfect world (sometimes called "once upon a time"), companies take all of this into account and consider it a part of doing business. In the modern world, companies have found that they can get more work out of their existing employees and out of new-hires by behaving as if all training can be done on-the-job. You might give the new-hires a little less work to compensate for the extra load of learning the job, but the rest of the team has to make sure the job is still getting done AND train the new-hire.
I've also seen C++ shops that quiz you on C++ trivia. Either they were doing a poor job or they were very small and worked only in C++ so it was reasonable for them to ask questions that you'd know the answer to if you just read a book before the interview.
There are things that can help teach OK developers to become good developers though.