Most of this is repeated elsewhere. But nonetheless, here is a list of things that I think everyone should know. And since this is a webpage, there are lots of links as well.

Applying/Starting out

Reading

Writing

Presenting

Practical skills

Things that I would like my students to know. You don’t need to know all of this before you start the PhD, but it would be good if you were comfortable with most of these points by the end of your first year. In my opinion most of these are the tools of the trade for network researchers. Don’t worry if it all looks a bit UNIX-specific. You don’t have to be a UNIX user to work with me, but if all goes well you will be one by the time you graduate :-)

  • How to configure and build a kernel on {Linux|FreeBSD|NetBSD|OpenBSD|any other open-source OS}. I don’t care which OS, just that you understand the process and what most of the configuration options mean.
  • How to setup a network. I don’t mean how to run a Tier-1 ISP. But you should be able to install a UNIX-like OS on three or more machines and set up routes between them. Ideally you will be familiar with the topics addressed in Linux Advanced Routing & Traffic Control.
  • How to secure a network. You should be familiar with the firewalling capabilities of modern UNIX-like OSes. You should be able to port-scan, detect vulnerabilities, patch machines and so forth.
  • How to use UNIX effectively and efficiently. You should be adept at writing shell scripts (I don’t care which language: sed, awk, perl, python, bash, csh or tcsh, zsh, ksh, fish, or even Windows PowerShell. Look at other people’s environment setups (.bashrc etc) as that often helps. You should be familiar with regular expressions (e.g., regex or pcre) and grep - see the Regex Coach.
  • It is a great help if you can use a text editor properly: read Text Editing for Programmers. Pick one of vim or emacs and learn how to use them - emacs tutorial, vi introduction, vim Quick Reference card.
  • It is also a great help if you can use version control properly. I don’t mind which program you use, but you should be familiar with one or more of cvs, subversion, mercurial, or git.
  • You should have at least a passing familiarity with: ns2, gdb, gnuplot, ttcp, tcpdump (or winpcap if you must), dummynet or NIST Net, netcat, ntop, LaTeX, BibTeX. See these lists of tools for more.

Random links

Links that may or may not be useful. Mainly specific to current projects.