My research career began in the year 2000, when I nearly failed out of grad school.
I was in the middle of my third year of the PhD program in computer science at Carnegie Mellon University (CMU), and I had taken all of my required coursework except for the “Software Systems” course, which I finally took that spring semester of 2000. I only barely passed it — and probably shouldn’t have. Most of the course involved reading papers about operating systems and distributed systems design, papers which to my mathematically-oriented mind were often impossibly vague and informal. I couldn’t get much out of them. I also had no idea how to carry out the open-ended class project, because I had never done anything remotely resembling “systems programming”. I managed to squeak out a passing grade by pairing up with Kevin Watkins, a brilliant fellow grad student who at some point took over the project and did most of the work. (How ironic, then, that I am now a tenured faculty at the Max Planck Institute for Software Systems, and that I recently received a big grant to study the “logical foundations of safe systems programming”! So it goes.)
But as far as research was concerned, I had at that point done essentially none at all. For my first two and a half years at CMU, my advisor had been Peter Lee. Peter was a generously warm and comforting advisor. However, in my second year, he was mostly focused on his startup, Cedilla. (Peter has since gone on to become a Corporate Vice President at Microsoft Research.) Moreover, it turned out that what I needed was not comfort and assurance, but close hands-on guidance and firm deadlines. Because, you see, I had no idea what I was doing. I had no clue what it meant to do research. I flittered back and forth between various projects, some of which were glorified homework assignments, some extremely vague and open-ended. I was getting nowhere.
Realizing that things were not as they should be, I decided at the beginning of 2000 to look around for a different advisor and a more clearly defined project. I talked to several other professors in PL (programming languages), and the problem that seemed most interesting to me was one suggested by a brand new faculty member, Karl Crary: how to extend the ML programming language with recursive modules. ML has a very expressive “module system” — a sub-language for structuring large programs — but for a variety of technical reasons it prevents modules from being defined recursively, thus leading programmers to use unpleasant workarounds. This was a problem that had actually interested me from my first year, when I saw a talk at PLDI’98 by Matthew Flatt on his “units” system (a recursive module extension of the Scheme language), but I had never thought to pursue it. In the meantime, Karl, together with Bob Harper, had taken a very preliminary stab at the problem in their PLDI’99 paper, “What is a Recursive Module?”, which is arguably one of the most theoretical papers ever to appear in PLDI (not generally a theory-friendly conference). It’s an interesting paper, and it did introduce the novel concept of a “recursively dependent signature”, but as even the title suggests, the paper is much more about asking questions than it is about answering them. I took as my goal to flesh out the inchoate ideas of that paper into a more fully thought-out design.
Unfortunately, I still wasn’t getting (or even knowing that I needed to be seeking) much hands-on guidance from Bob and Karl, and by May 2000, I had made very little tangible progress. I received an e-mail from Peter while I was home for Passover vacation, not long before the end of the spring semester, informing me that, according to Bob and Karl, I was not in good standing. I would subsequently receive an “n-1” letter: a progress report from the CMU faculty after the semi-annual “Black Friday” meeting, indicating that I would have to produce a significant piece of research and write a paper about it by the end of the year, or else be ejected from the CMU grad program.
What on earth had just happened? One minute, I was embarking on a career in computer science research and just getting my feet wet (never mind that three years into the program was a bit late to be getting my feet wet). The next minute, I was being essentially told I was a failure.
This was the lowest point of my entire existence. I felt like a worthless piece of shit. That is a feeling you don’t soon forget. I certainly haven’t forgotten it — I relive it frequently, even now as a successful academic, although I’ve learned to mostly refrain from throwing small objects across the room and thinking suicidal thoughts in despair at my general shittiness and uselessness. I view myself as a reasonably smart person, but I always feel I’m in way over my head, surrounded by people much more talented than me, who work much harder than me, who actually know how to program, who actually understand type theory (which I’m supposed to be an expert in but I’m not), who actually know how computers work, who actually care about how computers work — people who are qualified to do research in computer science. Whereas I am not qualified: I am…an impostor.
Yes, this is a well-known problem among academics (and other “high-achieving individuals” as Wikipedia puts it), known as “impostor syndrome”. What is so insidious about impostor syndrome is that, although it is a subjective distortion of reality, it is usually grounded in an accurate and honest perception of one’s own limitations. I am surrounded by people who are much more talented than me, who work much harder than me, who actually know how to program, who actually understand type theory, who actually know how computers work, who actually care about how computers work. It’s just that I have some other strengths that those people lack, which I fail to take account of because I am too focused on my failings, and I probably romanticize the talents of others out of proportion. In other words, the impostor syndrome is a natural consequence of the tendency of smart people to be self-critical, competitive, and a bit mad. These characteristics are correlated with creativity and accomplishment, and are thus admirable and beneficial in appropriate doses, but they can easily be abused like a drug, justifying inaction and hopelessness, and leading to a spiral of self-hatred and depression.
Fortunately, after receiving my “n-1” letter, I did not spiral into self-hatred and depression because I am blessed with a loving and supportive family. My mother came and stayed with me for several weeks that summer, and gave me the moral support I needed in order to focus on making steady, positive steps toward completing a piece of research. She also helped put me on a new exercise and physical training regimen, which enabled me to lose a lot of weight and feel better about myself in general. That was spectacularly good timing, given that I met my future wife Rose Hoberman later that fall.
By the end of the year, I had drafted my first paper:
- Toward a Practical Type Theory for Recursive Modules.
Derek R. Dreyer, Robert Harper, Karl Crary.
Unpublished technical report, March 2001.
Looking back at this paper now, I am struck by a few things:
1. The paper is the very definition of preliminary work, an exploration of ideas without a clearly useful result. I can’t tell you how many papers I’ve reviewed for POPL this summer, written by big-name established researchers, that fall into the same category! But at least it is thoughtful, scientifically rigorous, and even, dare I say it, mildly interesting. Hiding within it are the seeds of ideas (in particular, a way of dealing with something I eventually termed the “double vision” problem) that I would later explore in a much more satisfactory way. It was worth writing, and the writing — though not up to my present standards — is not half bad. I guess I was always a decent writer, if I do say so myself. Nevertheless, the paper was far too preliminary to be worth publishing, and it would remain unpublished.
2. Some people are inventors; they invent brilliant new ideas and solutions that are radically different from anything that came before. Generally speaking, that is not my style. I have invented a few clever things, but I view myself primarily as a consolidator. I like to take other people’s good (but often somewhat rough) ideas, to explain them more clearly, to clean them up and pare them down to their essence, to rescue them from the ad-hoc, kludgy trappings of their birth and unify them into more general and elegant conceptual frameworks so that their latent potential can be revealed. On many of my papers, I let my collaborators do most of the inventing, and my role is primarily to extract the key high-level ideas that make their inventions work and explain those ideas so that others can appreciate and build on them. (Whether I succeed at that is a different story.)
This personal style of mine is already evident in my first paper. The paper is basically attempting a more refined analysis of two approaches to the semantics of recursive modules that were described in Karl and Bob’s PLDI’99 paper, which they called “opaque” vs. “transparent” recursive modules. In their PLDI paper, “opaque” and “transparent” were presented as different points in the design space, both of which had major limitations. In the first half of my paper, I showed how both could be seen as instances of a more general unifying rule for recursive module typechecking, which I called the Fundamental Property of Recursive Modules. This was a kind of neat and non-obvious observation. Unfortunately, it didn’t really go anywhere. The second half of my paper proposed a hand-wavy design for recursive modules, supposedly combining the best aspects of opaque and transparent recursive modules, but it’s an ad-hoc mess, and it leaves some of the most interesting parts of the problem (in particular, dealing with the interaction of recursive modules and data abstraction) for future work.
3. The title of the paper commits two cardinal sins: one of excessive sincerity, the other of shoddy salesmanship.
First, it starts with the word “Toward”. This is an outright admission that the work is going somewhere but has not arrived there yet. Too honest, kid! It makes the reader think: “OK, well, call me back when you get there.”
Second, it claims it is aiming at a “practical theory”, which is a dead giveaway that the author is a pure theoretician yearning to have practical relevance. Saying your theory is “practical” is like saying your restaurant serves “world-famous pizza”. If your pizza is really world-famous, there’s no need to advertise that fact. Sadly, I would repeat the mistake a few years later when I tried and failed to publish a completely different paper called “Practical Type Theory for Recursive Modules”. As that title suggests, the later paper still wasn’t remotely practical, but at least I had dropped the “Toward”, thus staking a claim that I had arrived where I was going. (Spoiler alert: I hadn’t.) And even now, my web page says: “I am working toward a ‘realistic’ theory of modularity.” I’m not sure that “realistic theory” is any more convincing than “practical theory”, but at least I had the good sense to put ‘realistic’ in scare quotes.
The truth is that “practical theory” — with all the theoretician’s inadequate yearning that that implies — is what I do. I aim to build beautiful formal foundations for reasoning about real-world systems in all (or at least some) of their filthy complexity. I am not particularly interested in solving mathematical problems for their own sake, nor am I interested in practical impact for its own sake. This tends to put me at odds with almost everyone: to pure theoreticians, I am an unprincipled hacker working on short-term problems, while to unprincipled hackers I am a pie-in-the-sky pointy-headed theorist. Oh well — I can’t change who I am. And obviously I think there’s some merit in trying to do “practical theory” or I wouldn’t be doing it. More about that some other time.
In the end, my first paper was not a very successful effort, but it was enough of a non-failure to convince my advisors to let me keep my head. For that, I am eternally grateful. It would take another year, though, for me to actually prove my worth to them, and in a way no one could have predicted…
To be continued…