Career in Theoretical Computer Science I am currently a high school student, interested in theoretical computer science and applied mathematics. I have self taught myself linear algebra and calculus and concrete mathematics. I have a naive notion that for one to write better algorithms, one must know as much mathematics as one can because you can learn about new structures and then use those structures to form more complex and faster algorithms, now, I am not understanding what to do next. I have still an year to go to college, and in that time, I would like study some mathematics that may help me in my career. What should I start with ? Can someone please provide me with probably a list of topics that I should study now and in future.

Also are things like abstract algebra (it is too formal of a subject) and algebraic topology useful in computer science?
My name is Mike.  I'm a PhD student in the area of TCS.  I am self taught in many areas of Mathematics and Computer Science.  Many people would tell you NOT to do this, but when I was your age I bought a book on Analysis (Formal Version of Calculus) and read it cover to cover.  It took about 9 months to read with a continued supply of effort and motivation, but it helped transform my way of thought and gave me the skills to formally express concepts and create proofs on my own.  It also helped me to finally understand the concept of real numbers.

Here's a problem that you would face if you did this.  One, it's hard and you would likely be reading it on your own.  You can talk about it with your friends and parents, but most of them won't really understand.  Secondly, once you finish it, you will be much better at math, but you don't get any college credit and later on you may have to retake a simpler version of the class and be bored out of your mind.  I was able to avoid this by doing a summer program at a local university and afterwards enrolling there as a part-time student.  It took some confidence, effort, and luck to organize such an education, but it paid off.  It allowed me to continue to learn and get credit so that I could take the classes I should be taking when I got to college.

After telling that little story I decided to write up some options that I'd recommend:
(1) Get a good math book and read it
(2) Enroll in a college course at a local university (or summer program locally or not locally)
(3) Work on programing projects
(4) ** Participate in USAMTS ** - http://www.usamts.org/
(5) But, whatever you do, try not to do it all alone

Options for what you could be learning:
(a) Intro to Formal Mathematics: any book that includes proofs, sets and functions, basic number theory, inequalities, basic counting problems, and fun/interesting/challenging problems.
(b) Number Theory - I did well starting out with a few number theory books early on.
(c) Intro to Analysis - Formal version of Calculus and a study of real numbers.
(d) I myself didn't learn much graph theory until later on, but I don't think that would be an unreasonable subject to learn about especially since it's important for Computer Science and Computation in general.

You should know this as well.  For all those who are self teachers, be aware that communication with others is key.  It's important to develop the flexibility to take on new terminology, to be capable of verbally expressing complex concepts, and to take the time and energy to really focus and listen to others.

I wish you the best of luck with everything.  If you ever would like to talk further, please respond.  I am more than willing to chat with you every now and then.  :D

Ps. I would have started out by saying hi, but it didn't let me.