This page is inspired by an email that I received in late 2007. Below
is my (slightly altered) reply. This page is targeted to students
thinking of attending graduate school in the US in general and those
studying with me in particular.
Good students are hard to find. Professors truly enjoy
working with motivated, hard-working, dedicated students. Following
the advice below can increase your chances of getting accepted to a
particular program and having a successful working relationship with
your advisor.
If I don't know you personally, professionally, or I did
not have you as a student in my class, then I will likely want to see
how you handle a minor project to assess both your technical ability
and diligence, as well as some other intangibles like creativity and
maturity. When we embark on these projects, you must know how to ask
questions and help yourself. I know that you're in school to
learn, but there is some basic knowledge that any PhD student should
have (or quickly acquire by themselves in a semester). This includes
a working knowledge of some programming language, an ability to use
CVS, and an ability to read documentation and install Unix programs.
You should be able to handle a command line.
A good student is honest, logical, curious, creative,
and hard-working. Technical brilliance is almost always a bonus; if
you have the other qualities, then you can absorb the amounts of
knowledge necessary to help you make those brilliant
insights. Excellent students have to be comfortable reading and
understanding dense, technical English text. An advanced
understanding of subtle English prose is particularly
valuable; papers are written by largely technical people for whom
English may not be a first language: reading a paper is sometimes a
matter of understanding what the author meant to say rather
than the words on the printed page.
Excellent communication skills are a must.
If English isn't your native tongue, or you're shy in
front of poeple or hate public speaking, then you need to learn how
to do this. Most universities have a writing program to help
you. Speaking English, especially if you're a non-native, to
everyone, always (and this includes your friends of the same
nationality) is not only polite to those around you, it helps you
become conversational in the English language. If your advisor
cannot understand what you're doing, then you might be solving P=NP,
but your advisor
won't know it, and he won't know how to promote what you're
doing. Finally, read a good book on technical writing. "Writing
for Computer Science", by Justin Zobel is a great start.
One of the most important things you can do is decide
whether graduate school is the best choice for you at this stage in
your life; maybe an industry job, a government job, a thinktank,
non-profit organization, going into the PeaceCorp, or joining the
military is the right move for you. If you do decide to go to
graduate school, make sure you have a very good reason --- a reason
you believe (because people will want to know and assess just how
serious you are).
Higher education in the United States is a
business. Universities hold patents, essentially treat alumni as
shareholders, have (sometimes overdeveloped) executive branches,
create Masters programs and distance eduation courses that serve as
cash cows, and manage to make their faculty undertake three full-time
jobs for the price of one. You'll find it much easier to adapt to the
environment if you look at the world this way. It helps tremendously
to treat your GRA or GTA position (if you're lucky enough to get one,
and as a PhD student, you are usually guaranteed some form of funding
for your initial years) as a job. Keep it structured. PhD research
can be especially difficult to manage because it is by nature
exploratory, and it's easy to fall into unmanaged cycles and bouts of
work that can add years to your degree.
I highly recommend searching out Fellowships. Earning or
winning a Fellowship has two major positive effects. First, most
schools will be happy to admit you because you are effectively free:
you won't be a line item on someone's research proposal, and you
won't cost the department money that it could use on someone else.
Second, you then usually have the freedom to work with whomever you'd
like --- you aren't tied to a particular advisor. This enables you to
work with more senior people in the field who may keep a much less
active research agenda (and hence have little money to support
students). It's much easier for them to say yes to an advisory role
that lets them set their own level of involvement rather than
committing them to getting funding for you for 5 or 6 years (although
they should be practiced enough at this to make it a NOP, it still
takes effort).
Learn to use CVS or SVN. Learn to use LaTeX to write
documents. Learn to use a decent text editor. Learn a real-world
system in depth (this is especially useful for systems students: you
need credibility and a way to tie your research into real-world
problems). Become an expert in something (these are examples
only) Java, the Linux kernel, writing kernel drivers, a PKI package,
a video encoding standard, a set of network protocols, a compiler
toolchain, etc. Knowing one of these types of systems in depth gives
you an appreciation for the history of design decision and the future
challenges going forward. You'll need to learn how to use a wide
array of software and systems, but don't fall into the trap of
becoming a generalist. As a PhD student, you're supposed to become
the world's foremost expert in one particular topic. Narrow and deep
is good. Shallow and broad is usually not appropriate.
Let people inside your decision cycle. Use bound notebooks
to keep physical track of your research progress. Be open about your
progress or lack thereof to your advisor and fellow students. Don't
fret and wait in secret and have nothing to show at the end of a
year's time or a semester because you were afraid to commit things to
CVS or SVN. Identify a support group of students that you can share
your progress and results with informally and act as a sympathetic
ear for them.
A lot has been written about how to get into and successfully manage graduate school. Advice differs depending on the type of degree you're seeking. Here is a partial list of some of this advice for prospective students:
In late 2007, I received yet another "formal" email asking
if the sender could study with me. The email was relatively
well-written; it stood out from the typical slew of letters and I
decided to offer the author some friendly advice. The main reason I
replied was that the student said something to the effect that
information security was their passion. Even though I'm a computer
geek, I thought that comment needed emergency response (more on why
within my email below).
I am not posting this to embarrass the student in question, but merely
to head off me having to repeat myself in many similar emails (or
ignore emails altogether). In fact, I would have considered working
with this particular student, but at the time I was still a grad
student myself and could not offer them any assistance. Note to
applicants: make sure you know who you're talking to.
Note also that I learned something from this letter: American
academics should become familiar with the quality of specific
international institutions, especially those in India and China.
Dear [Student], I rarely respond to these types of emails, for a few reasons. The following is offered in a spirit of guidance, not criticism. First, the format of your email is almost guaranteed to cause it to be deleted or ignored. It's too long, too formulaic, and too formal. "Respected Sir" isn't the way to start off an email, especially to a CS prof or graduate student in the US. I realize that customs and norms differ, but in the U.S., a "Kevin" or "Hi James" or "Hello Dr. Smith" suffices. Second, I'm a PhD student, not a professor, so I cannot offer you funding or sponsor a student visa to the US. If you are interested in attending Columbia, then you should fill out the online application posted at the CS Dept. website. In addition, US academics (unless they've been educated in India) are almost universally not familiar with the Indian educational system, so telling me the name of your school and what semester you're in doesn't add any useful information: I have no way to translate it to the US system. Third, the one thing that would stroke my ego and therefore grab my attention, a reference to my work ([Project Foo]) is buried in the middle of the email. To a lesser extent, although I do appreciate your reference to it, that's a [then] 4 year old project, and what there is to know about it is written in the paper. It is much better to ask a meaningful question about a current research project. These questions are difficult to pose. You need to convince me that you actually read one of my recent papers and understood it well enough to have some meaningful criticism or insight into how to improve the system. On a more personal note, if Information and Network Security is truly your passion, then you need to stop and abandon it. Computer security is fun and interesting, but it shouldn't define who you are. Your passion should be flying kites, making model boats, biking, hiking, fishing, sailing, gourmet cooking, karate, art, mountain climbing, helping stray animals, your religion, your family, writing, politics, the market, helping the poor --- anything but something that is your profession. The single most important way you can make yourself attractive to academics in the US --- and to implicitly show that you have passion for something --- is to meaningfully advance someone's research. That takes time and effort, and may come in the form of offering opinions on their work, patches to their system, more data from you using the system, etc. Get involved in an open source project and contribute meaningful code or documentation. Best of luck in your school search, -Michael
Copyright © 2007-2008 Michael E. Locasto