An inconvenient fact and a suggestion:
One thing the author fails to mention is that if an H-1B applicant loses the lottery, his fees are fully refunded.Because of this, many companies file extra petitions to improve the chances of getting the number they want. The total number of filings relates more to how many companies are trying to game the system than it does to actual need.
First, we need to make sure there is a cost to apply for an H-1B visa, even of the lottery is lost. I think keeping half of the filing fee would go a long way toward getting rid of those trying to game the system.
Next, we need to change the lottery to a sealed-bid auction based on pay.
After the initial 5 day acceptance period, grant visas only to the companies paying the highest wages. That way, American companies who really need H-1Bs will be able to get them by offering high wages, while the low-ballers and body shops will be out of luck.
In the next year, raise the low end minimum bid to the second quintile of acceptable bids, and keep raising it each year until the minimum matches or exceeds the median pay for American workers.
After a few years, the current limit on H-1Bs, will be more than enough to fill the need, and we can lower the limit.
The change would be gradual enough for the companies who do not really need foreign talent to ween themselves off the program and back on to American workers.