Advice on Undergraduate CS Research at UofT

Published: August 12, 2024

Last updated: September 24, 2024

~15 min read


Table of Contents

Preamble

Throughout my time at the University of Toronto (UofT), I have had the privilege of engaging in a variety of research opportunities. To be honest, research hasn’t felt much easier than when I first started, but I have had a lot of fun along the way. Having graduated in June 2024, I wanted to distill my personal successes, failures, experiences, and regrets into a series of tips and advice. My hope is that this can help to demystify undergraduate research and make it more accessible. Since I am writing primarily from anecdotal experience, this blog will probably be most applicable to Computer Science (CS) students at the UofT (of which I was one). However, I hope my advice can extend somewhat to other programs and schools as well.

Why Research?

Although research is not everyone’s cup of tea, I think every student should strongly consider it as an option. In particular, for students:

  • Set on academia. You will likely need no convincing here, but I would like to emphasize the following: There is a joke along the lines of “these days, you need to do a PhD before getting a PhD”. Most graduate school applications require (1) three references that can speak to your research ability, (2) an essay describing your research interests, and (3) a resume of your past research experiences, which implies a decent level of research experience already under your belt. Not having any will severely weaken your application. This is all to say that undergraduate research is important for graduate school applications.
  • Set on industry. Research and industry overlap more than you may think. There are plenty of industry research positions that will look for undergraduate research experience. Conversely, there are many applied industry-like research projects and, in fact, it is not uncommon for startups to be founded by academics or spin out of academic labs (e.g., Deep Genomics, CentML, Waabi). Finally, research projects look good on a resume, since they are novel, complex, and impactful (or can be framed in this way at least). For students without job experience, an option could be first to secure a research position and build your portfolio through it.
  • Who are unsure. In addition to the above points, UofT is a strong CS institution and we have some amazing researchers here. Since you are already here, why not give research a try?

Finally, I would like to dispel the misconception that research can only be approached by the most experienced or academically strongest students. At least for undergraduates, research is all about learning and I think most supervisors understand this. So as long as the interest is there, I would encourage anybody to try getting involved in research.

Advice

If I have successfully convinced you, the following are pieces of advice concerning various aspects of undergraduate research. They cover topics from getting your first research position to applying to graduate school. No matter what stage you are at in your research journey, I hope there is something here that you find relevant and insightful.

Check out the UofT Undergraduate Research Hub

UofT recently created a hub for undergraduate research. If you are looking for more general, official, and university-endorsed advice, this is a great place to start. It also has an opportunities explorer that may be more up-to-date than what I list here.

Coursework

Beware the first assignment and test

The first assignment or test always trips up some incoming students, me included, since they come in with a high school work ethic. While people eventually adjust and recover, you might as well save yourself the stress. In particular, note that MAT137/157 is not at all like high school calculus since it is proof-based. If you are unfamiliar with proofs or mathematical writing, Chapters 1-4 of Prof. David Liu’s CSC165 notes are a comprehensive read. I will conclude by linking to this classic r/UofT copypasta.

Explore early while it is still easy

There is no better time to explore than your first year, in my opinion. This is because your coursework is comparatively light to upper years, you are less tied down by program requirements, and most importantly, you still have ample time to pursue other directions. Pivoting can be costly in upper years and delay your graduation, not to say that it is never a good choice. For these reasons, I recommend that students explore early. Instead of choosing a filler bird course, consider taking a course that you are actually interested in. Since UofT timetable deadlines are quite generous, you can also try out courses for a few weeks at the beginning of each semester and later drop or replace them as needed. Alternatively, you can simply audit lectures.

To incoming students, you may feel dead set on some field of study. However, university is very different from high school in that it offers a much broader and deeper range of courses. Maybe you will find a new interest and decide to pivot or double major. Maybe you will discover that you didn’t like your current field of study as much as you initially thought or, at least, enough to pursue a multi-year degree in it. In my first year, I came to UofT in the Life Sciences and wanting to do biochemistry, but I enrolled in some math and CS courses out of interest. My early explorations fortunately paid off because it turned out that I enjoyed CS a lot more. I ultimately decided to switch to CS, and since I did so in my first year, the process was relatively easy.

Caution with advanced courses and overloading

