Learnings From Undergraduate Research


This blog post is a collection of thoughts and learnings I gathered from my experience as an undergraduate research student in Computer Science, mainly focused around what worked well for me and helped me get into graduate school. I sometimes have friends or younger undergraduate students asking me for advice about PhD applications and doing research in general as an undergraduate student. This post contains my thoughts about a few different topics which I hope will be helpful for other students considering graduate school: (i) Whether or not to pursue a PhD, (ii) what are different ways to reach out to professors as an undergraduate, and (iii) how to build up a strong research profile for graduate applications.

There are many great tutorials and blog posts that give more comprehensive steps or plans for reaching graduate school, which I highly recommend looking into. This post will contain additional points which I found helpful when told to me directly as an undergraduate research student. As always, feedback is welcome!

Phase 1: Deciding on Graduate School

The first step along the journey to graduate school is deciding whether or not you want to pursue higher education beyond a bachelor’s or master’s degree. There is an amazing preliminary discussion about this in Andrej Karpathy’s “Survival Guide to a PhD”, which I highly recommend checking out. To reiterate a few important points: A PhD requires lots of mental stamina and curiosity about your research subject - it is very much a marathon, not a race. You will receive a lot of critical feedback on your research work, writing, and presentational skills, but you also get the chance to work alongside many brilliant students and professors, and learn things from them. If educational achievement, curiosity in your subject, or the desire to build something new drives you, it could be signs that pursuing a PhD would be worthwhile.

One thing which I will add is that if you plan to go into industry and salary is a major financial consideration for you doing a PhD, then it may be worth looking more into the salary range of people with and without PhD degrees in your field first. Depending on the subject and department, a PhD can take around 6 years to complete, which is a significant period of time in your life. Someone who completes undergrad in the same year as you, enters the workforce, and receives several promotions by the time you enter the workforce with a PhD in hand may make a higher salary than you, which was not immediately obvious to me as an undergraduate. This may or may not be a deciding factor for you; for some positions (e.g. research scientist positions in AI), a PhD is commonly required or expected as qualification for the job anyways, which might make the decision for you if you want a similar position.

For my own part, a desire to pursue higher education and a genuine curiosity about Computer Science (CS) and Artificial Intelligence (AI) was already set in my head by the time I was in my second year of undergrad. Both of my parents had earned master’s degrees after immigrating into the U.S., and I saw PhD programs as a convenient way to pursue higher education which would be funded if I did research, and which would get me closer to my goal of becoming an AI research scientist (which often required a PhD anyways).

Phase 2: How Do I Get Started?

If you have decided to give research a try, there comes a difficult phase where you do not have experience in your field or subject, yet need to convince others to give you an opportunity so that you can begin learning and receiving research mentorship. This phase can be a bit daunting, but the good news is that there are many things you can do on your own to learn and develop your profile before you approach research professors and labs for positions!

