Interested in Graduate Study in Theoretical CS?

If you're interested in doing a master's or Ph. D. in theoretical computer science, here are some tips.
  1. Get a good undergraduate education. If possible, study at the best and most demanding program you can get into and afford. It'll be easier to get into graduate school if you go to a place like Princeton, Stanford, CMU, Waterloo, Toronto, than if you go to Podunk College.
  2. Take the two essential courses: Theory of Computation (automata, Turing machines, etc.) and Design and Analysis of Algorithms. My experience is that students who do very well in these courses nearly always succeed in graduate school, while students who don't do well often struggle. At Waterloo you should definitely take CS 365 over CS 360, if possible.
  3. Take other related courses, if possible: algebra, combinatorics, number theory, discrete mathematics, complexity theory, formal languages, symbolic computing, etc.
  4. Participate in undergraduate research. The way to become a researcher is to do research! There are many possible programs, like URA, USRA, REU, etc. Do some research online to locate possibilities. Approach a professor to see if they have any openings. If you already have a project in mind, so much the better!
  5. Get to know some professors better, so they can write you an informed letter of recommendation. This is particularly important if you have only been in large classes where you are anonymous.
  6. Look at recent conference proceedings in theoretical computer science, like FOCS, STOC, SODA, STACS, ICALP, to see what people are currently working on. Try to read some of the papers (it will be hard!). Identify some topics of interest and the universities where people are working on these topics.
I enthusiastically welcome and encourage applications from under-represented groups.