For certain subjects, UofT can offer multiple course versions, primarily differing in how applied and theoretical they are. Examples include MAT137/157, CSC263/265, and STA237/257. It is also possible to take graduate courses in CS and Math. Whether you should take “advanced” courses depends on a variety of factors, such as personal interest and desired workload. However, here are three considerations relevant to research:

  • Pro. Research requires you to know certain subjects at an advanced level, and courses are a nice way of gaining that knowledge and proving your mastery of it.
  • Pro. In CS research, you will almost certainly interact with mathematical reasoning and writing. Some advanced courses can build your mathematical maturity and problem-solving skills, which opens up the research you can understand and engage with.
  • Con. Advanced courses are a huge time sink, especially if you are aiming for a good mark. That time could be better spent on personal projects or research, from the perspective of both graduate school applications and job hunting.

Schedule planning is highly personal so I cannot give blanket advice to take specific courses. However, during your summers and upper years, I would suggest being more conservative about your course selection. Instead, focus on extracurriculars, applications, and research. For similar reasons, I don’t recommend overloading.

Take advantage of research courses

There are many thesis- or research-based courses at UofT, including ROP, CSC494/495H (not to be confused with CSC494Y which is a capstone project), BCB330/430, and ASIP (if you get an industry research position). These courses are great if you already intend on doing research, as they allow you to take one fewer course in the future. Unfortunately, they may have a competitive application process, you will have to pay tuition, and you may get marked. The silver lining is that most professors are lenient and you don’t necessarily need publishable results to get a 4.0. Overall, I would highly recommend research courses.

Plan for a light final year

There are multiple reasons to want a light final year. You might have to juggle school with graduate school or job applications. If you did ASIP, you will feel rusty from a year out of school. Most of all, don’t underestimate senioritis. If you save your CRs or finish your program requirements early, you can take fewer courses, significantly easier courses, or courses you actually enjoy in your final year. Your future self will be thankful.

Finding research

Don’t box yourself into computer science

Nowadays, you can put “computational” in front of just about any discipline. There are plenty of exciting interdisciplinary projects happening in other departments, so when looking for research, don’t limit yourself to CS faculty.

Apply to summer research programs

The following is a list of the CS or CS-adjacent summer research programs that I am currently aware of. Some of them are paid or have an attached monetary award:

  • ROP, CSC494, and other research courses
  • The Work Study Program, which has a research stream
  • Summer research exchanges
  • NSERC USRA and UTEA (which are also offered by many departments outside of CS)
  • Summer Undergraduate Data Science (SUDS) Opportunities Program
  • Dunlap Institute’s SURP in Astronomy & Astrophysics
  • Fields Undergraduate Summer Research Program (FUSRP)
  • T-CAIREM AI in Medicine Summer Student Research Program
  • Laidlaw Scholars Program
  • Google’s Summer of Code

If you would like to contribute to this list, please reach out to me!

Skim the research project boards

Research courses and programs are often presented in the broader context of a project board (e.g., the UofT USRA page). Even if you don’t plan on applying, I highly recommend reading through any project board since it provides:

  1. A nice compilation of some active areas of research
  2. The current research interests of various professors
  3. Which professors are currently taking in undergraduate students

You may want to reach out to professors on the project board if you are ineligible for a program or are looking for other research opportunities.

Research who you cold email

When cold emailing, it is important to familiarize yourself with the recipient’s research and show that you have done so. Most researchers have a lab page that nicely packages all the information you will need to cold email them. Be sure to check this website, since it might tell you whether they are accepting students or provide instructions to prospective applicants. In your email, convey your interest in a specific and genuine manner, mention some of their work, and maybe propose some research directions of mutual interest. Also include your transcript and CV (curriculum vitae, not to be confused with resume or cover letter). Do not Mad Lib a template, which is efficient but (I think) less successful in the long run.

One tip I have heard before is to reach out to post-docs or graduate students since they tend to be more responsive. That is not to say you should blanket email everyone within a research group but contacting a few students whose work you are most interested in sounds like a sensible strategy.

Ask about supervision style and lab culture

Professors can have a variety of supervision styles, differing in support and structure. One professor might work closely with you, while another might leave you to work under a graduate student. Some professors place an unhealthy amount of pressure on their students. In any case, supervision style makes a big difference in the quality of your research experience, so be sure to consider it. I recommend asking a professor’s graduate students or research assistants about what working in their lab is like.

