This is pretty much it. The problem is that the US has the potential workforce, but none of them are trained. Not because of the lack of education available, but the lack of will. They all want to be ‘the business person’, and hire programmers to do the actual work, when in reality, it doesn’t work that way. Even Steve Jobs had to write code, and out of the ‘big five’ (Google, Microsoft, Apple, Facebook & Amazon) the only exception is Jeff Bezos.
Companies are having to expand abroad to get the talent that they need to stay at the top of their game. To stay where they are, they can’t just hire people with computer science degrees. They have to hire the best software engineers and graduates and the US just doesn’t have the numbers of those. Take the UK for example. Amazon are expanding their UK engineering, Google are investing over a billion dollars in creating a new UK engineering campus and Facebook have opened their first international engineering office in London. There are also examples in Canada as mentioned.
I’ve said it before and I’ll say it again. The big companies are going to hire the best candidates regardless if they can bring them to the US. Every time one of these companies puts an employee in an international office instead of a US one it’s a loss for the US economy. The US company is sending their money abroad for an employee to spend their salary on foreign goods and services instead of US ones.