Things to invest time in at the beginning

  1. University courses in your subject
    • The most straightforward course of action is to take courses at your university or online as early as possible in your subject of interest. Be active in your course; the course material and assignments will introduce you to important concepts in your subject, however there will also be opportunities to do projects which can develop into major profile-building projects depending on how much effort you invest in them. The professor teaching the course may also be involved in their own research, or may know of other professors in the same department who works in the general subject, which can be a great way for you to find initial professors to work with. Making a good impression and attending lectures/office hours is a good way to get exposure to professors in person.
    • The goal of taking courses is to get basic understanding of major concepts needed to work in your field, and to add course projects or other activities associated with the course to your CV.
  2. Online courses and certifications (Coursera, Udemy)
    • In addition to university courses (or possibly as a supplement), you can also do online courses and certifications to build more skills and credentials to advertise on your profile. These courses can either be free or cost some money - I highly recommend Coursera for Computer Science courses. There is some debate over the value of these online courses, however what is not debatable is that going out of your way to do extra certifications and improve your skills demonstrates some measure of self-motivation, which itself is valuable if you can speak in interviews about how you are trying to improve your skills. These online certifications also often have you do additional projects, which gives you additional opportunities to add projects to your profile.
    • Looking back at my own career development, one hidden benefit of doing online courses early on was that it allowed me to take courses and learn Machine Learning concepts years before I would normally take them in my degree program. By doing Machine Learning and Data Science certifications in my freshman year of undergrad, I was two years ahead of taking the same courses at my university (based on course progressions in my degree plan), which taught me just enough to begin working in research labs earlier on in undergrad. In general, exposure to your subject of interest early on and as often as possible can be a big accelerator, since you need time to develop your research profile during undergrad.
  3. Personal projects
    • Personal projects can be extensions of projects which you worked on in courses, or can be completely separate projects which you pursue in your spare time. Personal projects demonstrate your motivation to get hands-on with building something in your research subject - for Computer Science, this usually involves software applications, and for AI this usually involves training Machine Learning (ML) models on datasets which you are interested in. In general, if you are interested in a particular dataset, domain, model architecture, or concept, consider doing a project using it to put on your CV. This can be especially beneficial if you reach out in the future to research labs which use similar models or techniques.
    • Coming up with ideas for projects can be difficult - in general, I would recommend picking something you are genuinely interested in and would be willing to work on for potentially several months. That will increase your chances that you will finish and deploy the project somewhere that is publicly visible, which is what is needed to build up your CV with hands-on experience in the beginning. For my first two projects as a beginner CS student, I created a hurricane tracking mobile application and a calorie/nutrient tracking app for my phone, both of which had avenues where I could integrate AI through chat assistants or image recognition.
    • Personal projects is another phase where you will realize whether or not you like working and getting hands-on with your research subject, which can inform you on whether you have the stamina to work and research in some topic deeply for many years without getting burned out. You should aim to create open-source code or presentations which you can share with others who are interested in seeing what you did with your project.
  4. Hackathons or competitions
    • Aside from being fun competitions, hackathons can be great launching points for projects and career development opportunities for Computer Science undergraduates (and other majors!). They offer challenges for programming teams to address through software and/or hardware projects, which adds projects to your CV and exposes you to a large variety of programming languages, software, topics, and people. Recruiters from companies and research labs also attend hackathons, which can in some cases lead directly to internships and work experience.
    • Hackathons also bring a great attitude of self-motivated project building and competitive programming, which is a great mentality to carry and looks good on resumes.
    • As a fun personal anecdote: I first got into Machine Learning through an online hackathon in Summer of 2020. A friend of mines convinced me to signup for a Machine Learning hackathon since it was online (during the COVID-19 pandemic) and had a large prize pool sponsored by AWS & NVIDIA. The hackathon lasted 3 weeks long was focused on anomaly detection in environmental sensor data gathered from greenhouses in Seattle. My friend ended up not participating in the hackathon because of other events she wanted to attend, but I decided to give it a go anyways and went in alone. I spent the first week studying libraries like Numpy and Pandas (I was quite new to Python at the time), and spent the second week reviewing basic neural networks and ML libraries like Pytorch and Keras. Finally, in the third week, I tinkered around with the autoencoder tutorials which the hackathon organizers from AWS had posted as a starting point for projects. After some hyperparameter tuning, I was able to get decent reconstruction of the sensor data on the validation set, and I then focused on trying to use autoencoder reconstructions to flag anomalous sensor readings. University courses were starting soon in August, so I quickly wrote an evaluation function to detect anomalies based the duration and magnitude of autoencoder reconstruction error, with the idea that the autoencoder will have a difficult time reconstructing anomalous data points that do not occur in clean training data. I recorded a presentation and submitted it at the deadline, and went off for another semester of CS courses. To my surprise, an email came back in a week saying that I had placed third in the competition! The look on my father’s face when he learned that I had earned some prize money by sitting at home for three weeks alone made the whole experience worth it for me, and I soon after joined a Computer Vision research lab at my university as an undergraduate research assistant.
  5. Student organizations
    • Student organizations can be a great way to get around other students with the same mindset as you, and bring you in contact with more opportunities than you will be able to find alone. Depending on the subject and field, these organizations can potentially connect you with career development opportunities (career fairs, mixers, alumni chats) as well as tutoring sessions and events to attend in your subject.

