1st Summer of College: Introduction to Research
I did an REU program during my first summer of college, and boy did it make reconsider my life choices.
Originally, my life plan was pretty straightforward:
- Do well in my undergrad.
- Do some internships before graduating.
- Graduate and get a job.
Doing REU though, really got me interested in pursuing a research career and potentially doing a PhD.
Oh, I also became really interested in distributed system while going through the REU program.
This all kinda began with a conversation that I had with my intro to CS professor during his office hours. It went somewhat like this:
Professor: I’m thinking of moving the infrastructure of the course to a cloud, maybe using k8s? I don’t know if anyone’s willing to deal with that though.
Me (not knowing what k8s is): Sounds interesting, can I try that?
Professor: Yeah, sure.
Yep, I didn’t know what I signed up for.
Anyways, as soon as summer break started, I began my adventure into the magical world that is kubernetes.io.
The funny thing is, by the time that I started learning about k8s, I actually had no idea what Docker is. It went as well as you could probably imagine.
This is more or less me during that time period:
Thankfully, after figuring out Docker, everything starts making sense. This is more or less my first exposure to microservices architecture model. I didn’t get the chance to learn about it from my freshman year courses, so I was instantly drawn to it. It’s just really exciting to learn a whole new way of doing things.
I have to admit, getting thrown into the rabbit hole that is k8s without any knowledge about it was wild. I think I learned way more things about software engineering from my summer work alone than one year of freshman courses. I remember feeling a weird sense of accomplishment for finally understanding this joke:
Aside from doing work with k8s, I also did some parallel computing research using MPI after getting recommendation from another professor to work with a research center. This was my first introduction to a realistic codebase: it’s huge, it’s scary, and it’s confusing.
Over the course of working with this codebase, I had a lot of interesting experience which I learned a lot from:
- Waiting 10 minutes for my code to compile because I didn’t know that
make -jis a thing.
- Waiting 30 minutes to run test cases because, again, I didn’t know I can run make in parallel.
- Dealing with dependency hell and huge amount of lag on my laptop as my access to the cluster that I’m supposed to be working on was given late.
The experience of working with such a huge codebase made me realize that simply learning from my courses was not enough. It finally made sense to me why we do the stuff that we do: write test cases, use version control, etc.
Of course, professors have repeatedly told us why we need to follow best practices. But, getting told the reason why we should do something and experiencing it first-hand is just so different.
Doing summer REU was a real great decision. I learned so much stuff and experienced so much things that I cannot possibly write them all here.
Because I enjoyed it so much, I actually decided to continue both of my summer works part-time during the semester when I was offered the chance to do so.