Having a University degree is not a panacea. You don't walk in a fresh faced teen and walk out three years later as a magic programming guru, faultless to a tee and dispensing wisdom with every sentence.
That's not to say they aren't a good idea. They do (generally) challenge you to think for yourself. It does expose you to formal methods and other techniques that you might otherwise not encounter. Even if you never actually use all the things you learn, the
experience you do gain can alter your perspective and allow you to take a wider view in future.
The average fresh-faced graduate, to be blunt, is probably a mediocre coder at best, because CS is about much more then coding. Only real-world experience can teach you the difference between the ivory tower of academic theory and the harsh reality of getting
things done. That doesn't make the theory useless, neither does it prevent a self-taught individual from rising to an equal standing.
Ultimately passion for the subject, a desire to learn, and the pride in your work that makes you constantly strive to improve is what singles out the really good individuals.
Of course, I'm biased. I have a degree and work for a Uni. My code is sloppy and poorly commented. But it mostly works.