At University of Massachusetts, you can't get into the CS degree program straight off--you have to take the first 2-3 intro courses, prove you're a) dedicated to CS and b) able to do the work, then they let you in. So if you spend your first year taking gen-eds and getting good grades in your CS classes, you're fine. I think it's a good system.
While it might not be feasible for every college to do this, my college actively tries to get more students to take CS: you don't choose your concentration until your sophomore year (and you're allowed to take any concentration, regardless of what you declared going in/how many others are in it), and departments' survival depends partly on students taking their courses, so they have an incentive to try and recruit concentrators.
EDIT: Also, universities need to learn how to scale their courses. For CS courses, it shouldn't matter whether 10 or 100 students are in a course: you should have enough undergraduate TAs who want to work on course development, grading and hours to scale your classes up with not-too-much friction. That's how one of our intro CS courses went from having 80 students to 180 the next year, and maintained the same attrition rate. Students learn best through each other: the professor should help figure out what the course should be, then get out of the way.
My college was like this as well. I think the basic idea is that you will sink or swim. If you can't make it in the program then that's your problem. I don't really see the point in limiting who can take part in the program. They get my money and I get to try, whether I succeed or not is totally up to me.
It's like that at the University of Washington as well, except the admittance rate for CS/CSE is about 15% right now and it's only getting lower. The average GPA of an admit is 3.76 which is ridiculously high. It's a good system as long as the department has the funding to keep up with the applicants.