Getting into a Ph.D. program without previous research experience

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.


It’s been nearly half a year since it happened, so it’s probably about time I mentioned it: the group I originally joined at Intel Labs, the Programming Systems Lab or PSL, has been absorbed into a larger group, the Parallel Computing Lab, or PCL. I was a proud member of the PSL, and it was a little sad to lose our old lab’s unique identity. However, joining the PCL has been a good thing for me and for us. Our old projects continue; in particular, the PCL is now home to the High Performance Scripting project, which ParallelAccelerator is a part of. Some of our PCL colleagues had been involved with Julia already, so it makes sense that we’re now in the same lab and can more easily coordinate our efforts.

The first ten minutes of my JuliaCon talk

Last week, I presented a talk at JuliaCon 2016 about ParallelAccelerator.jl. Thanks to everyone at JuliaCon for being a great audience for this talk!

Everything in the latter twenty minutes of my talk is already pretty well covered in my blog post from March that introduced the ParallelAccelerator package, so in this post, I’ll focus on just the first ten minutes or so.

Do ‘all Java type checkers have bugs’?

Update (February 2017): I’ve written a follow-up to this post!

A few days ago, my friend Stephen Tu pointed me in the direction of “Java Generics are Turing Complete”, a “short note” that Radu Grigore recently posted on arXiv. In it, Grigore shows that in Java, subtyping is undecidable (his “Theorem 1”) and that therefore, type checking is undecidable. He then remarks:

For Java, Theorem 1 implies that there cannot exist a formally verified type checker: All Java type checkers have bugs.

Stephen wanted to know what exactly the claim of “all Java type checkers have bugs” meant. To understand what this means, let’s take a closer look at Grigore’s result.

What even is OpenStack?

A few days ago, I needed to learn what OpenStack is. Here’s what I’ve learned so far.

OpenStack is a collection of open-source “cloud infrastructure” services. One way to think of it is as an alternative to Amazon Web Services for those who want to operate their own data center instead of paying Amazon.1 Several of the OpenStack services are roughly analogous to Amazon services. For instance, OpenStack Nova is an alternative to Amazon EC2; OpenStack Swift is an alternative to Amazon S3; and OpenStack Cinder is an alternative to Amazon EBS. The OpenStack people publish a long list of organizations that use OpenStack in various ways.