mr.tea said:
Thank you for the advice.
I am not really want to be a full time programmer. I want to study things related to algorithms, complexity, computability and maybe cryptography.
Do you think I can ignore discrete math if I will do algebraic structures(groups, rings, etc.)?
I don't want not to take ODE, or topology and obvious things like that, because I will not be able to consider myself as a mathematician(nobody will consider me as a mathematician).
What courses in CS are really necessary for me to be able to continue in this direction?
Thank you.
If your interest is in theoretical computer science (e.g. algorithms, complexity, computability, cryptography) having as wide a background in math could only help you. Studying algebraic structures is certainly important, but I would definitely not ignore discrete math, since these are very important in the analysis of algorithms.
Believe it or not, ODE and topology is also used in various research areas within theoretical computer science (e.g computational geometry, computational models of dynamical systems). Furthermore, one popular research topic in theoretical computer science is in quantum computation, and these would require a solid background in ODE and topology at a minimum.
I would also suggest taking courses in both probability and statistics, since probability theory has important applications in the analysis of algorithms and complexity theory (e.g. randomized algorithms, analysis of Markov models), and statistics can be tied into areas of machine learning (a hot topic in CS circles).
As far as courses in CS, depending on what your school offers, I would recommend the following:
computability and complexity
any courses on algorithms
formal languages and automata theory (or something like this, if offered)
distributed computing
computer algebra (if offered)
numerical analysis/scientific computing
symbolic computing (if offered)
machine learning/artificial intelligence (many theoretical computer scientists are interested in algorithms related to machine learning)
graph theory (if offered)
All of the above courses are based on what I recall was offered in the CS department of my alma mater (University of Toronto). Hope this suggestion is helpful.