This article by Jon Evans is a good read but I think it neglects two fundamental things. Thing One is the reason why outsourcing will never replace American programmers. Thing Two is that Programmers are still massively underpaid, even with base salaries of ~$125k. Putting aside Dr. Seuss for a moment, I’m talking about Productivity and Communication.
Productivity first. If Spacely Sprockets hires a programmer who can make their inventory system more efficient, the effect is immediate. Profits go up and/or the price of Sprockets goes down. Either way, Coswell’s Cogs is in trouble. Not only do (good) programmers save money in perpetuity by automating tasks, they also provide a competitive advantage that other companies MUST keep up with. This will keep salaries going up.
Communication as it relates to outsourcing is more than just speaking the same language. The most important part of programming is understanding the problem you are trying to solve. Yes, you can give a programmer a strict list of required features and specs, but I have a hard time thinking of a single project where I didn’t realize something while coding (or preparing to code) that had been overlooked. Efficient, maintainable code is required, but so is seeing the big picture of how what you are building is supposed to work and work with the business. That is very hard to outsource.