Things you can do to get ready for PL grad school
composition.al 2014-06-28
I recently got an email from someone who was about to graduate with an undergrad CS degree and was interested in pursuing programming languages research. They were planning on going to grad school, but wanted to know what they could do between now and when grad school started (in fall 2015 at the earliest, since that’s how application cycles for Ph.D. programs work) to keep their head in the research and PL game. Here are some thoughts on that topic, based on my own experience. My advice is targeted toward people who are graduating from undergrad CS programs soon, or who graduated recently and are working in industry.
Working on other stuff for a few years won’t doom you
I graduated from undergrad in 2004, didn’t decide to apply to Ph.D. programs until 2006, and didn’t actually start grad school until 2008. So, I worked for four years between undergrad and grad school, and my jobs didn’t have anything to do with the research I pursued later — I had a front-end web dev job at a startup for a couple of years, then worked on Perl plumbing for online editions of textbooks at a publishing company for a couple more years. None of this had anything to do with anything I did in grad school.
Some people claim that it’s a bad idea to work in industry for “just a few years” before grad school, since you’ll end up getting used to a cushy industry salary and then never be able to give it up to go back to school. To the contrary, I would argue that working is a good opportunity to build up a cushion of savings that you can use to make your life more comfortable when you’re in grad school later. (And besides, the jobs I managed to get before grad school didn’t pay all that well! Hell, at the startup we sometimes didn’t get paid at all. But that’s another story.)
Money issues aside, I don’t think that I was much worse off for having spent a few years working on things unrelated to the research I would later pursue. Academics know that there aren’t really research jobs out there for someone with only a bachelor’s degree — certainly not for someone from a liberal arts college who barely escaped with a BA in CS like I did — and I don’t think that having a couple of CS-related non-research jobs on my CV reflected poorly on me when I was applying to grad school. (However, if someone who’s served on admissions committees is reading and would like to comment on the matter, I’d be interested to know what your experience has been.)
Stuff to do while you’re working or still in undergrad
In any case, there are indeed things one can do to be involved in the research world while working at an industry job. Here are a few:
- Go to academic conferences as much as you can. The major ones in PL are POPL, PLDI, OOPSLA, ESOP, and ICFP, but there are lots of other, smaller conferences and workshops that you will get something out of as well. Workshops are often affiliated with larger conferences, so you can hit several events in one trip. The key point here is to go to academic conferences and workshops, which are of a different nature than non-academic ones. If people aren’t presenting peer-reviewed papers (or, occasionally, talks based on peer-reviewed talk proposals), it’s not an academic conference.
- If you can’t actually go to academic conferences, one thing you should do (and in fact, you should do this anyway if you want to go to grad school, regardless of whether you go to the conferences) is start looking over the proceedings from those conferences from the last few years. Skim the abstracts and introductions to all those papers and see if you find any that sound like they could be a viable research topic for you. Then, find out who the senior authors are on those papers, and whether they are potential advisors in search of students. Doing so will help you begin to figure out where you should be applying. (This bit of advice is paraphrased from Matthias Felleisen.)
- Speaking of conferences, another thing I recommend for anyone considering a Ph.D. in PL is to go to PLMW, the Programming Languages Mentoring Workshop, a one-day workshop that’s affiliated with POPL. The last iteration of it was PLMW 2014, and the next one doesn’t seem to have a website yet but will be co-located with POPL 2015 in Mumbai next January. PLMW combines a survey introduction to various areas of PL research with general advice on what research is and how one should go about starting a research career. They do their best to give a scholarship to everyone who wants to go, and if you get the scholarship, they’ll pay your way to POPL and put you up in a hotel with a roommate who is also a PLMW attendee. It lasts one day and takes place before POPL proper, and it’s a great way to ease into POPL, which can be a bit overwhelming for a first-time attendee. I’m a huge fan of PLMW; I got to go to POPL twice for close-to-free because of it (although, as someone who was well into grad school by the time PLMW began in 2012, it was a little late for me to take advantage of some of the advice). Most PLMW attendees are current undergrads or grad students, but it’s not unheard-of for folks who aren’t current students to go. I suspect students get priority for scholarships, though, so if you’re currently an undergrad and plan to spend some time working before grad school, don’t wait.
- If you can make time for it, go to the Oregon Programming Languages Summer School (OPLSS), a two-week-long workshop and lecture series organized by some of the leading researchers in PL. Again, most of the attendees are current Ph.D. students, but there are always a handful of undergrads, MS students, and folks from industry. The current iteration of it is going on now, in fact. It’s a great opportunity to meet a lot of PL students and professors from strong PL departments in one place. Unlike a one-day event like PLMW, there’s time at OPLSS for the lectures to get into some quite narrowly-focused and advanced material, but you’re under no obligation to absorb everything you hear (and there are no grades or exams); much of the value of OPLSS is the opportunity to make social connections with people in the research community.
- If you haven’t done so already, it wouldn’t hurt to read an advanced undergrad-level or introductory grad-level PL textbook like Pierce’s Types and Programming Languages or Friedman and Wand’s Essentials of Programming Languages and work on the exercises during the months before you start grad school. Doing this before attending OPLSS or conferences will also make your conference experience more enjoyable, because you’ll understand more of the talks.
- Of course, one of the most important things you can do to be part of the research world is publish. This is also one of the most important things you can do to help your grad school applications if you plan to go to grad school. It’s certainly not a deal-breaker if you don’t publish before grad school (I didn’t), but it will make your application more competitive. If you’re still in undergrad and you have any opportunity to help out on a paper, or even a poster or suchlike, with one of your undergrad professors, you should take it. It’s fine if the project you work on is not particularly exciting; no one expects an undergrad to do groundbreaking research. Moreover, if you do an undergraduate research project, you needn’t feel any obligation to (and, in fact, should not expect to) keep working on things that are related to it when you go to grad school. Stumbling onto a research topic as an undergrad that will sustain your (and your advisor’s) interest for a whole Ph.D. seems to me about as improbable as marrying the first person you ever date.
- Finally, take advantage of being a beginner. The amazing superpower you have as a beginner is that no one expects you to know anything about research; you can ask very basic questions without being judged. I envy undergrads this superpower. In fact, undergrads who ask very basic questions are a good deal more pleasant to be around than those who act like they have everything figured out. Strive to be like the former.
I give all the advice with the caveat that I took practically none of it myself. Or, rather, I took all this advice, but much too late; for instance, I didn’t start going to conferences until my third year of grad school, and I didn’t go to OPLSS or PLMW until my fourth year. Perhaps not coincidentally, it also took me until quite late in grad school to really start publishing.