If you are a hopeful applicant to the U of C, please read this
Web site. I
do not know if your application will be successful, and I cannot advise
potential applicants on the quality of their application.
If you are already an undergraduate or graduate student here, I would be
happy to speak with you. Drop me an email to schedule an appointment.
If you are already a graduate student, here are some
pieces of advice that may or may not be
useful. Here is another
blog post about advice for grads.
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 North America in general and those
studying with me in particular.
Contents:
The Spiel
Other Resources
Motivation for this Page
The Spiel
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 or
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, SVN, or git, and an ability to read documentation and install
Unix programs. You should be able to handle
a
command
line (a knowledge of discrete mathematics is also helpful).
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 people 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 or she 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 essentially a
business. Universities hold patents, usually treat alumni as
shareholders (especially in terms of extracting donations), have
(sometimes overdeveloped) executive branches, create Masters programs
and distance eduation courses that (hopefully) 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 (meaning neither the answer
nor the plan
has been defined by someone else), and it is 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). In Canada,
the
Vanier is
a prestigious national fellowship that is open to international
PhD students (this is one of the few forms of funding that
non-Candians can get as students).
Learn to use git, 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. You might consider
using bound notebooks (or even just a series of small memo pads) to
keep physical track of your research progress. You may also want to
think about alternate forms of media such as podcasts or Youtube
videos; you are essentially creating a portfolio as well as a record
with good data provenance. 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.
Other Resources
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. What follows are three lists. The first is
a partial list of some advice for prospective students. The second
list is general resources and CS-related links, and the third is
some humor.
NB: I've avoided replicating some of the links that
these pages link to; happy breadth or depth-first browsing...
- You must know HOW TO ASK QUESTIONS. One of the surest signs of clueless incompetence is asking an aimless, plaintive "I have no idea what I'm doing"-style question. Professors have a severe allergey to this kind of attitude.
- Want to be a scientist? Watch this: http://www.thirteen.org/naturally-obsessed/
- The article "Networking
on the Network" is a comprehensive and very useful read,
particularly for PhD students. My advisor pointed this out to me, and
I'm pointing it out to you. It was the most useful non-technical
piece of documentation that I read during my six years in graduate
school.
- Caltech site on "how to be a winner" for students
- The article "The Disposable Academic"
- Getting Jobs (PDF, 2002, Stephen Edwards, Columbia University)
- Advice (David Evans, UVA)
- More advice (Steve Bellovin, Columbia University)
- ...and more advice from the U of C Laboratory for Software Modification Research
- David Kotz maintains a page of useful readings on many aspects of academic life (reading, speaking, reviewing...)
- Response to "Will you write me a recommendation letter?" (advice from Peter DePasquale, TCNJ); (advice from Scott Anderson, Wellesley). If you don't think I can write you a white-hot, molten, glowing letter overflowing with praise, then save us both some trouble and don't ask. These take me a long time to generate, and I want to save that effort (and the reputation of my assessment) for folks that really deserve it.
- GMU's Tech Transfer Office has some advice on keeping research notes.
- Reasons why people tend to produce poor slides.
- Edward Tufte on creating slide decks
- Abe Singer's "Powerpoint can make you go blind" (advice on producing ledgible slide decks)
- Peter Norvig has a great piece on The Gettysburg Powerpoint Presentation and supporting material.
- NYTimes on PPT use by DoD
- More presentation advice.
- Getting NSERC Research Grants (thanks to J. Aycock for pointing this out)
- A viewpoint on getting NSF grants.
- Data visualization: Stanford Wrangler, Google Public Data Explorer/Google Refine
- error bars in gnuplot: http://www.csse.uwa.edu.au/programming/gnuplot_demos/errorbar/errorbar.html
General Academic & Infosec Links
Humor and Tidbits
The Motivation for this Page
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