Before the MBA scourge hit the land, managers tended to hire the first B or C players that seemed to have the right aptitude and attitude. They would fire fast too, when they made mistakes. In the end they got long term productive employees and, I MUST point out, they did successfully build the modern world that we marvel at around us.
1. Finding good mentors is hard, because companies (even large ones as opposed to startups) have cut back and folded several positions into one, all while wages are flat. That means nobody has time to mentor. Everybody's working insane hours at their primary responsibilities. Only the most well-funded startups do mentoring well. Most startups are "all hands on deck" with developers doing a lot of other functions essential to business that wouldn't normally be part of their job description. But these functions are "tyranny of the urgent" life support and there's no time for training.
2. Everybody on both sides of the table knows that the only real way to get a raise or change direction is to leave and get a new job. That's good for the employee who wants to be mobile and transferable, and good for the company that needs warm bodies and is growing, but it's terrible for training/mentoring and the people who want to think long-term.
The problem then becomes that there isn't enough skilled talent. If companies aren't going to train developers, then who is? Computer science isn't software development. Someone or something other than a company has to fill the training vacuum, and that's why coding bootcamps are getting popular—even though a lot of people don't trust them yet since they are in their infancy and are a new paradigm.