Investing time in 3-4 of these as an undergraduate demonstrates a lot of self-motivation, and it strengthens your resume before you have to step in front of recruiters or research labs. In the end, you are always trying to demonstrate that you have the skills and consistent work ethic to stay in a research lab and make progress on research projects and questions which they are interested in. Having multiple of these experiences on your CV demonstrates that you have put in a lot of effort on your own already, and will likely put in a lot of effort if they take a chance and recruit you as an undergraduate research student. It also serves multiple other purposes: (i) you will be exposed to tools, programming languages, software, theory, or other concepts from your field early on, and (ii) if it turns out that you are not as interested in the field as you originally thought, you will likely find that earlier on while trying to motivate yourself to do these things, and you can re-focus on other subjects or career paths.

One heuristic which worked well for me as an undergraduate was to find people 3-4 years ahead of me in positions which I wanted to reach, and either emulate what they did to reach that point or surround myself with those people as much as I possibly could. In my first and second year of undergrad I knew that I wanted to enter PhD programs in Computer Science and AI research, so my plan looked something like: Find profiles for competitive CS/AI PhD students on LinkedIn at major universities, and emulate what they did as undergraduate students. Surround myself with AI researchers and research students as much as possible Before joining research labs as an undergraduate research student, I did this by attending hackathons with Machine Learning challenges as well as student events related to data science and Machine Learning. After joining my first research lab, this happened by default. Working in-person in a graduate research lab alongside real PhD students directly surrounds you with the people whom you want to emulate, and those students can directly advise you on what worked and didn’t work for them to reach their position.

As a final thought on getting started in research, self-motivation and determination can go quite a long way in this phase. Many people I have met in research are extremely self-motivated, and are willing to invest many hours on their own studying and improving themselves in different ways to learn more about their subject of interest. Many people working in AI research actually do not have a Computer Science background, but instead come from Physics, Statistics, Engineering, Biology, and other fields, which goes to show that time investment and demonstrated skillset can have just as much impact as the subject which your degree is titled with.

How to Reach Out to Research Labs

Now that you have some experience and background knowledge about your subject of interest, you come to a point where you need to reach out to professors to try and secure a position as an undergraduate researcher so that you can officially do research with professors and graduate students. This is the most important process to get started as early on as possible as an undergraduate. Outside of professors who you have contact with through courses and events, reaching out will likely involve cold emailing professors asking about positions in their lab. I have seen various forms of cold emailing professors, which frequently goes something like:

Dear Professor X,

My name is Y, I am a student currently majoring in Z at the University of AA. My background is in B, and I am currently working on …

In the past I have worked on C, and I am familiar with D and E as well. I am potentially interested in your work on F, and would love to potentially work on that as a part of your lab. I {do/do not} require any funding, and will be available to work N hours per week.

I am interested in research positions for Summer/Fall this year, and wanted to inquire about potential research positions within your lab. Please let me know if you are available for a Zoom chat, looking forward to your response!

Sincerely,
Y

While this email is good and can work sometimes with professors, it has a major problem:

  • In order to give your email an answer, the professor reading this email has to judge based on your online profile alone whether or not to incorporate you as an undergraduate research student in their lab. Professors get numerous emails like these, and unless you are a standout candidate, the chances of the professor feeling strongly enough to respond to your email and offer you a position/interview are slim. This is because it is a large commitment for professors and graduate students to add someone to their lab - new people require training and time from other lab members to get up to speed, and the professor will have to dedicate some of their time to mentor and meet with you consistently.

Furthermore, there are a lot of soft skills which do not show up through an email and an online portfolio - your personality, spoken communication skills, and a lot of other things which you do not find out until you work with someone (understanding research project goals, making powerpoints, scheduling meetings, coding and managing experiments, organizational skills, communicating project updates and issues encountered, writing skills, etc). You want the professor to get to see your skills in these areas as well before making a decision yes/no to pick you up, and you ideally also want a graduate student in their lab to be rooting for you to join the lab (since the graduate student is who you will spend the majority of your time with, and the graduate student will much more quickly convince the professor to add you to their lab if they see your potential beforehand).

