Several weeks ago, I got this email from a reader of my blog:

I’ve read your blog a lot.

I have one question though. How did you get into a PhD program without previous undergrad research experience?

I’m in Nigeria studying CS and my school has virtually zero undergrad research opportunities, at least not in my area of interest - Compilers and Programming Languages.

I want to become a researcher in Programming Languages. I’m in my second year (undergrad) and I’m working through SICP and writing a compiler for JavaScript in Python.

I need your advice desperately about what I should be doing now to would help my chances of landing an admission into grad school.

Thank you.

I don’t necessarily feel obligated to respond to every cold email I get, but this one grabbed me. I’ve been obsessing for weeks about how to answer this question effectively. This post is what I’ve come up with so far. I recognize that my advice on this topic may not be helpful to everyone, and I’m interested in hearing other researchers’ answers to the question.

Hey! Thanks for asking this thought-provoking question.

You’re right about my background: I entered a Ph.D. program without having had any previous experience doing research. For undergrad, I attended Grinnell College, a small liberal arts college in my home state of Iowa. I decided to go to Grinnell largely on the basis of having attended summer camp there a couple of times and liked it.

As it turns out, Grinnell is a great school, and I had a great college experience. But it’s not exactly a hotbed of computer science research. Professors at Grinnell do conduct research, but most of their focus is on teaching, and the research they do is usually on a smaller scale than what faculty at research universities do. The focus on teaching may have been especially pronounced in the computer science program during the years I was there in the early 2000s, because there happened to have been a big swell in CS enrollment just then, so it was probably all hands on deck just to get the courses taught.1

Still, I could have found ways to do research as an undergrad, but I didn’t really seek them out. I didn’t start studying computer science until my second year, so I was playing catch-up to the rest of my class on the CS and math course requirements, and any extra time I had went to my other major in music. I did apply once to do summer research with a professor and was turned down. The closest I came to doing research in undergrad was during a group project for my junior-year software design class. My group had decided to build a database-backed web app – something none of us had much, if any, experience with – and I had designated myself as the Database Person in an attempt to avoid writing PHP. My contributions to the actual project were minimal, but at some point, I became curious about database normalization and found this CACM article from 1983.2 I printed out that article and carried it around with me for weeks – just looking at the typography brings back visceral memories of hanging out in Noyce late at night3 – and I went down a rabbit hole following the references. I tried and tried to squeeze redundancies out of our silly little database design.

I was doing this because I wanted to, not because anyone was telling me to do it. Indeed, if the other members of my project group were telling me to do anything at all, it was probably to please shut up about normal forms and help them finish the damn project. When I applied to grad school, I wrote about this experience in my statement of purpose, because it was the closest thing I could think of to having done “research”.

Did this approach work? For the most part, no. I was rejected by three of the four Ph.D. programs I applied to. (Four, by the way, isn’t very many. I suggest applying to more than that.) So it’s a bit surprising that anyone is asking me for advice on this topic. Nevertheless, I did do one thing right. The best advice I can offer a second-year undergrad who wants to get into a CS Ph.D. program is to first get really interested in something quite specific, and then – the crucial step that I didn’t take – go talk about it with people who’ve done research in that area or can refer you to people who have.

In her excellent document on applying to Ph.D. programs in computer science, which you should probably be reading instead of this blog post, Mor Harchol-Balter gives two examples of letters of recommendation, describing two hypothetical applicants to a Ph.D. program:

Letter 1: “I highly recommend student X for your graduate program. Student X received an A+ in my undergraduate algorithms class. He was ranked Number 2 out of 100 students. He got the highest score on the final. He worked very hard all semester, never missed a class, and was always able to answer the questions that I asked in class. This conscientious attitude makes him an excellent candidate for any graduate program.”

Letter 2: “I highly recommend student Y for your graduate program. Student Y received a B in my undergraduate algorithms class. He was ranked Number 29 out of 100 students. Halfway through the semester we started working on network flows. Student Y seemed extremely excited by this topic. He disappeared for 4 weeks and even missed an exam. However when he came back, he showed me some work he had been doing on a new network flow algorithm for high-degree graphs. He had done some simulations and had some proofs. I’ve been working with student Y for the past couple months since then and he is full of ideas for new algorithms. I think student Y’s initiative makes him an excellent candidate for any graduate program.”

She points out that Letter 1 counts for nothing, while Letter 2 is very strong. I was perhaps a little bit like student Y in that I got excited about something and pursued it, probably at the expense of my grades. (I was certainly not very much like student X.) I’m not trying to flatter myself here – I was, of course, also rather unlike student Y in that I didn’t come up with anything novel on my own. But I could have had a chance at being more like student Y if I’d found someone in the research community to talk to about what I was thinking about, like student Y talked to the hypothetical letter writer.

