Because the lead time to go from "has basic math and logic skills" to "competent programmer" is on the order of years, if not over a decade.
Do you want to put someone on your payroll for years before you see one tiny iota of productivity out of them? Or worse, have them be a negative drain on your productivity?
> "but lets be reasonable, ordinary Americans built this country and they're the reason Silicon Valley exists in this country and not someplace else"
This isn't true. The US has been extremely reliant on skilled immigration as its power base throughout the 20th century. Immigrants are over-represented in academia as well as all corners of basic research, they are also over-represented in the industries that spawned Silicon Valley (i.e., the defense and aerospace R&D that gave birth to both the funding, cultural, and educational foundation that birthed the semiconductor industry, followed by the software industry).
> "You could easily teach someone to code by October 2013 if you started now."
Then do it. I challenge you. Starting today, from someone with the proper high school level education but no relevant college education (i.e., no STEM degree), develop someone into a competent programmer capable of writing production-ready code by the end of October 2013.
Put your money where your mouth is.
The problem, as highlighted by your post, is that companies only want to hire the best of the best. I understand why, but it sets us up with a situation where even those who know how to program (poorly) cannot find work, exacerbating the talent shortages.
In actuality, there is a lack of folks who want to pay market price (which is going up) for programming talent even if their corporation is quite profitable. Requesting higher caps is a way to conveniently dodge the market forces at play.
On seconds thoughts it is actually true for every profession. Ever saw a waiter smearing the shit on a table rather than actually wiping it clean? How much time you think one needs to learn how to clean a frigging table?
Hiring a good professional or training any XYZ to become a good professional, is really not something I will bet my business on.
What startup is going to wait over a year for their prospective coder to be able to do his job? This is something the education system should be doing. If it isn't, by all means fix it, but don't make startup CEOs spend over a year training employees.