IamA graduate student in theoretical computer science.
I don't know that I agree with the poster above with respect to:
"a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking"
Most good schools require only two courses in "pure theory": first an introduction to discrete mathematics, where you learn about logic and how to prove stuff, a smattering of number theory/crypto, graph theory, probability, and automata theory; second an algorithms course that teaches you to analyse and construct algorithms according to certain design methods. Together this is really only a year of mathematics, and both courses are quite fun.
Note that discrete mathematics as taught by a good CS program is NOTHING like the math you learned in high school or elementary school, it teaches you to think creatively about mathematical structures and then justify that creativity with logic.
If you're already a developer, you'll probably have a bunch of latent structures hanging around in your brain that will let you have an easy/fun time with the material in these two courses. I suggest that you study discrete mathematics and algorithms in depth, to the level of some decent undergrad course on each. Learning this material will give your thinking the sort of quantitative/logical "edge" you might want -- these two courses contain the basic mathematical tools common to much of computer science. I do agree with the post above that they are not the most practical things in terms of everyday engineering, though.
Addendum: if you find that you really enjoy the mathematical angle and you think machine learning is cool, also learn linear algebra, because a bunch of machine learning theory and implementation relies on linear algebraic algorithms and concepts. Linear algebra actually would be practical to know if you ever do anything with data analysis.
I think your off base with this. A good school with a good theoretical cs program will always require up to multivariable calc, linear algebra, stats with calc, and discrete math. These are required because they will almost always be essential for doing theoretical work. Sometimes you just need it to properly express and explain complexity of a problem but many times in theoretical work knowledge of advanced mathematics is integral to to the actual research. Your advice is more geared towards what most good schools consider a general cs degree.
My advice is indeed geared towards general CS, it was unclear to me if the original poster wanted to get into heavy-duty theory or just gain a more rigorous understanding of CS in general.
Even at good schools (in the US, anyway) the calc up to multivar that is required isn't done with what I would call good proofs. They'll generally do epsilon-delta definitions of the limit and a few other fun things, but will fall far short of a truly rigorous development of the calculus. Same goes for many introductions to linear algebra and stats with calc courses. Some math departments use linear algebra to introduce proofs and creative mathematical thinking, though, so this isn't always the case.
So if someone is looking to develop how they think in mathematics and they already have a good programming background, they are much better served by taking a discrete math course than any of those sorts of math courses. If they then want to learn calculus, I would recommend self-study from Spivak's "Calculus" book which is a fun and elementary but rigorous treatment of the subject. You get to see not just how calculus works, but why it works, which is sorely lacking in most undergrad calc courses, even up to multivar.
What do you call good proofs? I think what you consider a "good school" is not what I consider a good school. In my calc classes we studied tons of awesome proofs that were very applicable to theoretical cs stuff. Plus most of my linear algebra classes and stats classes were just engineering, cs, and math majors so we once again focused on very useful real world applications and fields of active research.
If someone wants to develop their mathematical thinking and is good at programming descrete math isn't going to help them much because they have probably already seen much of it. They need to be exposed to high level calc and linear algebra to develop their mathematical thinking.
I am talking mostly from my own experience (from two or three European universities). A lot of my undergraduate CS programme was very mathematics heavy with a lot of focus on proofs (a lot of calculus, linear algebra, discrete mathematics, graph theory, algebra, even set theory for some, first order and predicate logic) and then of course a lot of foundational CS subjects like automata theory, basic datastructures, crypto, .... I would argue that proper rigorous proofs and thinking are maybe easier taught on the example of calculus or set theory rather than graph theory (I am not talking about discrete mathematics such as combinatorics without much of graphs, etc.). In graph theory, you often resort to doing proofs "by drawing" assuming that a skilled reader would be able to fill in the dots in a formal manner. That said, it's just my opinion and your course may have ways around it.
I don't know that I agree with the poster above with respect to:
"a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking"
Most good schools require only two courses in "pure theory": first an introduction to discrete mathematics, where you learn about logic and how to prove stuff, a smattering of number theory/crypto, graph theory, probability, and automata theory; second an algorithms course that teaches you to analyse and construct algorithms according to certain design methods. Together this is really only a year of mathematics, and both courses are quite fun.
Note that discrete mathematics as taught by a good CS program is NOTHING like the math you learned in high school or elementary school, it teaches you to think creatively about mathematical structures and then justify that creativity with logic.
If you're already a developer, you'll probably have a bunch of latent structures hanging around in your brain that will let you have an easy/fun time with the material in these two courses. I suggest that you study discrete mathematics and algorithms in depth, to the level of some decent undergrad course on each. Learning this material will give your thinking the sort of quantitative/logical "edge" you might want -- these two courses contain the basic mathematical tools common to much of computer science. I do agree with the post above that they are not the most practical things in terms of everyday engineering, though.
Addendum: if you find that you really enjoy the mathematical angle and you think machine learning is cool, also learn linear algebra, because a bunch of machine learning theory and implementation relies on linear algebraic algorithms and concepts. Linear algebra actually would be practical to know if you ever do anything with data analysis.