So how do you get to the point where a professor knows more about you, and a graduate student in their lab is rooting for you to join? Wording your initial email a bit differently can potentially help:

Dear Professor X,

My name is Y, I am a student currently majoring in Z at the University of AA. My background is in B, and I am currently working on …

I came across your lab’s research work on C, and find it quite interesting. I have worked on D and E in the past, and am interested in doing similar research in this area in order to gain more experience. If possible, I would be highly interested in joining any lab meetings or project meetings in your group related to this research area, to potentially contribute and become involved in the project with one of your graduate students as an assistant. If the project match works well, I would be available to work N hours per week on the project in collaboration with other students in your lab.

Please let me know if this is possible, and let me know if you would like more details on my background or would like to schedule an interview to discuss more. Looking forward to your response!

Best,
Y

This email contains much of the same information and intent as the previous email, however the major difference is in the question which the professor has to answer in order to respond to your email:

  • In this version of the email, all the professor has to agree to do is let you join as 1 additional face in their online or in-person lab meeting. This is a much more easier commitment for the professor to make, and importantly, it delays the point at which the professor has to say an official yes/no until after the professor and several graduate students have had a chance to interact with you in several research meetings. In these few meetings, it will become quickly apparent whether or not you match the research focus of the lab and have the background coding or basic skills to work with them. Advanced skills are not necessary to join a lab, but some indication of commitment and reliability as well as basic skills to conduct research is required. Joining a few lab meetings gives the professor and students a chance to see and evaluate you before having to commit, which can make their decision easier.
  • Doing research into the projects ongoing in research labs helps a lot here - the more you have looked at the labs projects and can mention the ones which suit your background and which you could contribute to, the more the professor will believe that you are genuinely interested in their research and will stick around their lab as a member.
    • Finding professors by looking on departmental websites and research lab websites can be difficult, especially since research lab websites are rarely updated. If you are finding it difficult to locate labs working on interesting projects, try going in the reverse direction - gather as many interesting papers, projects, and blog posts as you can find which you would be interested to work on, and then track back to what people/research labs released that research.
  • The email does not need to follow this phrasing specifically, but the general idea is to make the professor and graduate students commit less through email and delay the decision point until after they have interacted with you more in meetings and have (i) seen your potential which they initially notice from your online profile, and (ii) seen some indications of your soft skills, like how you speak and ask questions about research topics during meetings.

In my experience, professors are usually more willing to let potential students join a few meetings to evaluate them. In the first few meetings with new groups, I try to actively do a few things:

  1. Listen carefully about what research projects are being discussed, and how people in the lab communicate research updates and progress. If you cannot understand most of what they are saying, it might be an indication that their research projects are farther from your background experience than you originally thought, or there is a lot of domain knowledge which you will need to pick up to work effectively on their projects.
  2. Pay attention to which graduate students are leading meetings. Usually there will be 1 or 2 graduate students actively leading a research project, and potentially more students supporting them depending on how the lab chooses to structure research projects. Over time, you want to get close and become an assistant to one of the lead graduate students - this is the person who can teach you the most about that particular research topic and delegate tasks to you which will automatically get you involved in their research work.
    • In each lab I worked in as an undergraduate, I worked closely with 1 PhD student who became my mentor in the lab, and who taught me a lot as a prepared myself for graduate school. In exchange, I would contribute however I can to help that PhD student make progress on the project - coding, running experiments, reading and summarizing papers, writing manuscript drafts, or any other work they would be willing to delegate to me.
    • These relationships with mentoring graduate students can be the most beneficial - you will learn a lot directly and indirectly through osmosis from the graduate students in your lab. In addition, the PhD student will most likely be better at managing and finishing projects than you will be as an undergraduate, which increases your chances of being an author on published research papers compared to if you only did solo research projects during undergrad.

Building Up a Strong Research Profile

It is important to get research experience with labs as an undergraduate as early and as much as possible before you enter graduate school. It can be easy to settle into familiar surroundings and continue working in the same lab with the same people, but diversity in experience as an undergraduate can be very beneficial - remember, once you commit to a graduate school and a research lab for your PhD, you have much less mobility than when you are an undergraduate.

