written by: William Springer•edited by: SForsyth•updated: 5/25/2011
Going for a PhD in computer science? You'll need to write a dissertation, which means...choosing a topic! How do you find an open problem appropriate for your thesis? Learn about PhD topics in computer science in this informative article.
slide 1 of 5
Discovering Your Interests
While the thesis or dissertation is the hardest and most important element of earning a doctoral degree, many students begin postgraduate study without a clear idea of exactly what they're interested in studying. The nice thing is that, at the graduate level, there are very few required classes; while you generally have to take classes from a number of different areas, you can pretty much take whatever classes you like within each area. This breadth requirement is designed to introduce you to a number of different topics so that you can find the area in which you'd like to work.
Even if you already have a good idea of what you plan to work on, this is still a good opportunity to expand your horizons and find other areas that might interest you. Graduate courses tend to be more interesting than undergraduate courses and move faster; take advantage of this!
slide 2 of 5
Avoid Boring Topics
One reason that choosing a thesis topic is difficult is that a good topic must fulfill three criteria: it must interest you (and hopefully your advisor!), it must be significant, and it must be achievable within a reasonable amount of time. Let's examine each of those in turn.
Face it: before you get a PhD, you'll be spending a LOT of time working on your research. If the topic doesn't interest you, you'll have a hard time forcing yourself to get much work done. If the topic doesn't interest your advisor, he's unlikely to offer as much helpful advice as if you chose something in his area of interest. While you can certainly do your thesis on a topic that neither of you is interested, why make things harder on yourself? You took classes to find the areas that interest you...now choose a problem that interests you!
slide 3 of 5
Don't Be Narrow-Minded...But Don't Be Too Broad, Either!
You'll likely need to do a bit of research before choosing a topic, for several reasons: even if you already have an idea of what you'd like to do, you need to know what's already been done in that area and you need to know that other people are interested. If nobody's interested in the problem, you'll likely have difficulty convincing your committee that the problem is significant, and if someone's already solved exactly your problem, you'll hardly earn a degree for repeating the first person's work!
Of course, if you're looking at a famous problem that many people have worked on, then unless you specifically have a brand new idea that it's unlikely anyone has thought of before, you may be taking on too much. When a problem has received a ton of attention without significant progress being made, it's unlikely that it will yield to your efforts in a reasonable amount of time. Similarly, a problem that is not overly difficult but has so many components that it will take years to complete is a poor choice as well. The goal of your dissertation is to show that you can do original research, not to produce your life's masterpiece; choose something that can be done in a reasonable amount of time so you can earn your degree! The time to take on long-term projects is after you have a professorship and, hopefully, tenure!
slide 4 of 5
Theory vs Practice
In computer science, you basically have two choices: you can solve a theoretical problem, or you can write a program and measure the results. Both are valid approaches depending on your interests.
The advantage of theoretical work is that not many resources are required; pretty much all you need is access to the ACM Portal and Google Scholar. This can be a particular advantage when you're not funded; for most of the work, you don't even need access to a computer!
However, theoretical work has one big disadvantage: you have to find a solution to have anything. The author of this post didn't follow the advice above about not choosing too difficult a topic and spent a year working on something that didn't pan out. Don't let that happen to you!
For a practical project, on the other hand, you can run an experiment and get publishable results regardless of how it turns out. For example, one ongoing project at the author's university involves tracking how the BGP routing protocol is working on the Internet; this requires a lot of coding, but with a definite endpoint. Practical applications are thus useful because if done correctly you can be almost sure of being able to answer the question posed, while with theoretical projects you can do a great deal of work that leads to nothing. Practical projects can also require a number of extra resources, so they may require university funding in order to complete.
On the whole, your interests are what's most important: choose the type of work you want to be doing. If you hate to program, you'll be miserable working on one program for a year; conversely, if you love to program, you might not care for a project that mostly involves sitting around and thinking. A good researcher knows what he or she is interested in and good at; find the project that's right for you!
slide 5 of 5
So What's The Best Topic For a Computer Science PhD?
This isn't a question that can be answered, for two reasons: the best topic will vary depending on the student, advisor, and location (some projects require collaboration between multiple students), and any problem list here would quickly become outdated. Not sure what you're interested in? Try choosing an area of computer science and using Google to find a list of open problems in that area.
There are so many different areas in computer science, it would take several pages just to describe them all. For example, artificial intelligence, which aims to create computers programs that can reason like humans, includes the following subfields:
Natural Language Processing
Each of these subfields supports a huge number of potential PhD projects, and this is just one branch of computer science! Take some classes, find an area you're interested in, and get to it!