When I was working on the class project that led me down the database normalization rabbit hole, I didn’t want to talk with my instructor about it, because, quite honestly, he didn’t seem very interested in talking with students.4 But I wasn’t brave enough to bring it up with any other faculty member, either. Don’t be like me! Find a researcher – at your institution or elsewhere – to talk with about that thing that you can’t stop thinking about. The first person you find may not know a lot about it, but if not, they might be able to refer you to someone somewhere who knows more. I guarantee you that whatever that thing is that’s keeping you awake at night, there are some researchers out there who have closely studied it, or some descendant of it, and maybe some of them would like to talk about it with you.

How is all this going to help you get into grad school? It will help because letters of recommendation are the most important part of your application, and the best letters come from people who (a) know you well and (b) are well-known in the research community. The people who will ultimately be able to write you the strongest letters may or may not be at your school; they may or may not be in your country. You need to go out and find them. It is great – really great – to work through SICP or do compiler hacking on your own. But to get into grad school, you need recommendations, and for that, you need to find your people. This is why I recommend that folks who are interested in getting a Ph.D. in programming languages attend PLMW and OPLSS, because it’s at those kinds of places that you can start to meet a wide range of people from the research community, talk with them, ask questions, get introduced to more people, and begin to figure out where in that community you might be able to make a space for yourself. There’s no substitute for going to these events in person.

You can look at the web page from the most recent PLMW to get an idea of what it’s about. They offer great scholarships for student travel, lodging, and registration. There will probably be one at POPL 2017 in Paris next January, and another one at PLDI 2017 in Barcelona next June.5

Now, my actual number-one it-worked-for-me ProTip™ for getting into a PL Ph.D. program without previous research experience is simply to apply to some not-so-highly-ranked places. In PL there are a lot of excellent advisors and research groups that are part of otherwise not-especially-highfalutin departments – I can think of several examples in the US alone – and at those places, your application might stand out more. (Emery Berger recently created an alternative CS rankings tool that can help you find such places.6) But “How did you get into a PhD program without previous undergrad research experience?” is kind of the wrong question anyway, since you’re only in your second year of undergrad and you still have plenty of time to do research. As Chris Martens points out, “do research!” isn’t particularly actionable advice for most undergrads (or most anyone, for that matter), so instead of putting “do research!” on your to-do list, I’d suggest a course of action like this: get excited about a specific topic; go out and find your people in the research community; ask lots of questions; and see what develops.

One last thing. You’re concerned that your school has no undergrad research opportunities in programming languages. I’m not sure that that’s so much of an obstacle. If there’s an opportunity available for research in some other subfield, consider trying that! If it doesn’t match up with what you think you want to study in grad school, that’s okay; you can leave it behind when you leave undergrad and never touch it again. (Or, you may find out sooner or later that it connects to PL in some fascinating way that you never imagined.) If you look at the CVs of successful researchers, and you read all the way down to the end of their intimidatingly long publication lists to find the very first paper they ever published, it’s not so unusual to find something unrelated to what they ended up doing in the rest of their career.7 And you never know; you might change your mind about what you want to do in grad school, anyway.

Good luck!

  1. My graduating class of 2004 was, at the time, the largest ever, with twenty-six graduates. After that, things dropped off a bit, and in fact, that number remained unsurpassed until 2016, with an impressive thirty-eight. Most of the other years seem to have had ten or fifteen graduates. 

  2. There’s also an HTML version on the author’s website that some may find more convenient. 

  3. Amusingly enough, more than a decade later I again find myself spending a lot of time in a building named after Bob Noyce

  4. No, really: he was so uninterested in being in the classroom with students that he once walked out of our class early because the dining hall was serving something that he wanted to be first in line for. (Not even, like, a good restaurant or something – the dining hall!) He was also a hunt-and-peck typist. And used gedit. For writing Java. Thankfully, all of these behaviors are unrepresentative of Grinnell CS faculty, and unsurprisingly, he didn’t last very long at Grinnell. 

  5. If you’re coming to Paris or Barcelona from Nigeria, you won’t even have to change time zones. 

  6. I won’t claim that the rankings on are objective; rather, they are based on publication counts and therefore subject to the same biases and structural problems as academic publishing is. That said, is one possible way to reveal some great advisors and groups that the US News and World Report rankings obscure. 

  7. Peter Bailis studied bee-foraging behavior, apparently.