Michael E. Locasto: Studying With Me

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.


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...

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

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

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,