A good college comp.sci. program should not be aimed at making you an expert programmer in any specific language. It should be designed to provide you with a breadth of knowledge in all facets of software/system engineering, giving you the tools you need to pursue whatever aspect of the field you want as your career develops over the next 40+ years of your life. That knowledge should then make it relatively easy for you to become an expert in Java, or UML, or database optimization, project management, or whatever else you want to do as your career develops, your interests change, and the business trends and fads change.
Do all schools do this well? Of course not. Do all students do well in a university setting where much of the learning needs to be self-motivated? No again. But if you're 22 years old trying to get a job with any respectable IT company, you've got a much better chance of getting an interview with them if you have the degree.
Yes, there are other ways to gain the knowledge you need, and a well-motivated, hard-working person can learn it on his own, find entry-level jobs, make contacts, etc., and ultimately succeed in this business. Or maybe all you ever want to do is create PHP back ends for small web stores over and over again and don't really need a well rounded comp.sci. education.
All I know from working for 15 years at a Fortune 500 IT company is that at least 95% (probably closer to 99%) of the programmers I worked with there had at least a BS degree, a large number had or were working on their masters, and there were a number of PhDs, too (granted those were mostly in math or physics).
Oh, my degree is in music education. But then, I backed into this whole business by an extremely circuitous route, and I do not consider myself a software engineer: I'm an experienced software tester who is now dabbling in programming and still trying to figure out what I want to be when I grow up. 🙂