Here are a few benefits of working in multiple labs as an undergraduate:

  1. You become more experienced as an undergraduate researcher
    • Working with multiple labs and different people as an undergraduate student exposes you to multiple different working environments and advising styles of different professors and labs. In some labs, you will meet the professor multiple times per week, and work closely with them on ideas (and maybe even implementations), while in other labs you will have a check-in with the professor once a month, and will instead receive more direct feedback from postdocs, other PhD students, and more senior members of the lab. Experiencing multiple advising styles as an undergraduate can help you diagnose what advising style you respond well to, which will inform you when you are selecting a lab to join for your PhD.
    • In addition, by working with multiple research labs, you are increasing your chances of publishing multiple meaningful papers as a first or second author. Not every research project will work out, so increasing your chances by working on multiple things as an undergraduate mitigates your risk. Your goal should be to have a preprint paper, active paper submission, or if you start early enough, accepted paper, with each lab which you worked with by the time you submit PhD applications to universities. If most of your works are still preprints when you apply to graduate school, professors are usually understanding of that, especially if you are the first author of those preprint papers.
  2. You grow your connections
    • Working in multiple research labs means that you will have worked with multiple professors as an undergraduate student, ideally at several different institutions. This will mean that there are multiple professors at graduate institutions who can write recommendation letters on your behalf and discuss about your qualifications for going to graduate school. It looks strong on an application to have multiple professors rooting for you and your potential as a PhD student.
    • In addition, further into the future, these professors also stay as a part of your network. Relationships in research last very long, and by working with many different people over your career, you greatly increase your chances of being connected to academic/industry positions and other exciting opportunities by your network connections.
      • A fun way to think about this is to think about the two or three-hop connections in your research network. All the professors and graduate students you directly work with are 1-hop connections. All of the people they have worked with and connections they have made in their own career are your two-hop connections, which very quickly balloons to an enormous number. Links between institutes (e.g. if your PhD advisor is friends with research scientists at a certain company) also form strong connections to companies and institutes in your research network.
As a fun anecdote, I had an interview with a professor whose lab I was considering joining during my PhD applications. At that point, I had worked with four professors across several universities, both at my undergraduate institute (the University of Houston) as well as other universities. The professor I was interviewing introduced himself, and I quickly found out that this professor knew every almost every professor I had worked with either directly or indirectly; he had been faculty at a previous university with one of them, and knew the others through indirect research connections or by attending the same institutes. I learned that a major reason for him picking up my application out of the pool of emails he had received was that he had reason to believe in each of my research experiences, since he knew those professors and trusted their research, and by extension, the work I had done with them.

This is a fun story for me, but it hints at something bigger - reference letters and indirect connections form a large part of what researchers rely on when gauging if a new student or worker will perform well in their lab. When given a pool of candidates, a professor will pick an equal (or possibly even less-qualified student on paper) if they have more reason to believe in that candidates experience, such as if they know the professor or department whom you worked with.

Spending a few years working with different labs and gathering research experience goes a long way in preparing you for graduate school. As a final thought, it is important to see projects through to completion, meaning submission and publication in conferences or journals. Not every paper needs to be in a top conference or journal venue - you can publish much shorter workshop or symposium papers, which is totally fine! But you want to ensure that you reach publication and dissemination of your research ideas to the community through papers and code, so that you see the output of your work from each lab realized. As an undergraduate, my biggest regret is taking too long to realize that I myself can fight much more to have my smaller research projects published, which made me rush in my final year of undergrad to get publish or submit everything. Being your own biggest advocate is important, since other professors or graduate students will not necessarily be thinking about your research profile development as an undergrad.

As a final thought, looking at the phases I have outlined above, it is apparent that working with multiple research labs and building up your research profile can take several years, depending on how many things you are able to work on concurrently. Getting started early in your undergraduate career is a big benefit, in order to give yourself time to complete research projects and work with multiple labs and professors. But if you end up getting into research later on, don’t worry - if I would give myself one piece of advice from a few years into the future, I would tell myself to take my time and give myself more years to complete research and build up my profile (rather than trying to cram everything into a few years as I did in my last 1.5 years of undergrad). There are often postgraduate positions which you can take up after completing a bachelor’s degree but before making graduate applications, which pays a decent stipend and gives you an extra year or two to build up more research. I only learned that this was a good option after I had joined graduate school and interacted with more people who took different career paths to get into PhD programs.

