PL research & grad schools?

I'm a senior undergraduate looking into graduate schools with an eye towards PL. I am strongly considering taking a year off after graduation but figured I should start looking now. Given LtU's audience I thought here would be a good place to ask if anyone has any particular recommendations for places to apply to. Also any tips on getting in to such a program would be welcome ;)

The biggest point against me I think is that I'm coming from a liberal arts college (so we take just Algorithms, not Algorithms 101, 102, and 103). Most of my learning so far has been self driven. My college has a PL course but it's mainly oriented towards making sure students are exposed to FP before they graduate rather than formal semantics or type theory. Instead I'm taking PL as an independent study geared towards the more advanced -- I've read most of my prof's old copy of The Denotational Description of Programming Languages (Gordon) and will soon move on to lambda calculus and eventually type theory. I expect that as my formal knowledge develops I might find specific PL researchers I would be interested in working with, but alas I'm not at that level yet.

I find everything from formal semantics down to the compiler to be interesting, except for parsing, but perhaps it has simply not been presented in an exciting way yet. :)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Important question

This question comes up repeatedly on LtU, and I think this is one thing LtU can really help with. When we finally get our wiki we should have a page dedicated to this issue, but until then, let's try to use this opportunity to collect the most important pointers!

Don't second-guess yourself ...

.. with respect to the liberal arts degree. Yes, small colleges can't provide the breadth or depth of coverage within the discipline that a more intensive (and typically more technical) large-school curriculum can. But a lot of faculty at graduate schools appreciate the kind of background you get from a liberal arts degree: courses in philosophy, linguistics, mathematics, etc., might all be relevant to a PLT graduate education (plus a broader education overall). One faculty member at a larger research-oriented school told me (while I was interviewing there) that they got most of their graduate students from the kind of school I was then teaching at (small liberal arts) than from the kind of undergraduate curriculum they themselves taught at the big school.

Your "self driven learning" will probably be of more interest to potential advisors than, e.g., detailed knowledge of LALR parsing techniques. But be sure to showcase the former in your graduate application. And make good use of the year in-between: further self study would be great evidence of potential success in grad school. It might also help you narrow down who you want to work with. It's possible that some people would also look well on "real-world" work experience during that year, but I think that's more idiosyncratic.

As for specific recommendations, here in the US, for PLT-related work, I would think immediately of Carnegie Mellon, Northeastern and Portland State (where much of the former OGI group went). There are a lot of other places I might mention (Yale? Penn?), but I fear my news is too out of date to be reliable: I hope others will chime in. There are also a lot of places where there are smaller groups or even single researchers braving it out alone. But I have to say that smaller groups, and especially those of size one, don't tend to provide as rich or supportive an environment; they can also be less robust in the face of changing circumstances. (Unfortunate facts, since they mean that larger groups have a kind of self-sustaining, structural advantage relative to smaller ones.)

If you are considering non-US schools*, there are a lot of good ones to choose from; I think immediately of Utrecht, Oxford, Chalmers, Cambridge and Nottingham, but this list is probably biased toward British schools. Again, others will no doubt have more and better information.