Note that each style has its strengths and weaknesses. For more experienced research students, a laissez-faire supervisor can give the freedom to explore, but newer students might prefer more explicit direction. A higher-pressure lab might be more prolific but also more stressful to work in. Of course, mental health should be a priority and toxic working conditions should never be tolerated. This makes it all the more important to ask these sorts of questions.

Explore industry research

Know that research internships exist in industry. For example, Google, Microsoft, Cohere, and the Vector Institute all have such positions. Industry research is a nice middle ground that allows you to explore research and industry simultaneously. Another bonus is that it often pays much more than academic programs. However, you will have to job hunt, which is competitive and tiring. Note that applications for industry positions can happen quite early, sometimes 8 months in advance of the start date. If you intend on applying to graduate school, you should also consider whether you can publish your work from the internship and the strength of the reference letter you can get out of it.

Explore student-led research

Another nice lower-stakes way of exploring research is through student-led research projects. These projects can be started or joined through clubs at UofT, such as UTMIST, UofT AI, and iGEM (shameless plug), or student competitions, such as Kaggle or datathons. Alternatively, you could try to continue a course assignment. Despite its lower bar to entry, it is quite a bit more difficult to get publishable results since you run into logistical barriers that would have otherwise been taken care of by a lab, such as securing compute and coordinating people. Nonetheless, I think student-led research is rewarding and well worth it, especially for large collaborative projects since it is always fun to work with friends and meet new people.

For those hoping to start a project, I have two pieces of advice that I think will increase its chances of success. First, find a professor or graduate student to act as an advisor; they can help with acquiring resources and give invaluable guidance. Second, set an objective that is not publishing but still something you would be satisfied with completing. Having something concrete to work towards gives a sense of progress and keeps people motivated. However, I don’t think this goal should be a publication due to how risky and high-commitment they are. Instead, work towards something smaller in scope, such as a competition, undergraduate conference, workshop, preprint, or side project. That way, even if the publication plans fall through, everyone can still walk away with something that benefits their portfolio.

Doing research

As a research student, your responsibilities may include literature review, formulating new algorithms, proving mathematical results, designing and implementing experiments, reviewing code, regular meetings with your supervisor or lab, writing papers, and more. It really depends on your research project and supervisor though. Regardless, the following are some widely-applicable pieces of advice towards making the most out of any research opportunity.

Expect catastrophic failure

When I first started research, I had in mind an ideal of a researcher persisting relentlessly through failure after failure until they finally make the winning discovery (and the crowd applauds). Of course, the moral of this story would be that persistence is crucial to research because failure is common. While I couldn’t agree more, I have come to realize that a good portion of projects seem to fail irrecoverably, requiring you to pivot or start from scratch. In principle, one could pursue these failing ideas forever until they work, but we only have so much time as undergraduates. At some point, it is just more productive to move on. How to best make that decision is something I am still trying to figure out today. In the lucky case, you can prove or intuit why something will never work, but it is usually not so clear-cut. In short, while persistence is a key quality of a good researcher, I think just as much is knowing when to give up. And while giving up never feels good, I think it is important to acknowledge that it is okay and sometimes the best option.

Make mistakes and ask questions

Don’t be afraid to make mistakes and ask dumb questions. I think everyone knows this on some logical level but it is still difficult to break free from imposter syndrome and the fear of looking stupid. The way I reassure myself is that, as undergraduates, our primary goal is not to make publication-quality work but to grow our research skills. Learning from mistakes and asking questions is a natural and important part of that journey, and any lab that does not recognize this is not worth your time anyway.

Figure out your limits and play within them

Research can be a big commitment, and what you get out of it is proportional to the time you put into it (plus a luck factor). During my undergraduate, one mistake I made was stretching myself too thin. I would overestimate my spare time and take on too many simultaneous research projects. This would slow me down to the point that doing each project sequentially would have been more efficient, not to mention less stressful. In CS terms, multi-threaded research rarely works; the context switches make it hard to progress and build momentum. In general, I recommend focusing on the depth of your research experiences as opposed to the breadth or number of them, unless you are trying to explore. Sometimes, you might overcommit and have to step away from positions, and that is okay. Ultimately, how much you can handle depends on your capacity, so be mindful of your limits to make the most out of your research experiences.

