My take, for what it's worth:<p>I was a major nerd through high school. We got a great teacher my Sophomore year who taught us all the basics of algorithms, and gave us enough freedom to pursue our own interests. I taught myself 8086 assembly language, and thereby grasped pointers in a way my classmates couldn't.<p>Fast forward to college. I wasted my time for four years. The most memorable CS things I learned were i, j, and k as iterators (in other words: some accepted formatting which makes reading each others' code easier), SQL (not well, and how hard would it be to pick this up on my own?), and finite automatons.<p>The memorable non-CS things are vastly more numerable. Anthropology, physics, philosophy, and mathematics.<p>Ten years down the road, I've found that most of my career has consisted of a) finding and fixing bugs and b) gluing code together. I have devised precisely <i>one</i> original algorithm (I don't mean simply writing fresh code, but writing an original algorithm). An <i>awareness</i> of computational complexity has been necessary, but a deep understanding of algorithms has not.<p>Here's the kicker: getting a job without a lot of algorithm and puzzle talent proves difficult. Of course, I find this hilarious in the face of my career experience. If I were brilliant at algorithms and puzzle solving, I would have been terribly, terribly bored for virtually <i>all</i> of my career. It's been my experience that interviewers tend to overestimate the complexity of the tasks their team faces each day.<p>So, I would advise a young'un who already has substantial computer talent to pursue education in a different area. You'll meet more interesting people, develop your character, and have the option of a very different career path if you tire of software or vice-versa.<p>Of course, all of this goes out the window if you truly want to be a computer scientist. But it seems to me there are at least ten well-paying "code gluing" jobs for every one research scientist position, so I hardly see this as defining necessity for a career.