* [I'm assuming you're from the US, since that's where one would usually find a liberal arts college called such.]

Question. Wouldn't it make

Question. Wouldn't it make sense to seek for a researcher or a research team whose work you like?


But as I mentioned in my post I don't think I'm far enough along yet in my learning that I can discriminate wisely. There are lots of projects that look like they would be cool to work on, but I think I'll be better prepared to use that criteria after I understand lambda calculus and type theory (at least). I'd like to be able to read a few PL researchers' papers and come close to fully comprehending them first (denotational semantics has already greatly helped -- now I know CPS is ;).

What about undergraduate?

I have a similar question. I'm currently applying to colleges (currently in highschool). Which ones are the best for functional programming and PLD/PLT? I'd prefer that they be in cascadia (westcoast of the US), but it's not really a hard rule in the case that there is some school which saturates the curriculum with such stuff.

It seems like all the good schools for such things are in europe / etc.

I just made that choice

I'm a freshman at Carleton College (a liberal arts college in southern Minnesota) who hopes to study roughly the same thing. We don't have the hugest CS department, but it seems fairly solid. One professor here has done a bit of research on functional programming languages, though there aren't a huge amount of courses about functional programming languages.

More to-the-point, Harvey Mudd, one of the Claremont colleges is supposed to be great for undergrads in computer science. Research goes on there related to programming languages, especially in language-based security, and there are advanced PL-related courses. For me, I wanted a place that would have good departments in non-technical fields as well (not to mention a better gender balance). I'm betting, along with the main poster, that a liberal arts education won't disqualify me from a good technical graduate school.

Good luck on your college applications!

Yeah, my stats teacher

Yeah, my stats teacher recommended Harvey Mudd. As mentioned in my reply to Kannan Goundan, UW is probably most likely for me.

Good luck on your college applications!



UW has a very friendly and world class cs department. You can definitely take grad courses as a ugrad if you're ready for the challenge (and one of my friends did exactly that with their PL courses - the PL/SE crowd there is a bunch of fun).

You may also want to consider the New England area: the diversity and concentration of students is high, and a lot of PL happens there. MIT, Harvard, Yale, Brown (I came out of the group which has a nice mix of ugrads & grads), and even NEU if you're super focused on PL (but who knows - maybe you'll take a neuroscience course and be blown away..). While there are a cluster of schools near UW and MSR, life definitely gets fun in the Boston area (also Tufts, BU, Brandeis, ... ) once you're ready to branch out. A bit further are UPenn and CMU which would also probably be eye opening experiences and have more theoretical PL than you'll find at most US schools (including UW). I'm finding the Stanford/Berkeley area fun, though there seems to be more of an emphasis on startups & industry than I was used to on the East coast.

Try to email some professors about a visit (they can probably set you up with a cs ugrad as well). Also, having good none-cs departments can be enlightening - even if you don't take excessive amounts of classes in them, your friends will, which can make life pretty fun.

Good luck!

careful with abbreviations

The other UW also has a nice computer science department, in particular in the area of databases.

Really, if you find a school in your area that is not particularly famous but has a professor you really want to work with go for it. You could be stuck at somewhere like berkeley doing nothing you like because nobody there is interested in what you are interested in.

ugrad vs grad

That's a little risky at the ugrad level for most folks. Working closely with a particular professor was formative for me - but he was in a very different field from the few I came in planning to focus on! Also, a ugrad education isn't typically just PL, as fun as it is. I don't want to get into this too deeply; pedagogy can be a time sink :)

I spend a lot of my time hanging out with folks from both (?) American UWs, (and Waterloo too, now that I think about it...). I'm pretty impressed by the OS folk from U. Wisconsin too :) OTOH, U. Wisconsin is also a little ambiguous - there are ~30ish campuses!

Anyways.. as you're posting... is there any location to try out Super Glue? I was dabbling a bit with mixing FRP with certain OO systems this summer and would have liked to have a more hands-on feel for your approach :)

Very exciting opportunities lie ahead for you...

Really nice to hear from a high school student here...nice to hear that "lambda" may be making its way to some h.s. students (admittedly advanced ones, way more advanced than I was in 1969-70, in my last year of h.s--our school had an Olivetti desktop calculator that _sort of_ ran a version of BASIC, badly).

