CS rising junior, indecisive about choosing a sub field.
I want to pursue CS research before I graduate for its own sake and partly to compensate for my lackluster GPA for grad school. But each field seems to have a pet peeve:
1) AI/machine learning: too saturated, fear of an AI winter
2) Networks/security: boring, reading a research paper seems torturous
3) Bioinformatic/quantum computing: may never find their place in real world and die out
Etc.
It continues to amaze me how some people know exactly what they want to do in their freshman year or even earlier. My question is: what motivated you to pursue what you're doing right now and at what stage in your academic career?
'elonmollusc's advice is really sound: at least at the beginning, choose the advisor or collaborators, not the subfield. You can probably get yourself interested in any problem if you put effort into it and enjoy the work or the people you're working with. And even if you don't enjoy it, you'll learn something about your own preferences and what kind of environment and style of work you want to build around yourself. Is there a class you've taken where you really enjoyed the material or the professor's style? Go to their office hours and talk to them about research. It's even better if you bring some of your own ideas for what you might be excited to work on (perhaps keying off some of the professor's own recent work; do you have an idea for a way to extend it or a new place to try it?) -- faculty love it when students are a source of new ideas.
If you want to do grad school in CS, here is some stock advice:
- Read some of the essays that people have written about "what grad school in CS is like." I did an interview on this with my friend Eugene Wu (http://www.pgbovine.net/PhD-interview-eugene-wu-keith-winste...), and our friend Adam Marcus (http://marcua.net/writing/gradschool-guide/) also wrote a guide after finishing his PhD. Our other friend Phil Guo also wrote a depressing book about his (not-so-good, but also not horrible) time in grad school at Stanford (http://pgbovine.net/PhD-memoir.htm), and he ultimately ended up in a great job where he seems happy and productive (and now tenured) too.
- Read some of the advice for grad-school applicants, e.g. Michael Ernst's (https://homes.cs.washington.edu/~mernst/advice/) and Jennifer Rexford's (https://www.cs.princeton.edu/~jrex/advice.html) and Justine Sherry's (http://www.eecs.berkeley.edu/~justine/advice.pdf)
- Think real carefully about "Why do you want to go to grad school?" Do you want to use computational thinking to help people in a tangible way? Or do you want to learn about computer science for its own sake, as a quest for knowledge? Do you think you would enjoy a teaching-focused job, or an industrial research job, and these require a Ph.D.? All of these can be great answers, but they are different. What projects or independent activities have you done (things nobody told you to do) that you enjoyed or found satisfying? How can you aim to best continue that? (By contrast, "I did well in undergrad and would like to continue my education" is not a good reason to start a Ph.D. in computer science!)
- Consider taking time off between undergrad and grad school, or at least deferring for a year after you are accepted. Depending on the subfield, the people that do this often have a real leg up, because they can bring a nontraditional perspective to the table. There's little benefit in being "smarter" than everybody else in the group if all that means is that you are saying something first that somebody else was going to say anyway 90 seconds later. It's better to be the one contributing ideas (about new problems worthy of attack OR ways to solve them) or a point of view that wasn't going to get contributed at all. And the people who have exposed themselves to more diverse environments often have had more time to understand themselves and what kind of environment they need to build around themselves (advising, style of work) to be happy and productive. Depending on your advisor's style and the culture of the department, grad school can be almost a totally unstructured and self-directed environment (quite different from undergrad) so you really don't want to go into it as a sort of default. (If you are saying to yourself, "but I don't know what I would do during that year off," that is not a good reason to make grad school become your default! By contrast, if you are saying, "but I am in theory or another mathematically inclined subfield and literally the only way to get better at it is to keep doing it; there is nothing the outside world has to offer me," then maybe you are right -- theorists often do seem to adhere to this kind of thinking.)
- Start thinking about how to demonstrate (by December of the year when you plan to apply) to your letter writers that you have the initiative/resourcefulness/creativity/grit and can see a project through to completion even over obstacles. (Ideally, by participating in a research project that submits a paper for publication.) The letters of recommendation do matter a lot, probably more than anything else in the application, and the letters will ideally be from people that the readers can trust are well-calibrated to speak to your promise at doing CS research.
So there may be a lot of opportunities for you to see a diverse range of talks (many of which will be intended for a general CS audience, at least for most of the talk) and get a sense of what people find exciting/interesting/achievable on various frontiers of CS research in different subfields. For the job talks at least, the candidate is sometimes giving the best talk they will ever give in their life, so it's possible to see something compelling in a subfield that you might not otherwise glimpse just by taking a course or something. And (this is more applicable to real-life talks) if you like you can usually go up to the speaker afterwards to ask them something privately and usually presenters are flattered to have somebody interested. Or if somebody in the audience asks a question that you find interesting, same thing. This might seem awkward and I know it might not seem this way, but it's hard to truly embarrass yourself by showing interest or enthusiasm -- you're in college! (As a student, I once found myself in a conversation with some random dude about the Gamow/Stern/Knuth elevator results after we both waited for the elevator for a long time after attending a talk at MIT, and when we were done I was like, "By the way, who are you?" and he looked a little surprised and was like, "Uh, I'm Butler Lampson.")
If you're not at a research university, that may decrease the number of random research talks you can show up to, but it also suggests the faculty will be much more eager to collaborate with undergraduates and involve you in a material way in their research projects.
If you're going to pursue undergrad research, I don't recommend choosing based on field, but based on potential supervisors. Who are your favorite professors? What subjects have you really enjoyed and would like to explore further? A good project is at the intersection of what you're interested in, what your faculty mentor can realistically supervise, and what you can complete and bring to a good result in 1-2 years. You're going to get the best experience if you're able to work with a faculty mentor you like that can teach you about the research process and devote time to mentoring you. Those skills, more so than any specific project you complete, are what will help you be successful in grad school.
There are probably examples of successful researchers who started in one area as undergrads and stayed with it for decades, but it's more common to switch as your interests change and you get more exposure to different subareas of CS, particularly once you get into a grad program and get more exposure to the open problems in different fields. Grad schools will not require you to stick with the area or theme of research that you may have been pursuing when they accepted you.
To give you a concrete example: my first undergrad research project was writing a simulator for acoustic reverb. I continued working with the same advisor, but we switched to projects related to imaging and remote sensing, which led to experimenting with weird neural network architectures (before the current boom in deep learning really took off) and their applications to multispectral imaging. When I started my Ph.D. program, I was originally working on nonlinear optimization and its applications to sensors, but ended up switching to performance modeling and queueing theory, which became the subject of my dissertation. My research has evolved even more since I became a faculty member and shifted to working with real undergrads; I've recently been doing a lot of qualitative research with community organizations about their uses of data and analytics, which is only tangentially related to traditional disciplinary CS research.
Btw .. three pieces of random advice:
- Go to the best grad school possible. Below a certain threshold, it is pointless.
- Learn to write well, and learn to read research papers in your field of interest.
- Get good taste in your problem to solve. When I was starting out my post-PhD life, a very senior Director/VP-level scientist at IBM Research asked me if I had a good taste in picking problems. I gave a BS answer since this was during my job search/interview loop. But I have thought back to that question a lot as I hit mid-career. I suggest you watch the first keynote at MobiSys 2020 (free on youtube). I think you need to pick problems that are within your capability and then build on the skills you have picked up to work on the next better problem, and so on ... all perhaps in sight of a worthy problem at the very end or on the road. I wish I gave this deep thought early in my career .. maybe I'd be more satisfied in my career (but hey .. I still have time .. maybe I'll figure it out one day!).
To some extent I would not choose based on current market trends - if you want to go to grad school, you're looking at a job market many years down the road (esp. if you do a PhD). However, "saturation" is an issue and this could be demotivating. You definitely don't want to choose a boring topic. If "Bioinformatic/quantum computing" is interesting to you but you're not sure of its applicability/potential but you find it interesting enough to study, I would say this is the perfect field for you to study. Maybe a "deep learning" type revolution is around the corner - or maybe you're going to be part of making it happen.
Not to say market trends are unimportant, but as elonmollusc says, you can end up changing your field of research later - so you should some extent study what interests you most at each moment in time.
How did I choose? Mostly by accident and I definitely did not plan this much in advance. I enjoyed web programming during my undergrad. I got interested in how to make web programming easier (and if you could write both client-side and server-side code in the same language - in the pre-Node.js and pre-transpiler days :-)) and I stared working on a project to translate .NET code to JavaScript. Through a few random lucky accidents, I ended up working with F# and met Don Syme from Microsoft Research. This got me the idea that I could actually do PhD! Through working with Don, I got interested in functional programming and PL research more generally and then applied for PhD with some ideas about reactive programming.
I have no idea how to choose a field or plan a career (I only have one data point!) In my case, it was a mix of doing things I found interesting (without thinking about why this might be useful) and meeting a fantastic mentor at the right moment.
In any case, good luck, no matter what field you end up choosing!
I wanted to go into PL and compilers until I met the prof who later became my PhD advisor. He introduced me to HCI, which still let me dive into some PL topics too!
I got enough statistics and machine learning experience in graduate school to be doing machine learning research now as part of the defense industry. Even if machine learning seems like it might be too hot to touch, it will aid you in any number of jobs you could have in the future: automation, data science, etc. It really is perhaps the easiest sub field to cross disciplines. I've always been a PC gamer and the TD-Gammon paper really pushed me forward in my desire to do machine learning -- check it out, its a classic (https://www.bkgm.com/articles/tesauro/tdl.html).
True about switching fields with ml, after a while in evolvable hardware I did a joint PhD in geography + computer science, and have been making socioeconomic simulations of various kinds for the last 10 years. Nowadays I'm trying to reacquaint myself with core cs research, as looking for a lectureship I realized I'm always going to be stronger teaching cs than geography.
Anecdotally, my first research position was the result of getting my last-choice internship for that summer. I thought I would hate it and was planning to quit after the summer. My advisor was incredible, and I ended up working in that lab for 3 years. That field (human-computer interaction) is now my primary discipline!
It's pretty easy. People try things out and if they don't like it, they pick something else. When someone appears to know what they want it is because they did the experimentation phase before they chose their field. It looks like you have the "experimentation phase" still ahead of you and there is no shame in that.
Same for neural nets, I could rattle off 3 idea that no one is working on. I don't think the field is saturated.
Just look at what you enjoy doing and specialize in that. You don't need to mixmax the decision and try to predict the future.