Phase 4: How to Reach Out During PhD Applications

Now that you’ve built up your research profile, it is time to make applications for PhD programs. Applications can be a stressful and uncertain period, and it is difficult to get any guarantees on whether your application will be accepted or not. The applications which worked out best for me during my own graduate applications was situations where I knew professors at my target university and had some connection with them beforehand, either by directly working with them as an intern, through interviews in the fall semester during application season, or through indirect connections.

PhD applications usually require you to specify a few professors at that university whose research you are interested in, and whom you would potentially like to work with. The selection is important - these are the professors who can potentially pick up your application out of the pool of candidates, so you want to select professors who have similar research topics that you’ve worked in and who are likely to be accepting students (i.e. young professors who are growing their lab). Regarding the timeline for applications and interviews, one thing which I found helpful to do was:

  • A few months before I submit my application to the university (e.g. 2-3 months before December or January deadlines), I would email professors whom I intend to mention in my application. If it is a professor whom I have never worked withI would notify them politely that I am submitting my application and intend on mentioning them as a potential advisor since their research is interesting and fits my background. This gives a chance for the professor to either:
    • (1) Let you know in advance that they will not be able to accept students, which frees you to select another professor to improve your chances of selecting professors who might be looking for applications.
    • (2) or, schedule an interview with you if they find your profile interesting. This is the second way I have found to get in touch with professors. Interviews can range widely, but usually they involve presenting about your prior research work and experiences to the professor or one of their graduate students.

As a final thought, there is an uncertain time period where you have submitted applications and are waiting for results for several months, and it is unclear where you will get acceptances or not. Gauging your relative chances against other applicants can be difficult because of the numerous factors involved in graduate applications, but I will write out at a high-level my own applications and outcomes in hopes that it might inform and encourage other students who are applying.

Applications (ranked by relative connection to that university):

  • Tier 1: After working as a undergraduate research intern across a few labs, I submitted applications to two Computer Science graduate programs knowing that I already worked with at least one professor at that University (including the graduate program I am at now, at Yale University).
  • Tier 2: There were four more graduate programs I applied to where I did not directly work with any professor at the university, but I had reached out 1-2 months beforehand introducing, which led to strong interviews with those professors.
  • Tier 3: In remaining two graduate programs I applied to, I had not worked with any professors directly and did not get email responses from any of the professors. My research area (mainly graph representation learning), however, was related enough to the work of several professors there that it would be a decent research fit.

Outcomes:

  1. I received offers from one of my “Tier 1” universities, which I ended up accepting. At the other university, where the admissions committee of the university had stronger say relative to individual professors on graduate admissions, I did not receive an offer, which goes to show that nothing is ever completely guaranteed!
  2. I received offers from both of my “Tier 2” universities. The connections with both professors from the 2 graduate programs was strong in hindsight, in that those professors trusted my undergraduate research work (they knew my undergraduate advisors indirectly or directly), and my research area highly aligned with what they were working on. It is no coincidence that these two professors responded to my email when I reached out to them, and chose to interview me. My takeaway from this in hindsight is that you don’t need to work with every professor before applying to their lab as a PhD student; there are other ways you can find good research fit, if you select professors to reach out to carefully.
  3. I did not receive any offers from “Tier 3” universities, likely because I did not generate enough interaction with any professors at those institutes, and other professors were not looking for students with my research background.

Closing thoughts

I hope that this post contained useful information for organizing and strategizing about your own graduate applications! As an undergraduate myself, what often helped the most was hearing what other PhD students did to reach out and generate interaction with professors, since it was not immediately obvious to me that I could take certain steps (e.g. reaching out to professors months or years in advance to submitting my PhD application) that would greatly increase my chances at getting accepted into some PhD program.