Professor Might's advice is on the whole good.

I would add:

Academic Jobs. Professor Might suggested that a Ph.D. is good only for an academic career, and I would in part disagree: I got a Ph.D. in engineering where it was solidly in my mind before, during, and since that never did I want an academic career. Actually I did take an academic job for a while as a way to have time better to care for my wife in a long illness, but I regarded the job as a waste of time for all concerned.

The best of my Ph.D. coursework was terrific stuff. And the Ph.D. did confirm to me that I knew how to do research. To me, both of these are the two main pillars of my current attempts to start a successful business.

Long one of the best approaches to progress is to do field crossing: For a career in computer science, either in practice or in research, I would suggest (1) avoiding taking any courses at all in computer science unless just want to waste some time and (2) taking all the best courses could find in the mathematical sciences.

In particular, my view is that now, for the future of computing, computer science has a fatal disease and is nearly dead -- the field is missing any powerful intellectual methodology. The problems in computing remain important, but by a very wide margin the most powerful tools for progress in those problems are just the mathematical sciences.

For how to get a Ph.D., I would recommend: Start with what is fairly clearly an important, apparently not well solved, real problem from outside academics. Then attack the problem with some new work in the form of theorems and proofs with prerequisites in the mathematical sciences.

The usual criteria for publication are "new, correct, and significant": Okay, given where you got the problem and that you did some original work just for that problem, your work is likely "new". For "correct", it is fairly easy to know that theorems and proofs are correct, and it is difficult to argue with them. For "significant", since the real problem was, likely so is your solution.

I brought my own research problem to graduate school. The best coursework in my first year was a BIG help. I did all the actual research independently in my first summer. All my advisors ever did was approve my final work. I recommend this approach.

If a student has done some good research and still has a problem with his advisors, then I'd recommend just publishing the work. Nearly no one in academics wants to argue with the significance of published paper.

I do recommend doing some publishable research while a graduate student. Once in a course I saw a problem that should have been solved but was not solved in the literature. I took out a week, found a crude solution, got the problem approved for a reading course, in the next week found a better solution, and wrote up the work. It was clear that the work was publishable, and, thus, much better than needed for a reading course, and later I did publish it. That work gave me good research credibility and helped me get the rest of my way through graduate school.

For getting a paper published, it can also help if the paper has more prerequisites in the mathematical sciences than any of the reviewers have; this situation can be relatively easy for someone bringing to computer science original work based on the mathematical sciences.

Can this approach to research work? Here's my evidence: I've published several papers in computer science jointly with others, and I've published two papers on my own. One of these two, and the best paper of the lot, really is in computer science. I've never had a paper rejected, and I've never had to make any significant revisions. The two papers where I was the sole author were in relatively good journals.

I was encouraged to publish my dissertation but wanted to sell it and refused to publish it! Again, I've never had any interest in an academic career.

I would take issue with the path suggested for research that a student should start with advanced courses in computer science, read 50-150 papers, and then do some research. That approach is too narrow -- it's nose to the grindstone, shoulder to the wheel, and ear to the ground and then trying to do good work in that position. Moreover, in a plowing analogy, will likely break a plow just where the last 50 people did.

For big success in academics, need to do some broadly powerful work. For that, I would suggest picking a direction with a much wider field of view, also starting with a field of computing important outside academics.