Undergrad Research, Projects and Directed Studies
If you are currently an undergraduate and interested in getting involved in a project, please read this. A lot of students seem to be interested in doing “research” these days, and I’d like to set the expectations correctly.
Short version: (1) understand research vs. projects; (2) don’t do research / directed study until you’ve done the requisite coursework; (3) I will say no if you are not a Wisconsin student; (4) consider things to build your portfolio on your own.
There’s also the general question of “I am interested in the topics you are interested in, how do I learn more about them”. If you’re interested in graphics, robotics, or data vis there is some on that here too.
Warning: This is a work in progress, but I am letting out since people are asking.
Update: July, 2024: Added a note about personal projects.
Update: September, 2023: Added some information on other ways to learn about the topics, which is particularly important given that I am on sabbatical.
Update: August, 2023: I am on sabbatical for the 2023-2024 academic year. This means I have even less time than usual for working with undergraduates.
Update: January, 2023: If it isn’t clear from below: I am unlikely to work with a student who has not done enough coursework. Most of the students I work with have taken a class with me (usually, CS559). However, we also like to work with students who have taken another relevant class (e.g., Mech Eng 439 Robotics, CS571 user interfaces, or CS??? the new undergrad data visualization class). Exceptions are possible (for example, students in the WISCERS program, or for Mechanical Engineering students with good physical design and fabrication skills), but not common.
Update: May 20, 2022: I guess it’s not clear, but “REU” is an NSF program for “Research Experiences for Undergraduates” - in order to be eligible, the student must be a US citizen or permanent resident.
Warning, this is a disorganized stream of thoughts… But the answer to your question is probably hidden in here.
And, you may want to see my The Graduate School FAQ
Learning about Graphics / Robotics / Visualization / etc
If you’re interested in the kinds of things I am interested in (and teach), good for you! I find them to be some of the most interesting topics (which is why I chose to work on them). I do recommend that you stay open minded: the coolest stuff probably hasn’t been invented yet.
The general advice: if you are interested in these topics (1) take the relevant classes, (2) get a strong general background, and (3) do some outside reading/projects to learn beyond the classes.
Please trust me on (1) and (2) - you might think “why do I need to learn that old-fashioned foundation stuff when I can see the fancy/modern stuff on YouTube” - but having solid foundations is really important in understanding the fancier stuff. And, learning things in a rigorous way is good practice in thinking rigorously.
Some specifics:
Computer Graphics - the obvious thing is CS559 (Computer Graphics). The class varies based on who is teaching it, but the foundations are a constant. The background to do graphics (math and programming) may not be explicit pre-requsities, but you will have a better understanding of graphics if you have good math skills. Knowing how to build interactive software (e.g., from CS571) is valuable too.
Robotics - there is no specific robotics class in CS. I do recommend taking the graphics class because the spatial thinking is really valuable. The robotics class in Mech Eng is great - but very hands on (how to put robots together). Classes in topics related to robotics (AI, Vision, Learning, HCI) are useful background as well.
Visualization - the CS (data) visualization classes are CS565 and CS765. You will get a bit of visualization (especially the practical aspects) from other classes (e.g., CS320). There are other “visualization” courses scattered about the university - there is a psych class that focuses on the perceptual elements, a geography class that focuses on maps, etc. Being a good interactive systems programmer is an important skill here (e.g., CS571). The methodologies of studying human-centric systems in a rigorous way (HCI - CS570/571) is valuable as well.
Undergraduate Research / Projects?
Research is about creating new things. How can you create new things if you don’t understand the foundations and what exists? You need to know what to build off of, and you need to know what exists (otherwise, how do you know that what you are doing is new?).
An advantage to a “research project” is that it involves follow through: it isn’t enough to just do something, you must understand it, document it, put it in the context of what else is known, make sure it is really correct, … Projects done for others often have these properties.
It is possible for undergrads to be involved in research, even without a lot of experience. The key word is “involved” - because research is a team sport. You may not have the experience to provide context - someone else can provide that; but that means you must have a different role on the team.
Note: I generally cannot provide “consulting” for students’ personal projects.
Projects vs. Research
Not all cool projects are “research”. Often, you make something which isn’t necessary creating new knowledge but is creating something interesting. Sometimes this might be “development” or “engineering”, but sometimes it is just learning.
The biggest difference is the goal. The goal of research is to create new knowledge. The goal of a project might be to create new knowledge (in which case it is a research project), but there might be some other goal. A goal might be to learn something, or to get experience, or to make something useful, or…
Note that the coursework at the university is directed study it is not necessarily “research.”
If you are an undergrad, you probably want to do a project - you want the experience to learn from, and to show that you have had project experience. If you create new knowledge (or help a team create new knowledge) that’s a bonus. A more realistic goal might be to prepare yourself to work on longer term research someday.
Why do a Project / Research?
Make sure you know why you want to do this, not just take a class.
A few (good) answers:
- It’s a way to learn about something you cannot learn about in class.
- It’s a way to apply what you’ve learned to make something bigger.
- It’s a chance to experience having to work in a more project-oriented (self-directed, open-ended) way.
- It’s a chance to get more real practice with the skills you are trying to pick up.
- It’s a way to get really deep into something that you are really interesting in / passionate about.
- It’s a way to get experience working with people who are also passionate about these topics. (Yes, there is irony that independent projects are a good way to work with others).
There are many more good answers. Less good answers include “I want to learn something that I could have learned in a class in a different setting” or “I don’t want to learn in the structured environment of a class.”
If your answer is “because it will help me get into grad school” - be careful, since the next question is “why do you want to go to grad school?” (which gets back to the answers above).
What kinds of projects?
If you’re really interested in graphics, robotics, visualization, …, you may not need someone to give you a project. While some guidance can be useful, there is a lot to be said for taking the initiative to learn about the things that most interest you. Have a passion project: it will drive you farther and better.
Think about things that build your portfolio. I often ask people “what’s the coolest thing you’ve made”. An animation, game, website, or something that you made because you were excited about it and driven by your own curiosity and interests is more likely to interesting than a “I did what a professor asked me to do” answer. (Nothing against doing projects for Professors - since they often show your ability to work with people, to take direction, …) Passion projects not only show your skill but they also show your initiative and ability to solve problems independently and …
If you aren’t driven by curiosity and interests, then you might want to question yourself as to why you want to work on a project.
Do I need to do a project with a Professor?
There are advantages to doing a project in a formal setting. It is good to show that you can work well when supervised. That you can solve problems that someone else gives you (otherwise, you might just pick easy things). To have someone who can force you to follow through…
That said: there is a lot to be said for doing a project on your own or with your friends.
It is good to show that you have enough interest and drive to do something. That you can work independently. That you have enough creativity and self-direction to do something without a Professor telling you what to do.
Ideally, in your undergrad career you will have a mix. Some hobby/passion projects where you do something you really care about and are interested in as a way to develop your interests and skills. And some project where you work in a supervised setting that shows you can do hard things, work with others, and follow things through to completion.
For example, if you are interested in graphics… make a game; make an animation; make an interactive VR experience; make some cool art; etc. Doing this will kindle your interest in the field, give you an opportunity to broaden and sharpen your skill set, give you a portfolio of accomplishments, … Plus, you can make something cool.
(I’ll say it again) If you aren’t driven by curiosity and interests, then you might want to question yourself as to why you want to work on a project.
Can I do a project with you?
I supervise a decent number of undergraduate projects (some of which are legitimately research). However, I am limited in how many I can supervise. Supervising a project takes time and effort from me (and usually from one of the graduate students who works with me as well).
It is my job (as a Professor) to educate students - mentoring students doing projects is one way I do that.
To be blunt, supervising undergrad projects isn’t an efficient use of my time. I can lecture to an undergrad class and educate many students are a time (I’ve taught computer graphics to over 200). So, if I am going to do it, I have to have some other incentive. Usually, this means that the project needs to be something I am interested in, and need some help getting done.
Therefore, with a project, there is usually something you are already able to do that we build on.
Also, I probably do not have enough time myself to adequately mentor and supervise you. Therefore, if we work together, I will have some other person (a graduate student or post-doc) involved to help me mentor you.
Undergrad Research in Other Fields
In many other fields, there is pressure / incentive to get “younger” students involved in “research” right away. A lot of the reasons don’t apply to computer science:
In CS, there is less you can do without training. In other fields, there are often tasks that you can do with limited skills. For example, in a biology / chemistry lab you can always wash test tubes.
In CS, we aren’t so desperate for students to do menial labor. In a biology / chemistry lab, they are often looking for cheap test tube washers.
In CS, there are plenty of “personal projects” you can do to develop your skills and explore your interests. You can make stuff yourself. This is much harder to do in other fields.
In CS, there is tons of cool and interesting stuff to do that is “making stuff” - good projects that aren’t necessarily research.
Why can’t I be a volunteer?
I usually do not work with people who are volunteers. There are exceptions, but these are usually not for new people starting out.
When I pay someone (either with credit or money), both sides are accountable. There is a formalization of the commitment. I am promising to provide enough mentoring/support that you can do things to get the pay. You are committing to doing enough to receive the pay. I find with volunteers, it is too easy for me (and other mentors) to ignore you.
Many students (see “If you are not a Wisconsin student”) say they are “self-supported”. This might cover the financial aspects. However, there is a significant cost to having a person work with us. The biggest resource bottleneck is our time: we only have so much time/energy to devote to mentoring project students. There are also other costs both financially (resources like computing and lab space) and conceptually (like the opportunity to do other things).
But I need to have some contact with a Professor
Having a directed study experience is probably good for you (see above).
If you want to go to do something after graduation (graduate school, a good job, …), project experience is really valuable since it provides a different set of skills (the ability to be self-directed yet work as part of a team, …).
The blunt thing: if all you do is take classes, if you need reference letters (for graduate school or a job), (at best) all you can get is a “did well in class” (DWIC) letter. This is probably not good enough for what you want. Especially since at Wisconsin, our undergraduate classes are so large, and grades alone don’t tell us much (especially in these big classes). See Reference Letters for Students in Classes
So, I understand your pain: you need to demonstrate your abilities to someone so they can be a reference, but with so many students in a similar situation, we can’t do this for everyone.
What can you do?
Some thoughts:
- Take the appropriate classes. Make sure you have the solid and formal background.
- Take classes with me. I tend to prefer students who have been through a class with me (it’s not a requirement). It means that you know me, and I know you at least a little. Plus, my classes are usually relevant.
- Have some project experience that shows your skills and interests. You personal hobby project is possibly more relevant than good grades in a bunch of classes. It shows you have enough interest to do something on your own, and often involves relevant skills. Knowing how to do 3D modeling,
- Do things to explore your interests. The fact that you take initiative to learn about your interests shows that you really are interested.
- Build your portfolio, and present it well. Having a nice web page that shows off your projects is often more useful than a resume listing that you took standard courses.
Some thoughts on pursuing graphics/robotics/vr/vis related topics on your own:
Learn art tools. You will need to be able to use tools to make stuff, even if your focus is on building your own software. Learn to use a 3D modeling program (Blender or Maya). Learn to make web pages since you’ll want to show off anything you make (I’ve been trying to use static web page generators). Learn to edit video, … Lots of the best software is available to students for free. You aren’t going to be taught these things in a class, but they are really useful skills.
Learn libraries/frameworks/engines.
- Unity Game Engine (or Unreal) Being able to work with a game engine (we tend to use Unity since its easier to get started with) is a great way to do 3D projects. A lot of things we do in research we like to do in a game engine. It’s the best way to make VR experiences.
- Vue.js (or React.js) Any non-trivial web project will probably use a framework. We use Vue in our group, but it is not as common as React.
- D3.js (or Vega Lite) This is a useful JS library for making visualizations.
- ROS (the Robot Operating System)
Become a better programmer. Practice building complex stuff. Become more fluent with the tools. (every day I learn a new feature in Visual Studio Code). Try seeing if you can use the debugger to trace through some code you found on the web. Pick up a new programming language (If you’re not a Python expert, you should be. Several people have been telling me the joy of programming is Rust. …)
With any of these things: don’t just learn the thing for its own sake. Pick something to do with it and try to do it. Make something. This can both motivate your learning as well as force you to develop some follow through. Make a game or interactive experience, or an animation, or website, or…
If you are not a Wisconsin student
I cannot host visiting “interns” - in order to work with me on an undergraduate project you must be an enrolled Wisconsin student. Limited exceptions might be possible for students who either were recently Wisconsin students (e.g., after you graduate) or going to be Wisconsin students (e.g., about to matriculate). And, in really unusual cases, there are REU opportunities.
From time to time, I may have funding to support “Research Experiences for Undergraduates” (REUs) - the funding that supports this only applies to students who are (1) U.S. citizens (or permanent residents) and (2) enrolled at a U.S. University. This is one case where I can work with someone who is not a Wisconsin student.