How should I prepare for applying to Ph.D. programs?

Steven Swanson

It is never too late to decide to get a Ph.D. in CS, and there is still time to strengthen your application and improve your chances of being admitted a strong Ph.D. program. Regardless of how much time you have, the goals are the same.

Understand Your Goals

Your goal is to be admitted to a CS Ph.D. program, so a good first step is to read about how the Ph.D. Admissions process works and What parts of the application matter most.

The professors evaluating your application will be looking for evidence of:

  1. Aptitude for and ability to do research.
  2. CS technical skills/experience.

So, preparing yourself (over months or years) to present a strong application means finding ways to develop your CS skills and convincingly demonstrate your aptitude for doing research.

You will develop your aptitude for “research” by seeking out challenging computer science experiences and doing well at them. You will demonstrate this aptitude primarily by getting supportive letters of reference from computer scientists (or people who can speak to your skills and experience ) and through your “statement of purpose” in your application.

Your Chances are Better Than You Think

You do not need to be a stellar student or research prodigy to get into a Ph.D. program. From googling around, you might conclude that multiple research publications, excellent grades, flawless GRE scores, and ecstatic letters of recommendation are necessary to get into graduate school.

This is not the case. While applications to the very best 5-10 Ph.D. programs is very competitive, those 5-10 schools are not the only places to get a Ph.D. There are many, excellent programs that accept students with strong-but-not-phenomenal applications. Indeed, many new Ph.D. students have not had formal research experience, have imperfect grades, lackluster GREs, or went to less-well-known schools.

The truth (as I know from many years of reading applications) is that there are not enough stellar Ph.D. applicants to fill the the programs of even these Ph.D. programs.

Furthermore, those merely-excellent Ph.D. programs graduate many, very successful Ph.Ds – and it is perfectly possible for you to be one of them.

Do I Have to Have “Research Experience” to get into a Ph.D. Program?

No, you do not. What you need to do is demonstrate that you have aptitude for research. Doing actual research is an excellent (and the most direct) way to do this, but there are many others that don’t involve actually doing research.

The fundamental skill you need to do research is the ability to make progress on poorly defined, open-ended problems with limited supervision. Viewed from this perspective, all of the following might count as “research experience” in CS:

  1. Taking one or more classes that involve large, complex projects and doing well with them.
  2. Building a complex project as part of CS student club (e.g., a video game club) or on your own.
  3. Playing a formative role in startup or product group in a company.
  4. Taking independent study courses engaging deeply with the material.

Experience outside of CS is also potentially valuable, if it demonstrates general technical ability, creativity, or entrepreneurial tendencies, since these are all valuable traits in Ph.D. students.

Getting Good Letters of Reference

Regardless of what form your “research experience” takes, you will need someone to vouch for it, because a line on your CV does not show how engaged or successful you were or how much leadership you demonstrated. And that is what the admission committee wants to know.

Getting a good letter requires the letter writer to know you, your skills, and your experience, and that means you will need to have meaningful relationships with as many of your letter writers as possible.

There are several ways to achieve this:

  1. Work is a professor’s research group.
  2. Take one or more classes with the professor, go to office hours, and get to know them.
  3. Take a small class from a professor where they can’t help but be aware of the quality of your work.
  4. Attend a Research Experience for Undergraduate (REU) program.

All of these take time and effort, and there are no short cuts.

At smaller schools (e.g., my alma mater) with smaller classes, it is easier to develop the necessary relationships with faculty, since it is hard to “hide” in a small class. However, at larger schools (e.g., where I teach) with larger class sizes, being invisible is the default, so being noticed takes work.

Courses Grades GREs and Other things

Research experience and letters are the most important things in your application, but your coursework grades and GRE scores play a role as well. We have a little data about how strong your scores should be.

Course Work

Professors making admissions decisions (some more than others) pay attention to overall grades and what classes you took, so it’s important to pursue a rigorous course of study and to do well in your classes. You should look for classes that will expose you to core computer science ideas, give you the opportunity to do interesting projects, and stretch and develop your CS skills.

You need to be noticed in many (or at least some) of your CS classes, because some of your letters will be based on course work: You will need at least three letters and it is unlikely that you’ll work directly with three different professors on research.

