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?
4$\begingroup$ related: How do I get started in theoretical CS?, Book recommendations for CompSci related math $\endgroup$– KavehMar 8, 2011 at 4:24
2$\begingroup$ See: cstheory.stackexchange.com/q/2571/1621 $\endgroup$– Dana MoshkovitzAug 2, 2012 at 15:27
1$\begingroup$ If you're going in cold, with little or no academics behind it, my advice would be to select a program that provides an entry path for non-CS people. It's not uncommon for people with EE, physics, mathematics, or other similar BS degrees to want to make a career change. Some universities have programs designed to help facilitate that in their course structures. $\endgroup$– NovakAug 2, 2012 at 16:37
There is a course at MIT OCW called Mathematics for Computer Science, it lists some topics you MUST cover.
Learning some Abstract algebra will be a big plus. Because I see too many references to group theory in literature.
3$\begingroup$ dang. forgot abstract algebra in my answer - good call. $\endgroup$ Mar 7, 2011 at 17:17
1$\begingroup$ The Fall 2005 version linked above is missing about 1/3 of the lecture notes. The Spring 2005 and Spring 2010 versions have more complete notes. $\endgroup$ Aug 5, 2012 at 15:06
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)
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.
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.
$\begingroup$ One of these courses are mirrored on YouTube: Theory of Computation. Unfortunately, the mirrors for Algorithms and Discrete Math are incomplete. $\endgroup$– JeffεAug 3, 2012 at 16:32