Friday, September 24, 2010

Harvard Computer Science is hiring

We are hiring new faculty in CS this year at Harvard - applications encouraged! See the job posting below.

Tenure-track Professor in Computer Science
Harvard University

The Computer Science program at Harvard benefits from its outstanding undergraduate and graduate students, an excellent location, significant industrial collaboration, and substantial support from the Harvard School of Engineering and Applied Sciences.

We invite applications for a position as a tenure-track professor in Computer Science. The appointment is expected to begin on July 1, 2011.

We welcome outstanding applicants in all areas of computer science. We are particularly interested in areas related to machine learning, probabilistic modeling, and artificial intelligence. In terms of applications, areas of interest include computational science, engineering, or the social sciences. We encourage applications from candidates whose research examines computational issues raised by very large data sets or massively parallel processing.

Candidates should have an outstanding research record and a strong commitment to undergraduate teaching and graduate training. Applicants must have completed a Ph.D. by September 1, 2011. Information about Harvard's current faculty, research, and educational programs is available at

Candidates should send, ideally as a single PDF document, a curriculum vitae, a list of publications, a statement of research and teaching interests, and up to three representative papers to the following email address: In addition, candidates should have at least three letters of reference sent to the above address.

Alternatively, material may also be sent via surface mail to:

CS Search Committee
Harvard School of Engineering and Applied Sciences
Harvard University
Maxwell Dworkin 153
33 Oxford Street
Cambridge, MA 02138

Applications will be reviewed as they are received. For full consideration, applications should be received by December 1, 2010.

Harvard is an Equal Opportunity/ Affirmative Action Employer.
Applications from women and minority candidates are strongly encouraged.

Saturday, September 18, 2010

Getting started as a PhD student

Since it's the beginning of the semester, I've been thinking a bit about the common advice that I give to incoming PhD students. Say you're a new PhD student in Computer Science. What are the main things you should know when getting started? Here are some of my favorite tidbits; feel free to chime in with your own in the comments.

(Turns out that Margo Seltzer blogged on the same topic this week too! Great minds think alike.)

This year I have two new students -- Amos Waterland and Youngjune Gwon -- I'm kinda bummed that I'm on sabbatical and can't interact with them as much as I'd like, but they will be busy with classes anyway :-)

Don't let school get in the way of your education. My advisor, David Culler, was fond of this misquote of Mark Twain, but it's true. Classes and program requirements are important but what is far more important is becoming an expert in your area. If that means taking fewer classes each term so you have time to do some real research, so be it. Harvard's PhD program is course-heavy and I often advise my students to ignore the requirements on paper and spread the classes out over several years, taking no more than two "real" classes at a time. Otherwise they would get nothing done for the first couple of years of the program.

Just dive in and have no fear. I often liken starting a research project (or career) to wandering into a dense jungle and blazing a path -- ideally a new path (but sometimes the jungle has overgrown since anyone wandered in your direction). There's only so much you can learn standing outside the jungle looking in, or reading about it, studying it, pondering it, whatever. I also feel that you can't really understand a problem until you've tried to solve it, even if your approach is somewhat naive. So rather than sit around reading a gazillion papers, just dive in and start doing some research -- anything -- even if you think it might be a dead end. Half the time you discover that something you thought would be easy or uninteresting actually leads to a bunch of open problems once you get beyond a superficial understanding of the area.

When I started on my thesis, I spent a lot of time reading and talking and thinking before writing any code, and at one point convinced myself that my project idea was stupid and not worth pursuing. (Whether this is true or not is still open for discussion.) Finally I sat down (during the sessions at OSDI 2000) and pounded out a simple prototype to test my ideas.

Don't read too much (at first). Obviously a huge part of grad school is reading and reviewing papers, but the problem with reading too many papers (especially at first) is that it can make it look like all of the interesting problems have already been solved. I've seen more than one grad student get into a rut because they read too many papers. Certainly you should never read anything from the 1960's or 70's or you will realize that it all has been done before -- by Real Programmers who had to code in assembly on a trinary architecture with sixteen levels of virtual address space segmentation and only two registers -- but I digress.

