Advice
Here are bits of advice from my point of view, and links to more advice.
NEW: My GRE Computer Science Test Study Guide, in iBooks and Kindle formats.
Research
To start, let me challenge terminology: The word research in the vernacular means to find known information. The other meaning, creation of novel ideas as a result of systematic investigation, is what I will discuss here. It's a shortcoming of academic language usage that we don't use two distinct words consistently for these two meanings.
[To do: Add more]
R. Hamming's Bellcore talk "You & Your Research" [700 kB PDF].
M. G. Kuhn's tech tips on producing papers: "Effective scientific electronic publishing"
P. Koopman's "How to Write an Abstract"
A. J. Smith's "The Task of the Referee". In Computer. 1990 Apr; 23(4):65–71. doi:10.1109/2.55470. Also available as Technical Report UCB/CSD-89-511.
Condensed paper/Extended abstract advice from The FREENIX program committee, W. Pugh, and M. Wegman.
Doctoral Titles
This is a very minor point, but there’s lots of confusion about titles for people with doctorates. For the U.S. conventions, see Titles: “Doctor” or Not?.
During Your Doctoral Studies
I very strongly recommend this book for a good perspective on grad school: Robert Peters. Getting What You Came For: The Smart Student's Guide to Earning an M.A. or a Ph.D. (This book’s computer-related advice is really outdated. You’re a CS major, so you were going to ignore other peoples’ computer-buying advice anyway, right? The general grad-school substance of the book is useful.)
Here are a few books to look to add to your bookshelf as you start grad school:
A Manual for Writers of Research Papers, Theses, and Dissertations: Chicago Style for Students and Researchers—You’re going to do a lot of writing, and this is a great style reference.
Michael Huth and Mark Ryan. Logic in Computer Science: Modelling and Reasoning about Systems.—You’ll need to take your formal logic knowledge further, and apply it to systems. This is an oft-recommended book to help with that.
The best general mathematical reference I've found so far is the Encyclopedia of Mathematics (EoM), which was a printed encyclopedia from Springer, and has now turned into a wiki maintained by professional mathematicians. However, it's not comprehensive, so I suggest MathWorld as a backup when EoM doesn't cover a topic.
And, if someone wants to buy you an impressive gift: Donald Knuth. The Art of Computer Programming.
From Undergrad to Grad School
Exam Preparation
There are many general GRE prep books and courses, but I think just taking a few practice tests is the most valuable thing you can do, to see what how test-writers have set up the questions. Familiarity with the format and scope of the test really helps.
Now, preparing for the GRE Computer Science Subject Test is completely different. It is a "do-it-yourself" job. ETS, the test authors, provide a small amount of information and one practice test. To fill this gap of limited test information, you can use my GRE Computer Science Test Study Guide, in iBooks and Kindle formats.
Application "Personal Statements"
The admissions committee is made up of faculty looking for students who will become productive researchers. A common mistake in the "personal statement" is to write a biography. To be blunt, the committee doesn't care about your childhood. Write succinctly about your aspirations to push the frontiers of computer science, in a particular specific area, and tell the committee how you are prepared to do this. The best way to demonstrate your research aptitude is to have research results you can point to. If you don't have that, that's OK, but demonstrate understanding of what a research doctorate is all about, and how you are ready for doctoral work.
During Your Undergraduate Studies
Here's how to "play the game", in short:
- Keep a very good record (grades & GRE scores),
- Get to know some professors in your field,
- Get involved in some research, and
- Get great recommendation letters.
Preparing for College
If you intend to go on to graduate studies in CS, pick an undergraduate program with a solid academic reputation. Computer science bachelor's degrees do not have a strict standardized curriculum, unlike, for example, engineering degrees. A CS degree program can basically consist of whatever the faculty chooses. There are standards, but they are completely voluntary. Because of this, graduate CS programs can behave in a way that seems "reputation snobbish" about undergraduate degrees. Having a B.S.C.S. from a program that is known to produce well-educated graduates will help you when you apply to graduate programs.
Most of these programs will have high expectations of completed upper school math and science courses. Most importantly, you should have completed Algebra I in middle school, so that you can complete at least these math courses: Algebra II, Geometry, Precalculus, and Calculus. Not having completed Calculus in upper school is considered "not college-ready" by some universities. For science courses, complete: Biology, Chemistry, Physics, and a fourth laboratory science (geology, for example). An additional elective course in math, science, or engineering is preferable. Most U.S. upper schools don't offer computer science courses, but if yours has a discrete mathematics or real computer science course, that may be a good choice as an elective. Warning: Most secondary school courses with the word "computer" in their title are not truly computer science courses, so don't be misled. Specifically, look for courses that meet the CSTA Level 3 standards. AP Computer Science A would be great, but is not offered at most upper schools, unfortunately.