An acquaintance of mine was torn a few years ago between going to grad school at CMU and at Berkeley. CMU had Dana Scott, though he was already semi-retired (as I recollect) and was probably not taking new students, and Berkeley was stronger in security, cryptology, and capability-based areas of work. And so this acquaintance of mine is now at Berkeley (David Molnar, a student of David Wagner's, whom some of you may be familiar with from either comments here or on the Capabilities and E programming language lists).

But for you, you have the wonderful opportunity to, for example, immerse yourself in a fantastic language like Haskell long before you are faced with undergrad classes in Java and C# or whatever the current au courant languages are.

Wow. I envy you. (The close match between mathematical notation, and notions of set-builder notation and list comprehension, and lazy evaluation ("let P be the set of prime numbers") is readily visible to bright high school students.

Just a year or so after high school I was studying point-set topology and convergence and compactness and all. And taking a FORTRAN IV ("with WATFIV") course I absolutely hated. Had I had any glimmer at all that there was a deep connection between topology and computation, that there was more to programming that learning BASIC or FORTRAN, that the work on denotational semantics, category theory, and topos theory was just hitting its stride in the 1970s, I might've gone into some kind of theoretical computer science or programming language theory work.

(I discovered Lisp and Scheme in the 80s, so not all was lost.)

By the way, you may find that a good background in pure math is just as useful as having a lot of undergrad compsci background. (And, in my opinion, the background useful would be more topological than algebraic, more about order relations, lattices, spaces, and locales. The work of Martin Escardo, Samson Abramsky, Paul Taylor, Peter Johnstone, Steve Vickers, and others, for example. Heavy stuff for a high school student, but doable a couple of years from now, when you've maybe had some exposure to point-set, or "general," topology, a little bit of analysis (the math kind!), and have gotten past the usual freshman courses in linear algebra and all).

For an undergrad, then, nearly any of the West Coast schools would be fine, IMO. UW, Oregon State, Berkeley, Stanford, etc. (Especially don't discount Stanford, just because it seems to be under-represented here on LtU in some ways. Besides McCarthy, it has a bunch of very famous logic folks, including those at CSLI. And Vaughan Pratt, and industry all around (absolute heart of Silicon Valley), and so on.)

Best wishes.

Further hope...

He's not the only High Schooler. Myself (as well as a couple of my friends) lurk.

Just thought you should know we're here, typically we just don't post.

Thanks for the

Thanks for the encouragement.

Like rollercoaster, I mostly lurk. I don't know enough about most of the topics to really contribute much. I have some fairly strong opinions about design, but most of LtU's content is understandably the theoretical underpinnings of PLD.

I've still taken quite a circuitousness route in getting here.

The BASIC bug got me for a few years (from around age 8 to 13), but that wasn't so horrible. Seems to be how most people get their start, so it probably isn't too horrible. I've also gotten wrapped up into C++, due to working on opensource projects written in C++. Actually I've probably dipped into most of the popular imperative languages. It's good 'practical' experience, anyway.

Haven't quite gotten as much of a survey of functional. I've been coding haskell on and off for about a year and a few months. Next up is probably Clean, Erlang, and Lisp. I might also dip into Ocaml - I've heard that the parameterized modules can do something like haskell classes. To me modules and classes seem to be nearly the same thing. A module is just a 0-parameter class... Regardless, first is to get my college apps sent off, and then get my haskell robot simulator off the ground :P

By the way, you may find that a good background in pure math is just as useful as having a lot of undergrad compsci background.

Yep. The good thing is that the C++ project (lib2geom) that I've been involved with for a year or two is math-focused. It's practical math, but gets pretty intense - it's the fairly fledgling field of computational geometry. This particular library is more of the combination of calculus, analysis, and geometry, though, as one of its main focuses is curves. Discussion with math phds is always valuable.

Thanks for the list of topics. I've studied category theory and graph theory to some cursory extent, as they seem to be fairly relevant. I'm definitely weak in topology, though. Perhaps I'll do a little wikipediaing about when I have the time and the want.

Really one of my main interests is the actual design of programming language. I have for a long time, though in retrospect I realize that a lot of my designs were really mostly different syntactically rather than semantic.

I do think this seems to be a good time to enter the field. While people admit that computer technology is a fast changing field, I don't think most really see how immature it is. At least, in my opinion, it's still quite its infancy. The separation of research and industry is certainly troubling, though.

I may apply to Stanford. Another guy at my school is. Then again, both his parents went to Stanford. He's also got a bit better GPA (probably because he doesn't stay up all night coding :P ).

One issue, is money. As University of Washington is in state, it's much cheaper. Ending college with 0 debt would be sweet, and possible with this route. There's no real reason, other than perhaps a difference in prestigiousness to prefer Stanford over UW.

What I looked at

When I was looking for a grad school I looked at:

  • How many researchers were doing work in the area.
  • What kinds of projects they were working on (check the programming languages group's website).
  • The paper listings from POPL/PLDI/etc for the last few years.
  • Each school's grad course listing. For example, I remember UW having several more PL-specific grad courses than average.


I'll probably go to UW, considering I live in Washington. Only problem is it's a little TOO close, but hey.

Hopefully undergrads can take grad courses. I don't really know how the system works...

Don't rush!

Michael, you are not in hurry. I do think that the standard classes will give you enough work. I hope my message goes through: I don't want you to discourage from pursuing your research interest just want to raise your attention that the most important thing in the first years is to pass your midterms and exams with a good result. It's not easy even if you are brilliant (I hope you are). But this is a prerequisite to go to a research career.

About research: when you are in, start an informal inquiry which professor/grad student is looking for participants in research projects and how are their person-skills. Sometimes it matters more how they handle you personally than how smart they are and how long their publication lists are.

And yes, find a mentor for whom reading Lambda the Ultimate is a plus!

Good advice, certainly. I

Good advice, certainly. I hope to not rush - I'd like to do some hobby stuff on the side, in addition to my courses. I'm not sure if I'm going to go for research or not. I'm mostly interested in PLD, in particular functional, DSLs, and 'rich' programming.

Rich is a term of my own invention, afaik. It has similar marketing characteristics as "functional", in that it's innately a good thing. It's basically the same thing as visual programming, but done in a more notational way. It certainly escapes the limitations of straight text, though.

So I guess it seems like research makes sense - you can't really sell a programming language, especially when it contains many new things. You'll practically have to pay people to try it. (Hmm, that might not actually be a bad idea..)

I always figured I'd go into industry, at least at first. I'm not sure if I want to use my peak productive time on that, though.

What industry may look like in 5-7 or so years...

You mention expecting to go into industry, at least at first. Not sure whether you mean after a B.S. or an M.S. (or even a Ph.D.), but I expect you mean you think you'll try industy for a few years after a B.S. or M.S. and then see if you want to pursue a Ph.D. and academic research.

This may mean 2013-14 or later. Should be interesting times.

By then, most "microprocessors" will likely be running at least 16 independent, full-fledged cores (quad cores are already here). Specialized machines may be running hundreds or even thousands of cores. (This situation is reminiscent of multicore and even thousand core machines in the 1980s, including the Connection Machine, the HEP, and various other machines. The difference is that most of those SIMD or MIMD machines were relegated to varoius niches, such as simulations, finite element analysis, etc. None were ever widely used.)

By the time you get out, even everyday machines will contain dozens or even hundreds of cores. One likely approach is transactional memory (TM) and its software version (STM). Issues of management of _time_ (order, precedence, partial orders....) I think will be crucial. Security issues will be paramount.

Exciting times if you enter industry around 2015.

Tim Sweeney, of Epic Games, has written about the "next mainstream programming language," here and in papers. The game industry is already faced with maintaining relatively error-free interactions with hundreds of thousands of "actors" and billions of operations per second. This will all increase sharply in the next few years. He argues for functional programming, with some modifications or issues to be resolved, so this might fit closely with your stated interests.

Have fun.

My thoughts exactly :)

I agree with you, I hope that in the near-ish (not so soon that I can't pitch in!) future, such things will come about.

My vision of a future computer, at least how I would design it, is one in which all the elements / peripherals of a computer are specialized processors with some general execution capability. Modern GPUs, with their support of generalized shader pipelines, are a prime example of this. I think this combination of logical parelization and specialization could for more than enough power. That personal computing tasks require as much power as they do at all is boggling.

Of course, such a system would require vastly different techniques for programming. Something like functional programming is required - something that better represents the operation of the program. Being able to adaptively distribute and consolidate computation would be very cool. Composition and laziness could work to allow cleaving computation into independent bits. For example:

main = putStrLn . concatMap (show . (+5) . read) . lines =>> readFile f

Lets say the file is on a cd. The drive might be delegated the code (lines =>> readFile). Some intermediary processor could handle the concatMap (show . (+5) . read), and finally, the graphics processor would handle the putStrLn. In other words, this is a simple example of pipelining. More complicated collaborations are certainly possible, though.

Your scenario of many-core may be more likely, considering the way industry works. It tends to prefer just slapping on more power rather than considering a different design. I used to think that something like an FPGA, where instead the cells are general, though micro, processors would be quite effective.

Specialized processors just don't seem to have a chance...

"Your scenario of many-core may be more likely, considering the way industry works. It tends to prefer just slapping on more power rather than considering a different design. I used to think that something like an FPGA, where instead the cells are general, though micro, processors would be quite effective."

Well, I worked for Intel (!) from 1974 to 1986, and I saw how "deviations from the main course" were unacceptable to industry. For example, the 432 processor family. (The Wikipedia has a good summary.) While performance of the first generation was definitely an issue (partly due to the infamous "everything an object" overhead, as Dave Patterson's scathing critique described so clearly), the architecture just got very little "traction" in industry, which basically just wanted more generations of the x86 and Sun workstations.

This is somewhat off the topic of PL research, but it partly relates to the popularity game, and even to Lisp. For example, I expected Lisp machines to do well, with the productive editing, debugging, and maintenance environment, and a shift to higher-level languages as the "cost of programmer/cost of machine" situation inverted, from machines costing 5 times what a programmer cost per year to the exact inverse.

And yet this didn't happen. Lisp machine companies (Lisp Machines Inc., Symbolics, even a division of Texas Instruments) failed (this was the mid to late 1980s). Sun workstations were the de facto standard, along with C and Unix. Office workers and managers mainly used DOS on x86 machines. C++ became the migration path to "higher level languages."

Even alternative microprocessor architectures, like the DEC Alpha, H-P PA-RISC, and National 32032, got little acceptance. Eventually DEC was acquired by Compaq, then Compaq was acquired by H-P, and bits and pieces of the Alpha and PA-RISC got sold off, absorbed into other projects, or "end of lifed" in some continuing product sales. Ironically, H-P teamed with Intel on the Itanium, another effort to launch an alternative to the x86.

So far, it does not seem to be setting the world on fire. Some nice features. Some use by banks and heavy users of transactions, where uptime is crucial. But the gains in the x86 family have kept it competitive (winning, actually, in numbers of processors sold, obviously).

Are there connections with programming languages? I think so, and am reminded of Richard Gabriel's "worse is better" point about C vs. Lisp.

Lots of connections with elegance vs. crufiness.

Point is, there are specialized processors out there. Graphics chips are a perfect example, with their own programming approaches. Lots of other special-purpose chips, like DSLs in programming. But it's unlikely any of them will become mainstream, so PL approaches will likely focus on the more popular chips.

And I expect it's nearly certain that these will be multicore (> 16 cores within several years) versions of the x86 basic architecture.

Unix pipes as one of the biggest uses of the FP style

I mentioned the "inversion" of programmer cost/machine cost and the (surprising to many) wide use of C rather than much higher-level languages (this trend mainly starting in the 1980s).

But I should've also noted that Unix users had a power FP-like language which they often used daily. Namely, the output of one process (e.g., grep) could be unidirectionally piped into the input of another process (e.g., cat), and compositionality applied. (I believe referential transparency was important, in that grep would have parameters, but would always yield the same output when presented with the same input (including the same parameters for the grepping).

From an article,

"If you are not familiar with pipes, however, you should study this feature. Pipes are elegant implementation of coroutines on OS shell level and as such they allow the output from one program to be fed as input to another program. Doug McIlroy, the inventor of pipes, is said to point out that both pipes and lazy lists behave exactly like coroutines."

So, partly the increased power of 1980s processors and Unix _was_ being used in a high-level way. Much like the way a lot of today's programming is actually done with scripting languages, calling in many cases lower-level C++ or C# or whatever routines for the fast stuff.

(Interestingly, I a few years ago I saw that Doug McIlroy was teaching a class at Rutgers, I believe, and was using Haskell for the class.)



Any suggestions for nontraditionals?

I have strong interest in (among other things) PL theory/implementation, formal methods, and logic. I'm several years out of college (computer science/philosophy degree, good grades from CWRU), and have a corporate programming job that does not need much from those topics.

Does anyone have any recommendations or suggestions for pursuing graduate education in this field, with the added constraints of maintaining a family/house/job? I know I want to investigate and expand the commercial applications of things like formal verification, static analysis, specifications, etc. -- but I don't have any contacts, references, or c.v. in this area.

Should I 1.) just look for a school under these greater constraints, or 2.) look for opportunities to learn and apply my academic interests in my nonacademic employment?

Doing 2. could take a lot of time and possibly bear no fruit, but it has the advantage of maintaining income. However, if that sort of experience wouldn't likely affect the outcome of grad school applications, it would not really be worth it to wait.

I could also take a few more mainstream (likely not PLT/formal methods-related) graduate courses on a non-degree basis in the interim. Would this be more or less effective than pushing the envelope at work?

Thanks for any advice.

I'm not sure if course work

I'm not sure if course work will be so useful at your level. Its best if you can work on a part-time masters with a thesis, but most part-time programs unfortunately focus on course work.

If you want (2), you could try applying for a job with a static analysis tools company like XXX*, they are always looking for good people who are interested and willing to learn. Honestly, there aren't so many people trained in this area, and not many more who have the potential to be trained in this area.

But what are your real constraints? Family, you need a job, but are you willing to relocate? If you want on hands experience and you aren't in or can't relocate to the Bay Area or Boston, it might be difficult.

* See Google for a list of companies in this area. One that I personally know of is Coverity, but there are many more.


But what are your real constraints? Family, you need a job, but are you willing to relocate? If you want on hands experience and you aren't in or can't relocate to the Bay Area or Boston, it might be difficult.

That's pretty much it: I need an income above the standard student stipend to support the family, and I'm not willing to relocate at this time. Even if I were to get a east/west coast job in the field despite having only superficial background, it would be a rather big gamble.

Aside from this specific aspect of my intellectual life, I'm perfectly happy here and have no interest in moving.

Your case will be very

Your case will be very difficult since you are happy (easier if you are habitually depressed, thoroughly unsatisfied with your life!). I'd recommend doing a fun project that breaks some kind of barrier. Imagine a new programming environment/language/whatever. If your interest is in formal verification, build a tool that works! You will have to sift through lots if literature, self learn, and experiment, possibly re-inventing many wheels. But in the end you would have learned more about what you want to do.

Honestly, universities only help so much mainly by giving you access to people to look at your work and helping to pay the bills. 90% would come from you.

nontraditionals, degrees, and research

Several programs around the world provide support for excellent non-traditional students to pursue part-time, (even sometimes remote), higher degrees in fields relating to PL, formal methods, etc.

Contact academics that are performing research in which you have a strong interest and are teaching in quality institutions and make a (brief, well-reasoned) case---you might be surprised what you discover.

Contacting academics

I am lucky enough to live in a city with a large institution that has a small research group in this specific field. I've read their course catalog and a little about their current research, but the classes are at traditional times and not really workable for me.

To see if I understand: you're suggesting that I contact a researcher directly (rather than through an admissions or departmental office) about my interest in their research and academic goals. I should mention the constraints preventing me from a traditional full-time course of study, and ask them what options are available for furthering my own education and inquiry in their area.

Frankly the degree is not that important to me, though I do have a strong interest in teaching. I can be an autodidact to a certain point, but to really learn a subject well I need dialogue with peers and the focus that specific long-term projects can bring. That's why I'm interested in re-entering the academic community.

Yes, contact them directly

You will find that academics with non-traditional backgrounds (ie those who did 'something else' before academia) really value self-motivated students, and those with real industrial experience, yet not afraid of some real math. This is certainly true for me, and also of many of my colleagues who followed a different path to their current academic post [like Joe!]. Just make sure that when you do contact them, that you have done your research properly, that you know what this person is about, which usually their web page(s) and web presence will let you know. I know I get a fair bit of spam from students who send form letters to hundreds of people just hoping for a 'bite' from any prof that will help them get out of country ZZZ.

Re: Contacting academics


the main thing is whether you have time for this, beside taking care of your family. Time, weekly. Constant effort and attention is important. Another is if you can make a "contract" with a proper supervisor - e.g. do some programming for _her_ project in exchange for professional advice. A proper supervisor is of course knowledgeable of the field, but what is more important that she can identify the dead-end paths you encounter and helps you to concentrate your efforts. A student on his own can waste his attention to too many things.

My situation is somewhat similar to yours. I had to stop my research and I do perl programming for a living now. I am willing to read CS books. Problem: no real theorem proving/formal methods expert in my neighbourhood and I do not want to relocate to a foreign country.

If you want to have peer-to-peer support, reach me by e-mail. My username is "posta", my domain is "". I'm a bit versed in Isabelle, not to say I'm an expert.