How To Be An Outstanding CS Grad Student
A Few General Remarks:
- Keep your ego in check. Avoid trying to show off or brag.
Yes, you made it to grad school. But so did all those other
students.
Now, the journey starts again — you need to make a transition from
being the senior-most undergrad to the junior-most grad student.
When you leave grad school, you will make another transition from being the
senior-most grad student to the junior-most employee at the place
you choose to work.
- Make a careful choice of career, and select Masters or Ph.D. accordingly;
if you don't intend to do research, a Ph.D. is not the best use of your
time. When you write a computer program do you think about other
ways it could be written and wish you had the time to compare them?
Do you routinely undertake fun projects outside of class that require
many months to complete? Do you enjoy making a plan, creating a design,
and completing an implementation on your own? Self-motivation and the
ability to complete independent projects are characteristics of a good
researcher.
- Enjoy grad school. Cover as many topics, and soak up as much as you
can. You never know what will pay off later in your career.
Masters:
- Think and act as if you are a professional who designs and builds
products (what industry calls an “engineer”).
Seek successful faculty who have the most contact with industry and
work with them.
- Consider each course carefully, and ask what you can take away from
the course that may be of potential benefit later. Even if you do
not intend to create computer programs or systems related to the
topic at hand, ask what you can learn that applies to other areas of
Computer Science.
- Strive to be among the top five students in each class, even if you
think the material is not pertinent to your chosen career; don't
convince yourself that you can afford to blow off a course just
because you find it uninteresting or irrelevant.
- Whenever possible, implement the items being discussed in class, even
when implementation is not a required part of the course. (The only
way to develop your skills is practice; the only way to understand a
topic completely is to gain first-hand knowledge.)
- Choose a project that makes you stand out from the crowd. Seek out
the top Masters students, especially those who have had some industrial
experience. Form a group and build projects outside of class. Find a
professor who will give you 590 credit or do it on your own, but
take it seriously. Format the code nicely, and write documentation.
Yes, write documentation and get others to read it and use your programs.
Remember that the goal is not to find code on the Internet but to
figure out how to build things yourself from scratch. Discuss your
designs and the techniques/tools you use with the group. Make sure your
project is nontrivial (several thousands of lines of code) and a team
project where you are in charge of dividing up the effort and
coordinating.
- Develop writing and presentation skills. In industry, a project may
be selected merely because the presentation is more polished than other
presentations. Writing and presenting can be difficult for engineers,
but stick to it. Remember that you do not have to compete with
professional writers (e.g., English majors). Instead, you just need to
be more competent than other engineers.
- Connect to industry. Skim the “trade rags” or on-line industry blogs in
your area. Don't spend any real time — the objective is merely to get
an idea of what's going on. Talk to corporate visitors, especially
engineers. Take note of the lingo and current items of interest.
Remember that a given corporate visitor may only have exposure to a
small piece of one company, and may not have a broad perspective. Talk
to several before making career plans.
- At all times, keep in mind: the more you learn now, the easier it will be
to land a job and to perform the work required. A degree is not a
hurdle to get over or a stamp that you collect on your way to a real
job — think of the work toward your Masters as a plateau that you must
reach and maintain, not only the knowledge but the ability to assimilate
and learn new technologies and new skills quickly.
Ph.D.:
- Although you may hear people assert that a Ph.D. is “completely different
than a Masters”, top Ph.D.s are not merely paper-mills that publish
large numbers of thin papers — the best can do everything a Masters
graduate can do plus more. So, read the description of Masters above,
and plan to include programming projects in your student career.
- Think and act as if you are a professional researcher (either an
industrial researcher or a faculty member).
- Take courses seriously — they are not merely a hurdle to overcome.
Instead, assume each teaches you the background and essentials that you
will need to do research. In each course, even in those that are
unrelated to your chosen area, ask what you can take away that may help
you in the future. Be aware that research doesn't follow strict
boundaries — something you learn in the class may be useful later
in your career. You'll be surprised to see that techniques from area
X can be applied to area Y. Ask yourself how researchers initially
developed the material in the course.
- Strive to be the best student in each class and impress each faculty
member, even if the subject is unrelated to your chosen area. Strive
especially hard to impress the top faculty members. As soon as an
assignment is given, solve the problem.
Then wait a day, reread what you have done,
and polish the result. For a mathematical proof, clean up any
ambiguities and make it more elegant. For a program, edit the comments
and writeup to make them clear, and make the code as clean as possible.
Don't ever give up, even if the assignment seems impossible. If you
can't solve the problem by the deadline, dig in and solve it anyway
for your own edification. Remember, the more you can do without
searching the Internet, the stronger you will become.
- Seek out the top Ph.D. students, especially those who know more than you.
Talk to them frequently about areas of CS and new ideas. Ask yourself what
skills or knowledge they each have that you do not. Once you identify ways
in which they are more skilled, work to improve yourself. Also ask what
skills you have that they do not — to build a career, it will be important
to identify your strengths and learn to exploit them. Look for interesting
intellectual problems the group can discuss. Attend research talks and
then discuss the topic, what you learned in the talk, and how the work
can be applied/extended/improved. When you hear an idea in class that
seems deep, shocking, or unexpected, write it down and discuss it in
the group. Be intellectually competitive — try to find holes in other
students' arguments.
- Practice thinking quickly. Learn how to analyze facts and how to form
logical arguments in real time. Develop the skill of carrying on a
technical conversation without hesitation and without introducing
irrelevancies.
- In each task you do — whether it is research, course work, or even a
mundane task — look for the fundamental abstractions. Ask yourself,
how to describe the problem, potential solutions, lessons, and results
in an abstract manner. Learn to identify the essence rather than the
details; learn to characterize and assess.
- Practice technical writing. Although some researchers get by with
ambiguity and obfuscation, the best strive to make their ideas accessible
and understandable. Never assume that muddled prose means that a subject
is intellectually deep — it usually means that the author cannot write
well. At all times, strive to create prose that is crisp, terse, and
accurate.
- Don't spend time trying to emulate someone else, even your advisor.
Watch, learn, and adopt the skills you admire most, but do not merely
emulate. Instead, find your individual strengths and build on them.
Edsger Dijkstra summed up the idea: do only what only you can do.
- On choosing a topic: the choice of an advisor is more important than the
choice of a topic. Choose an advisor whose career matches your
inspirations, but remember that your career will differ from your
advisor's in significant ways. Avoid choosing a topic merely because it
is “hot”: you will be competing with many other grad students. Also
remember that a Ph.D. dissertation is only practice — no one expects
you to resolve one of the major open questions in computing. Finishing
is more important than wasting years on a problem that you cannot solve.
- On publications: Albert Einstein once said, “I have little patience with
scientists who take a board of wood, look for its thinnest part, and drill
a great number of holes where the drilling is easy.” You cannot build an
impressive record by accumulating a large number of meaningless papers.
If you are aiming for the top, remember that one significant paper has
more impact and earns more recognition than a hundred trivial papers.
- On choosing academic or industrial research: there is no optimum.
However, your happiness may depend on the choice. If you are
self-motivated, crave freedom, and enjoy teaching, academia may be best
for you. If you like direction and want to see your work have commercial
impact, industry may be best for you.
- On the relationship between research and teaching: if you want to learn a
subject well, teach it. Undergraduates demand a teacher with perspective
on the subject and the field, beginning graduate students demand a
teacher who has mastered the subject, and Ph.D. students demand a teacher
who can go beyond the facts and explain alternatives, tradeoffs, and
consequences. Finally, if you want to determine whether a topic or
approach is practical, teach a group of engineers who work in industry.
They can easily sense whether something is practical or merely an
academic exercise.
- Go beyond courses and beyond a single research project. Define a small,
fun project on your own. It doesn't have to be “publishable” in the usual
sense, but it must be entirely yours. Identify the question, devise an
experiment, and carry out the investigation without guidance. Get other
top Ph.D. students involved, but be sure you have at least one project that
you create and control. After all, that's what a research career entails.