Want to do undergraduate research, but CS dept is weak...

I don't know if this question is within the bounds of LTU, but this thread is kinda close so I think it might be okay (if not please delete). My situation is I'm an undergrad, and I want to go on to a good ph.d program and eventually do research and teach. I'm interested in domain specific languages, parallizing compilers, and PL theory. I was hoping some of the academic folks here could advise me.

My problem is that the CS dept at my school is very weak in plt. It's a decent school (I'd say middian level state univerisity), but the dept strength is in networking. From the thread above I've read some documents about grad school, and as you'd expect, to get into a good ph.d program it's good to have some research experience as an undergrad.

So given my situation, does anyone have any advice for me? Switching schools isn't an option (right now) due to my work as a legacy system maintainer paying too well to leave just yet. I spoke with the Dept head and he didn't have any ideas. Thanks in advance...

Comment viewing options

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

On topic

So long as the discussion is on PLT research and not education policy in general...

Books, summer schools, study abroad?

Well, there are a number of good books that would make for nice starting points (e.g., Pierce's Types and Programming Languages, abbreviated TAPL, and many other ones referenced hereabouts on LtU). Perhaps you have already done some reading along these lines if you're interested in PL theory.

But books alone may not satisfy (depends on your learning style, etc.). So perhaps once you have your feet wet you could attend one of the several summer schools which are regularly held on topics surrounding PLT. There is one held annually near me in Eugene, Oregon (see this link for the 2005 instance; tweak the URL for 2006 topics). And I recall that one or two are being held somewhere in England or Europe this summer (I can't find the links right now, but maybe someone else can post somehing).

Unlike regular conferences, the summer schools are aimed at providing a foundation in an area, not just the latest research. (There might even be support available, as a scholarship or even from your own department or school.) They are admittedly pitched more at the graduate level than undergrad, but if you are bright and motivated, you could probably benefit a lot, given some prior preparation. And there are the contacts you would make, which could be valuable in finding a graduate position later on.

FInally, many universities will allow you to take some credits at another school, often in association with study abroad. There is often support available when foreign travel is involved. The usual semester isn't a lot of time, but it could help get you started and again provide connections.

Good luck in any case!

How's the Math Department?

I never pursued CS academically, but I'm guessing that many Ph.D. programs would look very favorably on any applicant with a strong background in discrete mathematics. In particular could you take an independent study in lambda calculus and combinatory logic? The latter is not research but nonetheless makes much the same statement.

Volunteer to Conduct PL-Research for a Nonprofit

You could volunteer to conduct PL research for a nonprofit like The Institute for End User Computing, Inc.

We could help you identify an area of interest and guide you through some key readings with an eye towards your producing some sort of Open Source code for which you'd be prominently credited. So it would be a mix of reading and programming and while there would be no stipend, there wouldn't be any tuition either.

If interested, send email to: info@ieuc.org

Off-topic

Peter, I would personally appreciate it if you could refrain from such postings here. This is far, far outside any reason anyone reads LtU.

[Edited.]

Arguably On-Topic for The Thread

I wouldn't have posted but for the facts that:

  1. The student asked for advice first, I didn't initiate the thread to promote my organization.
  2. Ehud already posted that the original question was on topic.
  3. The IEUC is a legitimate 501(c)(3) nonprofit incorporated in New York and recognized by the US Internal Revenue Service with a Board of Directors, a high caliber Advisory Board, and many other volunteer participants besides myself, who I won't list here lest I get flamed for further pomotion.
  4. The IEUC strives in part to help students, like the poster, to further their study through mentoring and volunteer opportunities as I concisely described in my reply which was intended to be informational and not promotional in nature.
  5. Moreover, I was giving general advice when I suggested volunteering with organizations 'like The Insititute....' so as not to suggest that The IEUC was the only such organization the student might want to approach.
  6. At http://lambda-the-ultimate.org/node/1587#comment-19173 Ehud had previously opined:
    • announce an ongoing research project related to LtU topics and to invite interested LtU members to participate? (e.g. a tasteful one time recruiting pitch to announce the formation of working group on a language related topic to take a discussion offsite until some substantive results are in to be reported back to the community.) - A short post is fine.

    A sanctioned exception to the usual guidelines under which I felt my reply fell, when taken in the current context. This was also why I offered to host a working group on publication formats in my earlier post today.

In any case, I value this community and have truly been posting in good faith, but if it is going to cause such friction, I will leave my organization's work at the door and go back to reading quiety.

So Anton, please take this as a personal appology for ruffling your feathers and possibly running afowl of the current consenus on LtU Policy if your interpretation of my comments is the dominant view of the community.

I'm not an Admin...

...but the immediate question is about "PLT - Programming Language Theory" from the standpoint of an academic use of the term PLT. Now IEUC's goals are high and probably do touch on some areas that concern PLT, but as far as the question goes, I don't think it to be a satisfactory substitute for learning from the likes of Dijkstra, Harper, Reynolds, etc...

The immediate topic is not about how to get practical experience or about what research projects are worthy. In that light, I don't think it's on-topic.

I think Chris is right as

I think Chris is right as regards what might be fruitful for the original poster. Peter's post was short and to the point, so while I think it wasn't a good suggestion in this context, I didn't object to it on principle.

Great tips...

thanks! I have been reading TAPL in fact, and the idea to do independant study into lamda calculus and/or combinatoric logic are great too because the prof at my school who is the 'mathematical logic' guy is a great teacher. Looking at the IEUC page I saw one of the things you guys are into is program visualization. This is something I'm interested in as well because of the millions of lines of legacy code I deal with at work.

One idea I have is to try and get one of the software engineering profs to supervise me working on legacy system reengineering. I could work some pl stuff in there; restructuring and visualizing jcl and cobol for example. From the papers I've found that's been pretty well worked out in the 80's and 90's though so it wouldn't be new research.

Autodidactism and its limits

I'm almost entirely self-taught in CS (I studied philosophy in grad school and as an undergraduate), though I am now a lecturer at the University of Manchester in CS. It is clearly possible to overcome institutional and personal obstacles, but it helps to recognize what they are.

If you want to go to a top school (period) then not coming from a top school is a barrier (period). Top grad programs get a ton of people with exemplary transcripts with great letters having studied at top schools. So, you are starting at a disadvantage. That your school also lacks a strong presence in your favored area is extra bad because you lack connections that can make the difference between being dismissed and getting some attention. Grr. That sucks and is out of your control.

However, there are things in your control. Summer schools, if good, esp. with people you might want to work with, are great. Conferences and workshops are worth going to even if you don't have a paper, but if you get one in, so much the better. Email people! Or comment on their blogs. Intelligent discussion of people's work is engaging, and the more people know you the better off you are come application time.

One thing that is well in your control is your performance in classes and on the GREs. A good research record can mitigate a checkered transcript (I know an applicant right now for whom this is true) but it's better to have a great transcript with research as a bonus. Just about all of the grad students I worked with at the University of Maryland, College Park --- who were fabulous students --- lacked research chops. Indeed, I often had the | "time to start 'thinking researchly'" talk.

So take interesting in relevant classes. Do well in them. Take a bunch of math. Drew McDermott's regret stands out (in the context of AI):

I myself would definitely have taken mathematics more seriously when I was a student. In 1970, there was this idea that computer science was a paradigm that would supplant mathematics, but it's clear now how bogus that was. I wish I had taken fewer computer science courses and more mathematics courses as a student. Save the AI for grad school.

I don't know for sure that this is true of PLT, but I wouldn't be surprised. Logic (advanced logic) is good. Algebra and category theory (or as far along that path that is feasible) are great. Don't neglect stats and calc. I wish I had done much more of all these.

Learn your area of interest, i.e., the people, the projects, the classic papers, the latest buzz. You don't have to go nuts there, but a good synoptic view helps. Indeed, it's sometimes better to have a good grasp of how things fit together than to have already done a lot of work in some narrow way.

Top schools are almost by definition a lottery. Which sucks. On the other hand, it's definitely not hopeless. Doing interesting research is one way to buy more tickets (and its fun!), but there are other ways too.

(This is all for the US. The UK, as I'm discovering, is really quite different! Though still, people don't have to have done research. There is just an expectation that they know specifically what they are interested in. There's rather more freedom in the US, as far as I can tell. Take it all with a grain of salt as I was never involved directly in US CS admissions, and it can vary enormously from school to school and from year to year.)

Good points. I tend to agree

Good points.

I tend to agree with most of what Bijan wrote. It is important not to underestimate the obstacles.

I don't know how

I don't know how institutions other than my own handle admission decisions, but I agree with bparsia's coursework recommendations. I can state with near-certainty that I would have been better served as an undergrad by taking abstract algebra than I was by probably any two CS courses. A good algebra background is essential for a lot of PL work (and work in many other subfields). Taking a number of courses where you learn to write good proofs will probably also help you prepare for some of the stuff you might wind up doing in PL.

Plus one for autodidacts

The two courses that I regret not having under my belt are abstract algebra and elementary logic. For some reason my undergrad Comp Sci dept overlooked these. These are crucial for PLT research, and it has been a bit challenging for me to catch up on my own. PLT is dominated by mathematicians and logicians, so you need to learn their langauge.

However, there is an alternative path which hasn't been discussed much here, that is the software engineering path. At Microsoft for instance we have two separate divisions who work on programming languages: Developer Division and Microsoft Research. "Dev Div" is more interested in people who have practical knowledge and experience with writing and developing compilers and designing DSLs. "MSR" on the other hand is more interested in solid academic foundations and publication experience.

If you are interested in the academic path as opposed to the engineering path, then you need "research chops" as bparsia says. This is more important than what specific department you do it from. You want a supervisor who can help you learn to think and write in a scholarly manner. This can be mathematics, philosophy, or of course computer science. The subject matter of PLT I believe can be easily be picked up, once you have the proper foundations, by simply studying a few dozen papers.

Chops?

So what are research chops? Is that one of those highly technical terms people throw around sometimes? Joking aside, is that the ability to know when a line of inquiry would make a good, publishable paper, and when another line of inquiry may be a waste of time?

Respect the chops!

It's not just that ability, and I would take "publishable" as a rough proxy for "worthwhile", but yes, that is a key ability.

A professor explained to me, once, the structure of (one aspect of) their (undergrad) math program: Calc for non-techies satisifed the math requirement. Calc 1 through Calc 3 (multivariable) were designed to get in the basics and provide enough background for the science/technical majors. These were all heavily "algorithmic", in that they primarily taught people how to compute rather than how to prove theorems. The linear algebra class was the testing ground, with a serious emphasis on "thinking like a mathematician". There was still a good bit of algorithm style work in the class, but there was enough theory to help find the people who might make good (and happy) math majors, and to start them down that path.

So, it is not unnatural to start out following algorithms (in novel circumstances), then following proofs, then generating proofs for known solved problem, then generating proofs for given unsolved problems, then selecting known unsolved problems, then figuring out new problems...this isn't a strict "progression", but it's often how people learn. Being able to generate proofs for (given) unsolved problems makes you at least a really handy research associate. Being able to sort through the more or less known unsolved problems and pick out the ones that one can likely solve (given recent advances) or would be worth solving (e.g., because they would help something else), also makes you at least a really handy research associate etc. etc.

Having all these skills to a high degree makes it very likely that you will do good, probably excellent, work over your career. If you can write things up well, that's really helpful too. Different people will have different balances of skills and traits. Getting along with other folks well is valuable because it allows you to balance your weak areas with other people's strong areas. (The specific modalities of collaboration and interaction vary enormously from field to field.)

To get a PhD (in the parts of programs I've been involved in) you have to demostrate that you can at least select an interesting area, formulate a "worthwhile" problem in that area, and solve it (or at least advance toward a better understanding).

(Of course, cracking a known, hard, sexy problem will do the trick. Deciding whether P = NP is more than enough :) But if someone came to me and said, "You know, I'll have the best thesis topic ever!!! I'm going to show that P=NP!!!! Then they'll have to graduate me!" I would have a loooong talk with them (presuming they were serious). Hard open problems can be good motivators, but one needs to have realistic goals and good contingency plans. Ideally, even if one's research doesn't solve the problem you set out to solve, it still has taught you (and the rest of us) something new and interesting.)

So, to get into a PhD problem, you have to convince the admissions committee (and typically your future advisor) that you will, eventually, do a PhD (and in reasonable time). There are other things as well (e.g., that you can publish; that you are stimulating to work with; that you won't drive everyone nuts; that you can do the coursework; etc.), but most of it can be managed a bit easier than the Big One. Failure to finish students, or to have students take forever (and I am a forever taker :(), is bad for a professor and for a department. (Often directly bad in that support from dean's and the school at large can strongly depend on graduation and placement records.)

Hmm. This isn't just an answer to your question, MTaylor. But I think the kind of considerations that goes into a throwaway line like "She's got great research chops" is actually enormously complicated and contextual. Anyhoo!