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 would start (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 what I’ve worked on 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. I became a (somewhat) better programmer and gained some communication and organizational skills that helped in grad school. Also, academics know that there aren’t many research jobs out there for someone with only a bachelor’s degree and no experience – certainly not for someone from a liberal arts college who barely escaped with a BA in CS like I did. So I don’t think that having a couple of non-research programming jobs on my CV reflected poorly on me when I was applying to grad school, because admissions committees hardly could have expected me to have gotten a research job right out of undergrad anyway. (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 or still in undergrad. Here are a few:
- Go to academic PL conferences and workshops as much as you can. The major ones in PL are POPL, PLDI, OOPSLA, ESOP, and ICFP, but there are lots of other conferences and workshops that you will get something out of as well. Workshops are often co-located with larger conferences, so you can hit several events in one trip. It doesn’t matter so much whether you go to big conferences or smaller affairs; the point is to go to academic conferences and workshops, which are of a different nature than non-academic ones, although both can be worthwhile. With few exceptions, if people aren’t presenting peer-reviewed papers (or, occasionally, talks based on peer-reviewed talk proposals), it’s not an academic conference. There are also regional venues, such as NEPLS, which are more informal, but still count as academic events – going to these can be a lot more accessible and affordable than going to a major international conference, so find out if there’s a regional academic PL meetup near you. If you can’t tell whether something counts as an academic venue, ask an academic.
- 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 (the most important criterion being whether they excite 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 been co-located with POPL since 2012. The last iteration of it was PLMW 2014, and PLMW 2015 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. Update (February 6, 2017): PLMW workshops are now co-located not only with POPL, but with several SIGPLAN conferences each year. You now have even less of an excuse not to go to PLMW!
- If you can make time for it, go to OPLSS, the Oregon Programming Languages Summer School, which is a two-week-long lecture series organized by some of the leading researchers in PL and held each summer in beautiful Eugene, Oregon. Again, most of the attendees are current Ph.D. students, but there are always a handful of undergrads, MS students, and folks from industry. This summer’s edition of it is just wrapping up now, in fact. OPLSS is a great opportunity to meet a lot of PL students, as well as professors from strong PL departments, in one place. Unlike at 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). Just as with conferences, a large part of the value of OPLSS is the opportunity it offers 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 conferences or OPLSS will also make your conference or OPLSS experience more enjoyable, because you’ll have more of the context required to make sense of the talks and lectures. (You may already be familiar with these textbooks from undergrad, but as a PL grad student, you will dig into the same material much more deeply. It won’t hurt to give them a second read.)
- Of course, to be part of the research world you need to do research and, if possible, publish it. 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. If there isn’t any faculty member nearby for you to do research with, or if you’re not sure if there is, see the above advice about going to PL conferences, PLMW, and OPLSS, and find ways to put yourself in an environment that’s crawling with PL researchers.
- 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 this 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 of grad school. Perhaps not coincidentally, it also took me until quite late in grad school to really start publishing. Don’t wait as long as I did if you can help it!