I'm a self-taught professional programmer. I am pretty good at it (Ruby, Unix, Clojure, Java, Objective-C), but now I'm thinking of taking it to the next level by maybe applying for a masters or PhD program in CS. What topics in math should I study to prepare for this goal?
A generally high degree of mathematical maturity makes a lot of the formal aspects of (not necessarily theoretical) computer science much easier to understand. So doing a minor in mathematics along with your major in computer science would do more good than harm.
Linear algebra, probability theory, some graph theory/combinatorics at a bare minimum.
Some things you may need, some more, some less:
- Mathematical Logic
- Probability Theory / Combinatorics / Statistics
- Linear Algebra
- Graph Theory
- Set Theory
- Number Theory
- Maybe some optimization theory
Of course (almost) anything will be useful, especially if you are going into theoretical computer science fields.
All of the other answers +...
Arguably the most useful thing for you to try and do is engage in research. Following stackexchange, reading some background material/papers and figuring out what you might find interesting might be the most effective way to prepare yourself to grad school.
excellent/wide responses so far. I suggest some classes not mentioned so far. esp classes that lean toward application of the theory & require the student to write/debug code & visualize [graph results] as part of assignments. or build/debug working systems. etc.
- differential equations. esp the relationship between it & discrete differential equations eg generating functions.
- numerical methods. optimization. Runge Kutta diffeq solver etc. a neat/highly educational exercise is to solve/graph the Lorentz weather equation. concepts about precision/accuracy in software arithmetic etc.
- there is an MIT class "modelling and simulation of dynamical systems". something similar would not be available at all universities but maybe some will have it.
- some universities will have principles/dynamics of complex systems or complex adaptive systems etc
- anything related to modelling or simulation of systems using software with a mathematical focus
- fractal systems & mathematics
- machine learning (esp with gradient descent techniques)
- quantum computing (some classes in this are highly or mostly mathematical)
Great question. I just recently passed the PhD qualifying exam that was in part an entrance exam - mix of undergraduate and graduate topics.
To be practical - it depends on the school you are planning to attend, type of entrance exam they might require and type of the program they offer.
Some require GRE, so preparing to enroll is not CS specific. Some require GRE subject, which is equivalent to 5-6 core CS undergraduate courses and theory will be covered (automata theory, discrete math, etc)
To get the most fundamental background I would take Discrete Math, Algorithms and Theory of Computation from Ad Uni.
There are other fantastic sources from MIT and Stanford but these three courses, presented by great Shai Simonson are excellent foundation.
Hope this helps.
i really support the answers above. I can add the following that may be useful for the big picture of math in CS:
Math can be part of the goal itself; algorithm analysis, complexity bounds, deterministic or probabilistic proofs, parallel algorithms and many more research areas related to time and space of computation.
On the other side, math can be the actual path for a higher level goal; PDEs, light equations for computer graphics, the whole research area of computational physics (dynamical systems, statistical mechanics, galaxy formation) to name some of them.
Under the right circumstances, both forms of math could live together.