Programming is a creative activity that is greatly enhanced by teams of programmers being present together in one place. Team members feed off each other, and perform far better than they could in isolation. Sure, programming CAN be done remotely, but not at the same level.
This is true not only at the individual level, but at the corporate level. There is a reason software companies congregate in Silicon Valley, why oil companies congregate in Houston, and entertainment companies congregate in Hollywood. The talent pools for these industries has been built up over a long period of time, and establishing similar talent pools elsewhere is no easy task.
It works both ways: a software company in Silicon Valley has a much easier time finding good programmers than software companies elsewhere, and programmers in Silicon Valley have a much easier time finding good jobs there, than elsewhere.