I don't quite agree with your ranting against CS. For starters, I don't really see you mentioning the fact that CS typically has different tracks.
At my university we had two main tracks, applied computer science and theoretical computer science, with the first being further sub-dived in "computer systems" and "software engineering" and the theoretical track being sub-dived in "algorithmic" and "foundational computer science".
In the bachelor part of the education (3 years), you get a mix of subjects from all tracks. The computer systems track will give you courses like computer architecture ,which allows you to read this particular nice book: http://www.amazon.com/Computer-Architecture-Quantitative-Approach-4th/dp/0123704901 and where you write your own CPU emulator. It will also give you the subject operating systems, which gives you time to read this book http://www.amazon.co.uk/Operating-System-Concepts-Abraham-Silberschatz/dp/0470233990/ref=sr_1_1?ie=UTF8&s=books&qid=1278151357&sr=8-1 or this one http://www.amazon.co.uk/Modern-Operating-Systems-International-Version/dp/0138134596/ref=sr_1_3?ie=UTF8&s=books&qid=1278151357&sr=8-3 and typically gives you assignments where you write some kernel module like an IO scheduler or memory manager.
The software engineering track will give you subjects about requirements engineering, software engineering (obviously) and teach you diverse stuff like UML diagrams, development cycles, design patterns, etc.
The algorithms track on its turn invited me to look at a diverse range of algorithms (obviously again), but also to datastructures (how does something like a hashmap works internally, what kinds of trees do we have, what variations on linked lists are there, etc).
The foundational track then let me look at stuff like turing machines, grammars, finite state machines, theory of computation etc. This is the stuff few 'programmers' would study by themselves if not told they should.
Finally, knowledge of several tracks was combined for the subject compiler construction, where you had to write in C a Pascal to MIPS compiler. For this course you needed to have (C) programming skills, enough skills to understand a language you might not know yet (Pascal), understand how a machine works at the low level (registers, assembly, etc) and have some idea about context free grammars.
Now all of this is in the bachelor, meaning all the subjects are basically introductions to their respective fields. You're not a scientist yet if you have completed them. In the Master phase, you choose a specific track to specialize in but you can still take subjects from the other tracks if you want. In my case I choose the computer systems track and learned some additional stuff about grids, parallel computing, software architecture, etc. Now the thing is, you can't really say that CS educates you to become a scientist or not or that CS skills have no practical value if you don't take into consideration the track chosen by the student. Obviously an applied computer science track has more practical value for the average company than the theoretical track, but it depends on what you want to do really.
Most of all I don't agree with your point that CS somehow tried to cram knowledge in the heads of dumb students. Far from it... the way I experienced CS was a period of my life where I was simply allotted time and opportunity to directly dedicate on bettering myself. Classes weren't there to teach me stuff, but to *support* me in learning. Basically what the CS program does is compiling a list of books for you to choose from and a set of assignments to challenge you, and the rest really is up to you. If you don't give it your best, you don't progress much if at all. People who don't realize this will drop out or will be sent away. That last thing is maybe a little controversial, but it does uphold a certain level of quality.
Next to that, CS gives you a base level of knowledge, but at least at my University we were also clearly invited to study and practice other materials outside of the curriculum. If your goal is to become the ultimate über programmer (which is indeed not very scientific), participate in open source projects, take summer jobs that let you do some practical programming. Likewise, there are similar opportunities for those wishing to pursue a scientific career, like participating as assistants in ongoing research.
Currently I'm the lead developer of a team of 9. We're building sophisticated enterprise software where we're dealing with some 500k LOC, a rich portal where customers can subscribe, log-in, see their data, etc and a highly clustered back-end capable of doing thousands of transactions per second. This product makes me responsible for the software architecture, the right design patterns being used at the right places, performance at very low levels of the system, setting up the development process for our team, working with complex and sometimes conflicting requirements, etc etc.
A lot of stuff that I studied during university applies to my job... daily!
No, I don't write my own HashMap implementation each day, but when one day some particular HashMap was misbehaving I found the problems in *minutes* since I understand how these things work. The guy originally tasked with solving this particular issue was staring at the problem for the whole day already and could only slam his fist repeatedly on the table crying: "It's broken I tell ya, it's broken!", but he simply didn't understand the (utterly simply) theory behind it.
I also don't construct new foundational CS concepts, but I do apply the stuff I learn practically. A while back some other guy was wrestling with a huge number of if/else statements and many variables involved. After studying his code for a while, I proposed him to use a finite state machine, since it seemed to apply perfectly and would reduce the clutter and complexity of his code immensely. However, he didn't knew what a FSM was. He quickly learned thereafter and did apply it, but because he had never learned about such things in advance he would not have thought of it himself. Googling would also not really helped him here, since he had no idea of what to Google for.
These are just two simple examples, but there have been many, many more of such occasions.
To sum up, CS is absolutely very much worth the effort. Just don't think you can come in dumb, just sit in class every day, come out smart and don't have to learn a thing anymore for the rest of your live. That's not how things work of course. But if you come in reasonably prepared, work hard, and consider the education as a foundation to continue learning, you'll reap the rewards for sure.