Letters that say “They did well in class” are pretty useless – that information is in your transcript. Instead, you need your instructors to remember you and the work you did in class so they can explain why it was good and meaningfully (and positively) compare you to other students.

If your university has a MS or Ph.D. program, taking graduate courses can be a good option. They tend to be smaller than undergrad classes, they cover material in more depth, and they might even let you skip some requirements in grad school. Of course, you still need to do well and get noticed by the professor.

Accomplishing all this is not complicated (which is not to say it’s easy): Choose interesting classes, do well, and go to office hours.


Historically, you’d need to take and do reasonably well on the GRE. However, it is falling out of favor.

For now, you should probably plan on taking it. Something things to keep in mind:

  1. You can take it more than once, if you don’t like your score the first time.
  2. Practice/studying can improve your score.

Strong GREs will help your chances a little and, in my experience, low quantitative (i.e., math) scores are a red flag.

The Long Game

If you know from early in college (say sophomore year) that you want to get a Ph.D., you will have plenty of time to prepare. Below, is a do-everything-possible-to-maximize-my-chances time line for preparing for a Ph.D.

You do not need to do all of this, but keep your eyes on the main goals: Demonstrating research aptitude and having several people who can vouch for it.

  1. Sophomore year
    1. Take challenging courses that appeal to you. Get good grades.
    2. Keep your non-CS GPA respectable. You have more Ph.D.-relevant things to spend our time on that getting straight As outside of CS.
    3. Go to office hours, even if you don’t need help.
    4. Get to know the faculty. Ask them about research.
    5. Ask around your department about ways to get involved in research.
  2. Sophomore Summer (In order of preference)
    1. Work on a research project.
    2. Attend an REU.
    3. Get an interesting internship. Amaze your boss.
    4. Lead a team of your friends to do an independent project.
    5. Do an independent project on your own.
  3. Junior Year
    1. Same as sophomore year, but more so.
    2. Go tell your sophomore year professors about your summer projects.
    3. Wander by professor’s offices and chat with them.
    4. Continue with the independent project if you’re passionate about it.
  4. Junior Summer
    1. Same as sophomore summer.
    2. Start working on your statement of purpose and figuring out where to apply.
    3. Identify fellowships to apply for.
    4. Take the GREs (if needed)
  5. Senior Year (Autumn)
    1. You are going to be very busy.
    2. Get your letter writers lined up right after you return to school, and get them the material they need.
    3. Applications are due in early/mid December.
    4. Fellowship applications are due.
    5. Maybe take the GREs again.
    6. Apply!
  6. Senior Year (Spring)
    1. Await decisions.
    2. Attend visit days.
    3. Pick an offer to accept.
    4. Take something fun. You earned it, and if you go to grad school, no one (truly, no one, ever) is going to look at your spring semester grades :-)

The Rush Job

If you didn’t figure out you might want a Ph.D. until late in your Junior year, don’t worry too much. There’s still time to strengthen your application.

You can jump into the “Long Game” plan at any point. However, if time is short, you might look for ways to get to know some professors quickly. For instance:

The Last Minute (or beyond)

If you decided you want a Ph.D. and your a senior (or have graduated), you have couple of options.

The first, if you have decent grades, something you can position as research experience, and at least one good letter writer, you should apply to Ph.D. programs. Pick a range of schools, and pull together the best application that you can manage. You definitely might get in, so give it a shot.

You might not get in, so hedge your bets. This could take a few forms:

First, you can apply to masters programs in addition to Ph.D. programs. Getting a masters degree first is not necessary but it can be a good way to get research experience and strengthen your application.

As you decide where to apply and attend for masters, look for places that have a thesis option or otherwise encourage/require a research component. Not all master’s programs require research. Attending one that does will make it easier to attain your primary goal: Research experience.

Second, you can work. Industry experience also looks good on Ph.D. applications. You should aim for positions that would demonstrate research aptitude or try to get assignments that show you can handle open-ended tasks.

Happily, both of these options will advance your career regardless of whether you end up doing a Ph.D.


  1. There’s a nice timeline at the bottom of this page at Princeton. The rest of page is good too.

Video Answers to Related Questions

Ask Your Question!

If you have a question about this topic (or anything else about getting a Ph.D. in CS), ask below. We will answer!