In Germany, we have apprenticeships, universities and something between called "Duales Studium". The students spend half of their time in university, learning, writing exams and the other half in companies, working in projects, adopting their theory from university and learning from colleagues. They get a salary and the companies are also paying the university fee.
In our company, every student has her/his own coach. A coach is taking responsibility for his student. I'm coaching a student for three years now, it's great to see him growing up (not literally, of course), teaching him not only technical but also social skills (usually, it's their first job after school and sometimes this new situation can be difficult), supporting and planning his period of training. He will pass his final exam in six months and then stay in our company, hopefully.
Here in the United States I am convinced that one of the key causes of a lack of diversity in tech fields is a lack of good apprenticeships to go along with the struggling education systems in the inner cities. I'll use Cleveland Ohio as an example...The schools in Ohio are funded by property taxes; the higher the value of your house, the more taxes you pay. Property values in the suburbs outside of the city are higher and generally growing, so the schools are well funded. Meanwhile, many of the houses in the city are rentals and/or have lower values, with the value of property falling. How we got there is an entire other topic for a later day, but it suffices to say that the schools in the city struggle to graduate kids from high school; there is no extra money for tech programs.
@Monique vdB, the Genesys Works program is fantastic! Internships and apprenticeship programs to go along with the high school and university education are, I feel, imperative to creating diversity in tech.
Generally speaking, there is a big difference in the quality of work between a union electrician and a non-union electrician because of the union's apprenticeship program. Now, I don't think the unionization of tech is the answer, but I do believe that without an influx of diverse tech workers from the current generation of high school kids the tech industries in the US will see more and more off-shoring (and "in-shoring" of H-1B contractors) as labor in countries like India and China becomes more skilled and the labor pool in the larger US population centers becomes less skilled.