Before I start, I'll start by stating that I'm a U. Waterloo alum, though from Computer Engineering, not CS... so what I'm describing in terms of their CS programs might not be entirely accurate... and that I might be a bit biased.
1. Co-op (or internships). University of Waterloo's CS and engineering degrees are all 5 years long, with year-round 4 month terms in which you're either studying or working. You have 8 study terms and 6 work terms in those 5 years, and in the work terms, you're hired in real life companies and work in real life jobs working on real life projects, for companies like Google, Microsoft, Qualcomm, Research in Motion, etc. Not only that, you get paid a decent salary (enough for me to completely cover my tuitions + living costs) and wide network of people to start from when you're finished your degree and a nice thick resume to get balls rolling. The University actually hires a bunch of people to go out and look for jobs, and if you're good, you'll several offers from some of the top names in tech companies. The flip side, though, is that companies will expect real work out of you.
2. Waterloo's CS department is actually under the Faculty of Mathematics, which shows you how seriously they take the mathematical roots of CS. I've been told that they're very mathematically rigorous in their studies, and their success can be seen from the Waterloo's rankings in ACM programming competitions, as well as experts who teach in the field (like the people who invented elliptic curve cryptography, etc)
3. Waterloo has very liberal policies for Professors getting to keep much of their research, patents, and IP on their own instead of assigning it to the University, so a lot of professors are looking to get started on their research and spinning out. You'll see a streak of entrepreneurship from both the students and the faculty there.
4. At least in the computer engineering curriculum, they never teach you any computer languages. The first introductory class I took was in C++, but basics of C++ was covered by a TA in help session. The data structures and algorithms class is in Java, but the language itself was covered by another TA in a single help session while the professor focused on the actual data structures and algorithms, not how to write and compile java code. Through your 5 years, concepts are taught, but not the specifics... or that's at least how I felt. After the 5 degrees, I think I got most of the basic concepts to the point where I understand how computers actually work at a fundamental level, and I know how to get through the "abstraction" layers that so many people seem to have issues with. If you understand how a transistor works, it'll give you a better understanding of why writing to a flash device is different from other memories. If you understand how flash devices work, then it'll give you a better understanding of why you need different file systems to support it. If you understand how the file systems work, it'll give you a better understanding of why, for instance, opening a file with a million small files might be slow in some systems... and so on and so forth. I think one of the biggest thing that I got out of the school (besides not having a debt + thick rolodex + all the intangibles like friend network, etc) was 5 years of just learning and thinking about the concepts are all inter-related, so that when something fails, you have the required tools and knowledge to actually dig into it and figure out what's underneath all that abstraction that everyone takes for granted.
I know this is little bit long winded, but I'm of the opinion that the 4 years spent in college will not be a waste... On the flip side, it's my understanding that the college qualities vary wildly in US (I once talked to a Professor who turned down a tenure track position at one US college where they were told they don't have classes on Fridays because of Football Pep Rallys are on Fridays!!!). BUT, if you find a right school, just the people you're going to meet and befriend I think is worth it all by itself. It's really going to be what you make out of it.
Hope this helps.
My understanding is that upper year courses are pretty language agnostic. They just want to make sure that lower year students actually have some programming knowledge in a common language, cause when you don't, your coop opportunities are greatly reduced, as any first term mech/civil eng student will tell you.