This is a perhaps-too-highly-detailed post about applying to graduate school, before the survivorship bias settles in too strongly. I thankfully finished this process about seven months ago. It'll soon be over for you too.
Take a deep breath. Applying to grad school is stressful. But by reading this post, you're already going to be so much more prepared. You've got this.
Below is the list of materials typically needed for a grad school application in the US. Non-US institutions typically don't require the GRE. Start applications early to see if some require additional materials.
Graduate Record Examination (GRE)
Statement of Purpose
Letters of Recommendation
See Into The Weeds to see more details on each of these individual requirements, as well as my personal statement and details on applying for fellowships.
Here is a very rough timeline for preparing your grad school applications. I followed this timeline, but feel free to move things around as you feel is right. There are a few details on each point as well.
List of universities (Summer/Early Fall)
GRE Scores (Early Fall)
Contact letter writers (Mid Fall)
NSF GRFP application (Mid Fall)
Statement of Purpose (Mid/Late Fall)
Application dates (Late Nov/Early Dec)
Note: Most applications are due December 15 but some are due earlier, so do check this! Some universities have early deadlines with discounted application costs. Additionally, some applications require that you submit all your materials before they contact your recommenders. In this case, you should submit a few days ahead of time so your recommenders have a few days to get your letter submitted. Use a spreadsheet to track all the dates!
I thought I would be ahead of the curve by having a list of universities by the end of the summer before my last year of undergrad. Initially, I had a list of five universities. Refining this list with my advisor, as well as attending ICFP and CMMRS made this list to grow to ten (!!) universities. Ten is a lot, and I'm not sure if I'd recommend it to everyone, but it is beneficial to have a variety of universities to choose from.
Faculty members in PL should know faculty members at other universities, as well as the kind of work they're doing. There is also a list at csrankings.org, however, the list here IS NOT comprehensive and you should definitely not base your decision purely on this. You can select the conferences ICFP and OOPSLA from the drop-down list under "Programming Languages", as well as select any other research areas you're interested in. Leif and other members of the community have started crowdsourcing a list here as well.
Ultimately, there is a lot of research you have to end up doing yourself. PL labs usually have a nice website which lists everyone who is participating in PL-related research, which is very helpful. This research takes a while, so start as early as possible, such as summer/early fall. This gives you plenty of time to research faculty members, the work they're doing, the kind of program offered at their university, and to add/subtract universities from your list.
Pick universities where there are several (2-4) faculty members you could envision yourself working with. Start a spreadsheet to keep track.
On emailing professors: I personally did not email any professors about my application; however, I did end up meeting a lot of them through CMMRS, ICFP, and SPLASH. Faculty members get a lot of emails, and usually can't answer all of your admissions questions, other than questions relating to their own research agenda. Read their website thoroughly. Some have a FAQ about admissions, or even a guideline on what to include in an email so they will read it. Follow this guide.
The Graduate Record Examination (GRE) is a standardized test required for almost all US grad school applications.
You can see and submit your scores to four universities the day you take the exam. Regardless of your scores, take the opportunity to send them for free. The cost of applying to grad school adds up, and you might as well save every bit you can. The ETS records which universities you have sent your scores to.
See more detail in the GRE section.
Once you've finalized your list of universities, send this list to your letter writers, as well as a concise, one-sentence description describing why you are applying to each school. Include the faculty members you are interested in working with and why (for example, "this faculty member does research involving X"). Finally, include the dates the applications are due.
See the Fellowships section for more details.
Use the research you've done to find a list of universities in writing a strong statement of purpose. Read more in depth about this in the Statement of Purpose section.
As mentioned earlier, confirm each individual university's application deadline. Don't assume every university has the same deadline, December 15. Track this in your spreadsheet.
Now it is time for me to go into way, way too much detail about each section of the application. Here are the quick links to each section:
The Graduate Record Examination (GRE) is a standardized test required for almost all US grad school applications.
This is definitely the most annoying and expensive ($205!!) part of the application. The GRE is not a particularly hard exam if you have experience with standardized testing in the US. As mentioned in the timeline, you have the opportunity to send your scores to four universities the day you take it. Regardless of your scores, take the opportunity to send them for free.
Some say these scores don't matter. I know I didn’t believe them when I was going through this process. If you have good letters of recommendation, the scores don't seem to sway your application either way. At least, this seems to be the general trend. However, I have heard of applications getting rejected because of low scores. I would say that perfect scores don't matter, just good enough scores do.
Do not waste your time trying to get perfect scores. The money spent is just not worth it. I’ve listed my percentile under each section, and as you can see my math percentile was not perfect. One would assume that computer science programs would value high math scores, but I believe the writing and verbal sections are actually more important.
In the timeline, I suggested taking the GRE in the early fall. This is in case you want to retake the GRE. You may feel like you should, as it is essentially the only part of the application you can control. Do not fall into this line of thinking. Talk to faculty members or graduate students about your scores before retaking the exam. And again, I cannot emphasize this enough: do not waste your time trying to get perfect scores.
The ETS provides two free practice tests. Use them to get a feel for the test format and the kind of scores you might be able to get.
Below is more detail about the three sections in the GRE, as well as my percentiles in each:
My percentile: 92.
The GRE requires that you write two essays, each in 30 minutes, right from the start. One is an argumentative essay: given a statement, provide an argument for/against the particular position in the statement. This does not have to be your actual opinion.
Take the first ten minutes (yes, ten minutes) to list the pro/con arguments. Then, chose the side that you feel you can best argue for, not your actual opinion. Write the outline for the argument. Take one paragraph to address a counter point. For example, if you are arguing pro, address one of the arguments you listed for con and show how it doesn't hold.
The other essay is essentially the opposite - analyzing an argument. You are given a short passage to read, and your task is to show how the argument is weak and what changes could make it stronger.
Comparing apples to oranges is a common mistake in these passages, something like "this happened to X under Y circumstances, thus it will happen to Z in Y (or a slight variant to Y) circumstances." Not enough evidence is another common mistake. Providing evidence the best way to strengthen an argument. Be specific: say exactly what evidence would make the argument stronger.
Again, take the first ten minutes to read the passage, list out its weaknesses and how it could be strengthened, and write the outline of the essay. Ten minutes seems like a very long time, but taking this time will create a clearer and stronger essay. It actually doesn't take long to fill out the outline.
If you would like to see examples of essay prompts, see the list here.
General advice for both essays: the readers are probably taking less than ten minutes to read your essay. Write the main point in the first sentence of each paragraph. Follow the five-paragraph essay format.
My percentile: 91.
Three verbal sections appear in random order while you are taking the exam. You are given 30 minutes to answer 20 questions per section.
I was shocked by my high percentile in this section, as there are a lot of complicated words used in these sections that I didn't bother memorizing. Do review at least a common list of them to get a sense of what vocabulary is used both in the questions and passages.
There are several different types of questions in this section. One type is contextual equivalence: what two words are essentially synonyms in a given sentence (context). Another type requires finding a word (or words) that best fits in the meaning of a sentence. These questions essentially ask for the vocabulary definition. Other types of questions involve reading passages and then answering questions about the arguments posed, as well as what certain phrases or words mean in a particular context.
My best advice is to simply find a cheap textbook (usually ~$20 on Amazon) and practice these kinds of questions to get a feel for them.
My percentile: 74.
Three math sections appear in random order while you are taking the exam. You are given 35 minutes to answer 20 questions per section.
The math in this section is not highly technical, usually middle school/early high school level. If you're like me, you have probably forgotten how to do this kind of math.
What's different about these questions from, say, the SAT, is that there are actually a few questions on probability/statistics/standard deviation. However, these questions only makes up a small portion of each section. The majority are basic questions covering geometry and algebra, so I highly recommend practicing and getting accustomed to these first, then taking a little bit of time to practice the other mathematical concepts.
If you're not sure how to get your unofficial transcript, contact your university. You only have to send the official transcript when you commit to a particular university.
If you have low grades in computer science courses, I've heard that it is worth addressing why this is the case in your statement of purpose. This gives the reader of your application some context as to why this happened. Be sure to mention instances of how you were able to improve or overcome particular obstacles.
Hopefully it is obvious, but do not blame the professor or class for your low grades. The exception being actual extenuating circumstances, not something along the lines of "well this class was dumb."
You will need three letters of recommendation for applications. Some have options to provide more than three, but three is the standard. The online application will ask for the name and email of your recommenders.
I was fortunate enough to have three people in academia (two faculty, one systems scientist) write my letters of recommendation. Having one strong letter of recommendation is already quite impressive.
What does strong mean? It means that the person writing the recommendation can speak to your research ability in some way. This could be a research mentor, a faculty member with whom you've done a project with, and so on.
A "Did Well In Class" (DWIC) letter is one that is written by a professor with whom you've taken a class. It's called a DWIC letter because this recommender can only speak to your ability in classes, not research. I've heard that it is okay to have one of these; it's hardly reasonable to expect undergraduates to have three letters totally about research. These letters don't hurt your application, but don't help it either.
There may be famous computer scientists at your university, and perhaps you've had a class with them. Don't let their fame entice you into asking for a letter of recommendation from them. Prioritize letters from people who actually know you.
When asking for a letter from a faculty member you’re not sure will answer "yes," specifically ask if they can write you a strong letter of recommendation. This gives them an "out" essentially, because they may not want to say no, but feel that their letter won't carry much weight.
Note: This is the longer version of my statement. Most universities require a one page statement. My one page version is very similar, with a few less details.
First things first, have multiple people read your statement. My advisor gave me suggestions right up until the deadline; if you prefer to avoid this, give your reader an example statement as early as possible so you have plenty of time to revise.
Notice I have titled this section as "Statement of Purpose", not "Personal Statement". Avoid cliches in your statement, such as the classic "ever since a young age I knew I wanted a career in computing." No one cares about your eight-year-old-self's aspirations; they want to know your interests today.
Explain how your previous project and research experiences have influenced your decision to pursue research in a particular area. Then, incorporate the research you did on the particular university into your statement. List the faculty members you are interested in working with, and how your previous project and research experiences have prepared you to work with them.
If you've had the privilege of having a lot of research experiences in undergrad, don't write your statement as a list of all the research you've done. They will read this information in your resume/CV. Instead, pick out certain projects that you find most relevant to the work you hope to be doing, demonstrating how you will be able to continue to succeed in this area.
If you haven't had the privilege of having a lot of research experiences in undergrad, don't worry! You're literally applying to start doing research in grad school. Pick particular projects that you have done for class or on your own, demonstrating how these projects show your interest and ability in pursuing independent research ideas.
If you're interested in a career in academia, feel free to mention this in your statement of purpose. Don't worry about it being a commitment you have to live up to.
In the first few drafts of my statement of purpose, I wasn't specific enough when describing various research projects. Note how in this final draft, I have a lot of detail - using terms such as closure-conversion and monomorphization. Using lots of details shows that you learned from and contributed to these projects. Make sure to write about the aspects of the project(s) that were your own. I didn't invent Gibbon or Obsidian but am able to express what I uniquely contributed.
One of the most well known fellowships is the NSF Graduate Research Fellowship. It is a competitive five-year fellowship available to American citizens. This fellowship funds you during your PhD, which can give you a lot of freedom to research whatever you wish. It also helps your advisor, because if you have a fellowship they won't have to do as much grant writing to fund your project. The only unfortunate thing about this fellowship is that the application is in October, which is much earlier than graduate school applications, and you don't hear back until the first week of April.
This application also requires three letters of recommendation. Let your letter writers know you will be applying.
What it seems like they're looking for in this application is that you can 1) do the research necessary to support and motivate a particular research idea and 2) come up with a timeline for completing it. Of course, you've never done something like this before, so your timeline can be vague.
Do have someone read over your proposal, as obvious as that is. I missed many citations in my proposal because I was too nervous to have anyone read it.
Despite this, I did win the fellowship. Here are my materials, and note that personal statements can be up to three pages long:
I got help from my friend Aaron Weiss's blog post, another NSF GRFP fellow.
There is also the National Defense Science & Engineering Graduate Fellowship. One of my letter writers suggested I apply for this as well, but the application deadline was at the same time as grad school applications, and I was super tired of writing applications.
Don't be like me, don't burn yourself out. Breathe. You'll get through this.
I found Jean Yang's series of blog posts on grad school applications extremely helpful, as well as Matt Might's blog post. If you want to learn more about life in grad school, Lindsey Kuper and Jean Yang have written some blog posts. I personally found these helpful in deciding that this path was for me. Their blogs are fantastic in general.
Additionally, as Lindsey Kuper pointed out to me, this PDF from Mor Harchol-Balter is the "gold-standard" of applying to PhD programs.
A huge thanks goes to my undergrad advisor Sam Tobin-Hochstadt for educating me on this whole process. I couldn't have done it without his constant support (and listening to me stress 24/7).
Talk to people. My friends were super supportive through this process, especially the ones I made through my REU who were also applying to grad school. We all made it! You will too.
Finally, if you like type theory and compilers, check out my advisor William J. Bowman, and come join us at the beautiful University of British Columbia!