# 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.
- 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.
- 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.
- Take other related courses, if possible: algebra, combinatorics,
number theory,
discrete mathematics, complexity theory, formal languages, symbolic
computing, etc.
- 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!
- 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.
- 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.