This question was posed by Jeff Atwood.
Easy answer. Because they can find jobs.
I have interviewed loads of people who were missing even the most basic skills. And these were not all junior programs, this happened even at the senior level positions. They are easy to weed out in a technical interview, but not every company gives one. I think companies are learning not to hire people based solely on manager opinions. And the land rush to get any programmer at all is over.
I remember doing an interview once with a recruiter, the HR guy and an owner. When I talked to the owner and asked when I would get to meet some of the team and take the technical interview he told me they don’t do that. He said he was a great judge of people and could pick out the smartest developers just by talking to them, even though he had no technical skills. I passed on the offer. I did have a chance to work with some of his people on a project a couple of years later, and surprise, they sucked. They were all talk and no talent. The bad programmers with good people skills gravitate toward these positions.
A more recent example is a large company that is hiring A LOT of people in the area. They will basically take any contractor that applies because they are desperate to meet a quota. These contractors don’t do much work, but that’s not the point. The point is to fill seats. All politics. These bad programmers even with zero people skills will eventually find a place like this, and assuming they have no ambition and are happy just to have a job, they will do fine.
My advice, if you interview for a company and they don’t do as much work to screen you as you would to screen someone else, think very hard about taking that offer. You could be working with a lot of bad code and some pretty questionable people. Unless of course you suck, then sign up, you’re home.