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- Information for graduate students & those considering graduate study from UMBC
- Choosing Graduate School in Computer Science
- A Princeton CS Major's Guide to Applying to Graduate School
- How to Succeed in Graduate School
- How to Be a Good Graduate Student
- Useful Things to Know About Ph.D. Thesis Research (H. T. Kung)
- Jon Crowcroft's tips on applying to Cambridge
- Sugih Jamin's list of pointers
- Hamming on research
- Keshav's Hints on doing research
- Systems Software Research is Irrelevant
- How to Have a Bad Career in Research/Academia
- UCL CS PhD info
- Rapaport's How to Study
- The Researcher's Bible
- Saleem Bhatti's list of links
- How to read a paper by Keshav
- My list of networking papers worth reading
- Dave Kotz's favourite papers
- 25th anniversary edition of CCR
- Jon Crowcroft's typically tangential reading list
- CCR has an occasional "recommended reading" column: Jim Kurose, Jon Crowcroft, David Wetherall, Matthia Grossglauser, Mostafa Ammar, Craig Partridge, Venkata Padmanabhan
- CS is inherently multidisciplinary. So take a look at Learning other fields (AI-specific, but the principles apply to any area of CS).
- The Task of the Referee
- Papers: ACM Digital Library, IEEE Xplore, CiteSeer, Network Bibliography, ScienceDirect, Ingenta, Community of Science, Engineering Village, ISI, INSPEC. I do not currently recommend using Google Scholar (maybe when it comes out of beta?).
- Mailing lists/CFPs: tccc, end2end-interest, NANOG, IMRG, WikiCFP, Wireless CFPs
- Practical reading: O'Reilly Safari, Linux Documentation Project, Apress free books, ACM Professional Development, How NOT to go about a programming assignment
- Advice on Research and Writing from CMU
- Dave Kotz's writing guidelines
- Tom Cormen's Writing, Presenting, and Evaluating Technical Papers in Computer Science class
- Some advice on PhD thesis structure from the department where I did my PhD
- How (and How Not) to Write a Good Systems Paper
- Good Writing by Marc H. Raibert
- Phinished - "A discussion and support group for people trying to finish their dissertations or theses, and those who have been there"
- Strunk's Elements of Style
- Lynch's Guide to Grammar and Style
- Tips for Formal Writing (Jim Bednar)
- Writing a good introduction (Jim Kurose)
- Sugih Jamin's Reading and Writing checklist
- PhD skills from Toby Walsh (writing papers/grants/reviews, running experiments, etc.)
- Writing a good grant proposal (Alan Bundy)
- Grammar Girl's Quick and Dirty Tips for Better Writing
- Quick 50 Writing Tools from Poynter
- 3 shell scripts to improve your writing
- For better or for worse, US grammar, spelling and vocabulary are somewhat different to that used in the rest of the world. So check whether your chosen venue uses American or British English, e.g., these ACM authors' instructions. Moreover, if, like me, you have spent time in both the US and the UK, make sure that you aren't using a bastardised combination of the two languages!
- The Not So Short Introduction to LaTeX2ε and An essential guide to LaTeX2ε usage
- Always useful for meeting those pesky page limits: Squeezing Space in LaTeX
- Tips on Giving a Talk
- Giving an Academic Talk
- PowerPoint Is Evil (Edward Tufte)
- Five Rules for Better PowerPoint Presentations
- Which PowerPoint tips really work?
- Giving an Oral Presentation (University of Canberra)
- More on del.icio.us
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, or even the forthcoming Windows Monad shell...) Look at other people's environment setups (.cshrc 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.
- 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, cvs, TeX or LaTeX, BibTeX. See these lists of tools for more.
Links that may or may not be useful. Mainly specific to current projects.