There is a real advantage to the Zen Mind approach of jumping in with your gut instincts about a problem and not worrying too much if you are treading familiar ground. At some point -- say 2 or 3 months into a project -- you should take a step back and compare your approach to what has come before, and correct course if necessary. Arguably all great systems projects are just reinventing ideas and reevaluating assumptions in light of changing technology trends, but don't let that stop you. I made my career that way, you can too!

Keep track of the papers that you do read. Come up with a good system for tracking the papers you have read, need to read, and take notes on them that you can easily reference later. Printing them out and scribbling in the margins is OK, though there may be more environmentally-friendly approaches. I am a big fan of the Mac application Papers, which is like iPhoto for PDF files. Mendeley, CiteULike, and Bibdesk offer similar functionality. In grad school I just kept a huge text file of every paper I read and my notes on it. When it came time to write my thesis, this was invaluable for putting together the related work list (same for papers that I wrote).

Finally, take a lot of notes. A couple of my students have the habit of coming to meet me empty-handed, which is a problem when I give them pointers to related work or ideas to chase down, which they really should be writing down. (Hell, I'm never going to remember what I told them from one week to the next, so they need to keep track.) I find it really helpful to maintain a group Wiki with meeting notes where I can go back and see what we were talking about week to week.

Thursday, September 9, 2010

So, you want to go to grad school?

Every year I am approached by students asking about grad school in Computer Science. I generally sit down with them for an hour or so and go over all of the details of why you should go, what the tradeoffs are, where you should apply, what it takes to get in, and so forth. I figured it would be a good idea to write some of this advice up in a blog post so I can capture it in a more permanent form.

In this post, I will talk about why to do a PhD in Computer Science, and why not to do a PhD. Assuming you've already decided to go to grad school, I've blogged previously about how to get in. Later on I'll blog about where you should apply.

Masters vs. Ph.D.

First off, when I talk about "grad school," I mean doing a PhD. Many students ask me about doing a Master's degree after college. I don't generally recommend students from good CS programs do a Master's in CS, for several reasons: (1) it's expensive, (2) you can learn the same material as an undergrad, and (3) doing a Master's isn't useful for deciding if you want to do a PhD -- it is a totally different experience. M.S. programs generally require taking a lot of classes, so they are not at all like being a PhD student (where the focus is on research). PhD programs don't generally care whether you have a Master's when you apply; in fact, some schools seem to prefer taking students straight out of their undergrad degree.

The only cases I recommend doing a Masters are for students that aren't quite prepared to get into a top-ranked PhD program, for example, because their undergrad major is in something other than CS. (Note that if your undergrad major is in an area closely aligned with CS, such as engineering, math, or physics, or you took a lot of CS classes despite majoring in something else, you probably don't need a Master's.) A Master's can also benefit students coming from foreign universities. Doing a Master's at a good CS program in the US is a good way of getting a letter from a well-known CS professor to help you get into a PhD program.

Why do a PhD?

Of course, this is the most fundamental question. I'll try to articulate the pros and cons below. First, the pros:
  • Lots of freedom. PhD-level research is all about defining a problem, solving it, and convincing everybody that your solution is a good one. Half of the challenge of doing a PhD is deciding what problem to work on. It is really about carving out your own niche in the field.
  • Working for yourself. Once you have a PhD -- and even during the process of getting one -- you are able to be your own boss. Rather than working on someone else's vision, you are the one to define the vision. This is especially true if you pursue an academic career after grad school, but is also the case in many industrial research labs. Typically, people with Bachelor's and Master's degrees aren't afforded so much freedom. 
  • Working on the hardest problems. PhD research is about opening up new avenues of enquiry, and working on problems that the rest of the world hasn't even articulated yet. If you do it right, you can have tremendous impact.

Why not do a PhD?

Of course, doing a PhD is not for everybody. I have seen quite a few students enter a PhD program, spin their wheels for years on end, and leave without finishing their degrees or doing much of anything. I've even see people get a PhD without making a mark on the academic community, just barely doing enough to get a thesis signed off by three professors (this is easier than it sounds). These people shouldn't have done a PhD at all -- they would have been better off going straight to industry, making a lot more money, and probably being much happier in their jobs.

The only reason to do a PhD is because you love doing research. If you don't love research, don't bother -- it is not worth the time, money (in terms of opportunity cost vs. making a real salary in industry), or stress. Doing a PhD is stressful, if you are doing it right -- you are in constant competition with other academics to publish your results in the top venues, to make a name for yourself, to get recognized. If you harbor ideas of lazy days sitting in the coffee shop pondering the universe, you are dead wrong. (You can always approach a PhD this way, but you will probably not be very successful.)

"But," you say, "I don't know if I love research -- I've never done any!" Then why are you considering doing a PhD at all? The only way to find out is by doing research, preferably as an undergrad. If you screwed up and graduated before doing research, try to find a research assistant job in a professor's lab, or do a Master's (see above). Be warned that most Master's programs are very course-intensive, so you will need to work extra hard to do some research on top of the courseload.

Another downside to the PhD is that is it extremely unstructured. This can drive some people crazy. The nature of research is that it is open-ended, and there are often no clear guideposts as to what you should be working on each day. Also, your PhD advisor may or may not mesh with your personality -- they might be too hands-off, too hands-on, out to lunch, too stressed about getting tenure, etc. Your experience in grad school will depend a lot on how well you get along with your advisor. (Let me take this opportunity to apologize to all of my current and former students for what they have to put up with.)

Doing a PhD can take a long time. Nobody finishes in four years. The typical time to completion is around five or six years, but there is a long tail -- I reserve the term "paleo-student" for someone who has been at it more than 10 years. See the Taulbee Survey for some data. The time to finish your degree can be taxing, since all of your friends have already gone ahead and gotten married, had kids, bought a house, etc. while you're still living in squalor with four roommates who haven't bathed in a week. Eventually your parents and loved ones start wondering what the hell you are doing with your life. The brilliant comic strip Piled Higher and Deeper uses this as a recurring theme. My advisor used to say that "doing a PhD costs you a house," which is just about right if you consider the amount of money you could have made being in industry for the same amount of time.

So, should you do a PhD, or not? If you think you are up for it, you can always try it for a couple of years, and if you dislike it, go get a job in industry instead. Unfortunately, it doesn't quite work the other way -- moving from industry to grad school is much harder.

Taking a year off

A lot of students tell me that they plan to get their bachelor's degree, work in industry "for a year or two" and then apply to grad school "later." If you are serious about going to grad school, I do not recommend this approach. In my experience, it is quite rare to make the jump from industry to grad school. First off, industry pays so much better than the PhD student stipend that it is quite hard to make this transition. Also, to get into a top PhD program, you need good letters from CS professors, and letters from industry don't really count. After you've been gone for a couple of years it's hard to get those stellar letters from the professors that may have loved you back when you were in college; newer, brighter, more energetic students have taken your place and you are long forgotten (although maybe Facebook will change all that). Industry experience rarely helps a graduate application, especially if you're some low-level engineer at a big company writing tests all day.

That said, taking time off after college can be a great experience. I took a year off doing research at different universities (University of Cambridge, University of Glasgow, and Vrije Universiteit in Amsterdam) after finishing college but before applying to grad school. It was a great experience and it bolstered my grad school applications since I stayed within the academic sphere.

Another approach is to get into grad school and then defer admission for a year. Most schools will let you do this (although they may grumble a little, or even make you re-apply, although this is usually a formality).

Startup Life: Three Months In

I've posted a story to Medium on what it's been like to work at a startup, after years at Google. Check it out here.