Earlier quoted context omitted.
In my opinion, the real fix is to make the H-1B 'lottery' into an auction. Instead of accepting 65,000 H-1Bs at random--accept the 65,000 H-1Bs with the highest wages. That way we are getting the immigrants with the highest valued skills and stopping companies like Cognizant and Infosys that game the immigration system by applying for the cheapest H-1Bs possible.
As someone who went through the process, I can tell you that the mere existence of a maximum annual number was insulting. If I get a job, and my company NEEDS me, and I'm GOOD at what I'm doing, I should get IN; period. There should be no crap involved. How the hell is it good for a company to be told that it can't grow because it happened to petition the 65,001st person out of 65,000 that year? How the hell is it go…
They are trying to protect US citizens from losing their jobs (or getting wages cut) due to a sudden availability of cheap labor. A government is rightfully concerned with making sure its own citizens are gainfully employed. Citizens vote, foreigners don't. Every person within those borders who does not have a job puts a drain on the rest of the country. Someone without a job outside of those borders does not. So bringing someone across those borders while an unemployed person is within them is a net economic negative.
Look at the biggest H-1B recipients: http://www.myvisajobs.com/Reports/2015-H1B-Visa-Sponsor.aspx It's all low quality outsourcing shops like Infosys and Cognizant.
These laws/protections are intended to prevent a race to the bottom. If the public subsidizes the operation of a company through security, education, and infrastructure, the community that makes that investment is entitled to ensure that the fruits of that investment go to other members of the community.