I work for a large company that used to outsource all of it's IT to a large contractor. Almost all of the applications and code I've worked with that was done by the outsourcing company was substandard crap. Obviously over complicated to support large (profitable) estimates.
From my experience working with a lot of tech immigrants, I can say that compared to the native population, they seem about the same in terms of competency. The only issue is the language thing. In tech (especially at large companies), so much of what you do is communicating with others and not having a good command of the English language can make an otherwise capable dev a lot less so.
If I were hiring, I would never consider a person that didn't have a good command of English unless they were really a rock star in something that didn't require much communication.