Effective communication matters

One thing I have come to better appreciate is the importance of communication in research. It is commonly said that even the best research is as good as useless if nobody can understand or interact with it. I would go a step further and say that taking the extra time to make your research more accessible can really increase its impact. This can include writing papers with a broader audience in mind, keeping codebases clean and extensible, and even marketing your work on social media. Some labs will have research students develop a website or interface for their work, and while this might not sound as glamorous as “traditional research”, I think its importance should not be understated.

Get to know your labmates

Don’t forget to participate in research culture: attend lab meetings and socials, check out some conferences, and get to know your labmates outside of work. It is easy to tunnel in on your own research project (I am definitely guilty). But with so many people at UofT working on cool things and research becoming ever more collaborative, it would almost be a shame to do so. Plus, I think it is always insightful to talk to other researchers.

Graduate school applications

Should you go to graduate school and, if so, what does a competitive application look like? To be honest, I have no idea. I have not even begun graduate school. Maybe in a couple of years, I may figure something out, after which I will make a new post. For now, I will give my biggest piece of application advice and then defer to resources written by more experienced people.

Start early

If you are interested in graduate school, start thinking about your application a year in advance of the deadline. This sounds extreme, but there is a lot to consider. To name a few major items:

  • Why graduate school? What do you plan on researching? These are important questions for introspection, but also for your application essays.
  • Which schools and programs will you apply to? In choosing this, you will have to balance research fit, location, campus culture, funding, prestige, and competitiveness. The Masters vs. direct-entry PhD question is another can of worms.
  • Who would you like to be supervised by? Applications will ask you to indicate some prospective supervisors. Here, it is important to give a good answer since research fit is crucial, especially if professors have the power to recommend students. To do so, you should go through the university’s faculty list and see what professors are currently working on and whether they are accepting students. You might also want to reach out to prospective supervisors before the application period to build rapport.
  • Do your programs require the GRE or other tests? Studying for and taking the GRE can take a couple of months.
  • Can you secure three strong letters of recommendation? If not, you might want to take on more research positions.

Of course, starting early is neither necessary nor sufficient for a successful application, but it will certainly save you a lot of stress.

Resources

Here are the resources that I found most helpful when applying:

  • CMU Prof. Mor Harchol-Balter’s guide on PhD applications in general
  • MIT’s guide on the statement of purpose (SoP), which includes commentary from professors on what they look for
  • Berkeley’s guide on the SoP and personal statement, which are in fact two different things
  • This Notion page compiles the SoPs of admitted CS graduate students from various universities
  • This paper reviews some common mistakes made by psychology graduate applicants, but I found its insights applicable to CS: Appleby, D. C., & Appleby, K. M. (2006). Kisses of Death in the Graduate School Application Process. Teaching of Psychology, 33(1), 19-24.
  • WriteIvy’s blog post, Structure is Magic (A Guide to the Graduate SOP), suggests a hero’s journey-structured SoP. I did not have the writing chops to pull this off, but I like the general idea of organizing your experiences into some kind of story.
  • Reddit (r/gradadmissions), which was amazing for finding resources but I would avoid the profile evaluation posts

Closing Thoughts

I would like to end with three comments. First, although I have tried to incorporate insights from peers and professors, this has primarily been a reflection of my personal experiences. I have probably missed some things or gotten things wrong, so please feel free to comment below with your thoughts, comments, and criticisms. Second, I would like to frame research as a personal journey that should be enjoyed - at least, while your degree doesn’t depend on it. Don’t worry about optimizing or following advice to a tee; many valid roads lead to the same destination. Finally, I would like to wish everyone luck in their current and future research endeavours. I hope this post has been helpful towards that. Thanks for reading!

See Also

For other UofT students’ perspectives on courses, research, and internships, see:

Acknowledgements

Thanks to my mentors and colleagues from Prof. Alán Aspuru-Guzik’s Matter Lab, Prof. Roger Grosse’s group, and Deep Genomics for guiding and supporting me throughout my undergraduate research journey. Thanks, Prof. Mario Badr, Akiki Liang, Aviraj Newatia, Daniel Livshits, Danny Chen, Felix Zhang, Hanmin Kim, Raghav Arora, and Vedang Naik for the suggestions and feedback.