I listened to an economist on NPR that India has a highly protectionist trade policy and economy, and that doing business in India is quite difficult for several reasons: Corruption, cronyism, law, and local favoritism. The economist suggested that their policy does significant harm to the country. (Read the end of this article in the Economist magazine which says something similar.)

Thus many technology companies look to outsource development now in China, although there is a significant language barrier. (Indians mostly know English.)

Conversely, technology companies hire from India (and Eastern Europe and other places) "qualified" workers who they are unable to source locally. In reality, I'm sure this is the case part of the time, but by and large there must be some sort of economic advantage for sourcing foreign workers. The popular superstition is foreigner workers get paid less, are coerced to work harder, and are unable to easily change jobs. The counter theory is foreign workers work harder or know more for the same amount of pay, so it's the fault of lazy Americans.

To get workers here, there's a bit of gaming that goes on, as this video shows:

Microsoft is asking for more H1B visas from the government while simultaneously laying of 5,000 employees. See this Slashdot article.

My suggestion is this: The U.S. should dismantle the H1B program. Instead, create a liberal workers program which allows foreign skilled workers to stay indefinitely, even if fired. (By skilled, I would say some sort of industry-standard exam would be given.) Have a lottery system which allows a certain number of qualified workers in different fields to receive green cards, based on demand and other factors.