Whether you are curious about writing an undergraduate thesis or want to get a passion project off the ground, we lay out what to expect when doing research as an undergraduate and how to find opportunities that are right for you!
What does it mean “to do research”?
Doing research means making new discoveries and expanding the world’s collective knowledge. It follows a familiar pattern:
A researcher primed with deep knowledge of a specific field is motivated to solve an open problem or question. From a spark of inspiration, they design and run an experiment to solve it. They present the results of the experiment in a scientific forum to their peers.
Research usually falls into one of two categories. From science classes in school and clickbait news articles – “coffee/wine/chocolate is good/bad for your heart!” – you are probably most familiar with hypothesis-based research:
- Motivation: a question to answer
- Spark: a hypothesis to answer the question
- Experiment: a test of the hypothesis
- Result: accept or reject the hypothesis
Research in computer science tends to be goal-based:
- Motivation: a problem to solve
- Spark: a method for how to solve the problem
- Experiment: tests to validate and refine the method
- Result: a new method
As a broad generalization, hypothesis-based research tends to focus on a single “costly” experiment (in terms of money, labor, or time), whereas goal-based research tends to iterate quickly through experiments to refine the new method. In goal-based research, the method itself is the contribution and results showcase its capabilities and limitations on a variety of inputs.
What’s the difference between a class project and research?
In an open-ended class project, the point is for you to expand your own knowledge about existing tools and frameworks. The end product is something that any expert could accomplish.
In doing research, the point is to expand the world’s knowledge on a certain topic: there is some nugget of novelty, e.g. a mathematical derivation, a system design, or a bridge between ideas, that is new even to experts.
That said, what is “novel” enough to count as research is often a matter of perspective. When a manuscript on new research is submitted to a journal or conference for peer review, it is very common for reviewers to debate among themselves whether its contributions are novel enough to merit publication.
How do I get started doing research if...
... I know of a professor who does research I am interested in participating in?
Email them! First, search the professor's and department’s website to see if they have a section regarding undergraduate research – if so, follow their instructions.
In your email, introduce yourself and succinctly explain why their research caught your attention. If you already have ideas for potential projects or extensions of their work you could see yourself working on, include them! If not, ask whether they have any “bite-sized” projects on the back burner or whether any of their PhD students or postdocs could use an undergraduate assistant.
Don’t worry if you have zero research experience or are unsure about research in general – professors expect undergraduates to come in with a fresh slate and will train you (or will have their graduate students train you) to do research tasks. They know that you are “dipping your toes” in research and may decide to switch to another topic eventually or ultimately decide it is not for you.
... I took a class recently on a subject area that I found fascinating?
The professor who taught the class likely does research in that topic (or knows who to point you to) – see above!
... I don’t know what subject area I want to do research in?
Here are some ideas that will help you find a subject that interests you. If your university does not offer these types of courses or extracurriculars, see our section on finding opportunities outside of your university.
Take upper-level, project-oriented courses. You will get a sense for the state of the art and open problems in that subfield. A class project can even blossom into a research project! If you want to take an upper-level course but don’t meet all the prerequisites, you may still be able to take the class. Typically, each professor sets their own policy regarding prerequisites and how flexible they are – email them and ask whether it would be possible for you to take the course given your academic background. You may also ask whether they can recommend any resources to teach yourself the prerequisite material.
Take reading courses. These are upper-level courses that read and discuss recent scientific papers, often led by graduate students. Reading courses are generally less formal than other courses – if you enjoy the reading-based homeworks and round-table discussions of humanities courses, then you would probably enjoy a reading course! Individual labs sometimes hold their own informal weekly reading groups, which you could also ask to join.
Go to talks, seminars, and colloquia at your university. You will get a sense for what cutting-edge research is being done at your university and others.
Watch and read online content. Visit our Resources page for a list of blogs, Youtube channels, courses, colloquia, and more online content related to computer graphics. You can also subscribe to pop science journalism such as Wired, MIT Technology Review, Popular Mechanics, Science News, National Geographic, Smithsonian, Discover, or Scientific American to discover interesting new research.
Look for connections to your outside hobbies and interests. There can be surprising connections between seemingly unrelated topics: for example, there is machine learning research on music, computational fabrication research on knitting, and physical simulation research on baking!
... I know what subject area I am interested in, but I don’t have a specific research idea to start on?
It is surprisingly difficult to go from a subject area to an actionable research idea without deep knowledge of the state of the art in that subject and some research experience (especially perspective on realistic timelines). As an undergraduate, typically the best course of action is to attach yourself to an existing project.
You can get a sense for open problems in the field by conducting a literature search. Your university likely has subscriptions to all major publishers – to take advantage of this service, connect to your university network or VPN while browsing (this will grant you access to subscriptions across the web). Find out which are the major journals or conferences for your subject and find the most recent issue or meeting. Browse through the list of papers and skim any that sound interesting! Then you can search for any interesting citations within, and so on…
It can be tempting to just pick something out of the “future work” pile listed at the end of a paper. However, this is not always a good strategy: some may be incremental (i.e. trivial enough to not be publishable on their own) or too challenging, or you could get “scooped” – the authors of that paper already have a head start! That said, something “incremental” may be enough for an undergraduate thesis, at the discretion of your advisor.
... my university has limited resources, or no professors who do research in my subject of interest?
In case your university cannot offer sufficient research support in your area of interest, there are programs that can match you with an appropriate mentor at another university (even if you are not a U.S. citizen or not studying in the U.S.), e.g. NSF’s REU (Research Experience for Undergraduates) Program, the Computing Research Association’s Distributed Research Experience for Undergraduates (DREU) Program, and RISE (Research Internships in Science and Engineering) Germany. Many individual universities offer similar programs for visiting undergraduates, e.g. MIT’s Summer Geometry Initiative and the Summer@EPFL program. The Institute for Broadening Participation maintains a Pathways to Science database that you can search to find undergraduate research opportunities and filter by region, eligibility, subject, etc. You would need to apply for these opportunities as you would for an internship.
... I want to work on my own passion project independently?
If you have a specific idea for a project, it is important to ask yourself three questions:
- What is the precise problem I want to solve?
- How concrete is my idea to solve it? (Can I start coding today?)
- Why hasn’t this problem been solved before?
Try to think of satisfactory answers to all three questions before jumping in.
Be sure to document your progress (at least weekly) in a manner that suits you, like a physical notebook, a cloud document, or a blog. Include notes, plots, images, demos, etc. of your intermediate results.
... I want to do a research internship at a company?
Most research internships at companies are limited to PhD students. However, some may be willing to consider undergraduates who have at least a year of research experience. Ask your advisor which companies do research in your subject area of interest – they may even be able to make a connection! Like most computer science internships, positions are competitive and recruit early (typically in the fall for the following summer).
I chose a research project – now what?
The experiment stage is a recursive process: although the initial idea might be a grand vision, it first must be pared down to a minimum working example and then slowly built up to its final form. Every step involves testing new changes, finding tools and resources that you can borrow, and reflecting on results to determine the next step.
What it means to execute these steps is different for every project. As an undergraduate, your advisor will help you break down an experiment into tasks suitable for your skill level.
Typical tasks include:
- Writing and debugging code
- Writing validation tests to ensure the correctness of your code
- Reading documentation for existing tools to incorporate them into your project
- Summarizing and sharing your results via notes, plots, images, demos, etc.
You may have some freedom to choose the tools that work best for you (programming languages, IDEs, packages and libraries, etc.).
Document your progress and thought processes as you work in a manner that suits you (e.g. a physical notebook, a cloud document, a blog) and you can easily share with your advisor during meetings. The more detail the better – even small hiccups you ran into – as you will forget them more quickly than you think. This “research diary” can also serve as a reminder of the progress you have made in moments when you feel stuck – and just writing out your thoughts during those times can often be helpful in getting yourself “un-stuck”!
Establish a communication plan with your advisor at the beginning of the project – expect to meet at least once a week. Some professors also encourage asynchronous updates via email or Slack in addition.
One of the most gratifying (and frustrating) aspects of the research experience is the independence. You will get to work on a unique project, have the freedom to decide your work tasks and schedule, and follow your curiosity. However, independence can also lead to procrastination, feeling overwhelmed by the magnitude of the project, getting pulled into efficiency or edge case “eddies,” or getting stuck without knowing how to proceed. For undergraduates, it can be especially disorienting and frustrating to try to solve a problem without an answer key for the first time. If you find yourself struggling with any of these issues, check in with your advisor more frequently to get help or a perspective check. You can also read through your project notes for a reminder of how much you have learned and accomplished.
Parts of this article adapted from “How to write a SIGGRAPH paper: a guide to choosing a good research topic, doing the research, and writing it up.” David Salesin. SIGGRAPH Asia Course. 2016.