Uni life year-in-review
So it has been almost two years since my last post and I have to admit this one is definitely long overdue. But between all the school works and job hunting, it just felt like I never had the time and mental energy to sit down and reflect on what had happened in the past two years. And I have to admit, it’s getting more and more difficult to recall everything that has happened in the last two years. Memories that were once clear are now blurry and confusing. Though I am not entirely sure if this has something to do with the increasing amount of caffeine that I have been consuming.
Anyways, a lot had happened in the past two years. Some of them were good, some of them were bad and some of them were really ugly. But here we are, two years later, at least still in one piece. So I guess that’s somewhat a good sign. One thing definitely remained the same over the course of these two years is my horrible writing skills. This document has remained open in my laptop for almost 2 weeks before I began writing down the first sentence. And of course, that’s after drinking almost half bottle of wine. Welp, alcohol is a very interesting thing for sure ¯_(ツ)_/¯.
School has always been kind of hit and miss. Overall, the amount of the course load and stress grow roughly at O(n) rate every semester. Though luckily, the amount of support I got from my friends was growing at O(n^2). Here’s a funny thing with human memories: it is way better at retaining the great and awesome moments than the bad ones.
The CS courses that I have been taking have definitely become more and more interesting, especially some of the third and fourth year courses. Some of the best and most fun courses I have taken were: CS 241E Enriched Compiler, CS 246E Enriched OOP, CS 442 Programming Language. Nevertheless, it is important to note that experience with these courses vary greatly depending on the professor that is teaching it during that term, and I was lucky enough to have some of the best CS professors in the faculty.
The content of the CS 241E was fairly standard introduction to the general compiler constructs, including parsing, tokenization, DFA/NFAs, code generation and garbage collection. However, this course was my first introduction to Scala, one of my favorite programming languages until this day. It was taught by Ondřej Lhoták, and Ondřej was one of the few professors that I met who actually does care about his students. I remember once after I spent two days desperately trying to debug a weird issue of my compiler, I came to Ondřej for help. He actually sat down and spend hours running through my code on his own laptop trying to find the bug.
When I first took this course, it was the first time this course was offered. This course was taught by Brad Lushman. CS 246E is, without any doubt, the course with the heaviest course load among all CS courses that I have taken. I am not sure if it was designed to be like that or it was simply because it was the first time it was offered. I remember for the final project of the course, I spent almost two weeks sleeping in MC Comfy (a very sketchy part of UWaterloo) trying to finish it. I was only able to go home in the morning when I woke up to take a shower. However, this was also the course where I developed my special emotional attachment to Vim because it is exactly the final project of this course: implementing Vim. I have tried so many times to move off Vim to Emacs or other IDEs/text editors so many times, none of my attempts succeeded.
So, was the course worth it? HELL YEAH. The most significant characteristic of Brad’s courses is he tries to shovel as much content as possible into a single course. And during lectures, he has always been able to somehow present it in the way that is digestible by a regular student. But does that mean it is enjoyable? NO! Nevertheless, the difference between the level of understanding I had for C++ before and after I took the course was like night and day. Brad took us from the surface of the world of C++ to its darkness corners.
This course was my third encounter with Brad Lushman in less than two years and I was not really sure should I be happy or sad. On one hand Brad was indeed a really great prof, but on the other hand I was still scarred by one of the midterm exams of his courses earlier. It was absolutely brutal exam and it was probably my single biggest L until I had my CS 341 midterm.
Jokes aside, CS 442 was hands down the best CS course I have taken so far. It covered the very fundamental constructs of programming language in great details. The main topics of this course include lambda calculus, type system, type inference, logical programming and formal semantics. The OOP part of the course was a bit meh but this was mainly because Brad fast tracked it since most of the people in class were already familiar with it. Though this course didn’t make me obsessed with creating my own programming language like my friend @Dhruv Jauhar, it still made me to start to rethink what makes a great programming language.
Other CS courses and a disclaimer
CS 241E/CS 246E/CS 442 were the three of my favorite courses in past two years. Other CS courses that were not listed were not necessary bad courses, in fact most of them were quite enjoyable depending on who is teaching. However, this is not a review of all the courses I have taken in UW. uwflow.com is definitely a way better source for that purpose.
Other Non-CS/Math courses
I haven’t taken much Non-CS/Math courses in past two years. But for the ones that I have taken, the only review I can give is: Meh.
This was my first internship. To be completely honest, there is really not much I was able to learn from this internship. Most of the full times at this place have all left within the next two years after the end of my internship. Funny story, one of those full times actually joined Shopify with me the same time as an intern during my third internship. I learned from him that most of the full times during that time were actually preparing for the technical interviews for Google and Shopify 🤦 . Almost every single project created in this place got immediately archived after the interns created them left the lab.
I started working at Dessa back in the beginning of 2018. That was actually back when Dessa was still called Deeplearni.ng. Apparently, they got that domain from a tiny Nigerian ISP and they had to wire about ~$20 every year to Nigeria. Allegedly, Andrew Ng got a bit jealous when he found out about the company one time during the NIPS conference in Montreal.
When I first joined the Dessa, it was still a very small startup which just raised $9M for its Series A. There were about a dozen developers and located in a small office on the edge of downtown Toronto. About half of Dessa’s engineers were Data Scientists who trained and deployed ML models for Dessa’s clients The other half of engineers where developers who were working on an internal project called Frontier. I spent my entire internship in the Frontier team, and there hasn’t been a single day since I left Dessa when I didn’t miss it. Every time if I was in town for more than two days, I would always go back to the office and say hi. It might sound strange but, ever since I left home when I was 15, Dessa was the first place since then where I truly felt I belonged to. From the bottom of my heart, I loved and missed every single second I spent at that place and every single person that I have worked with. My mentor threw a goodbye party at the end of my internship. Both of us got pretty drunk and I remembered I was hugging him at the end of the party like a kid that’s about to leave home to go to college for the first time.
Dessa was really young back then. It was stumbling and trying very hard to find its way in a world where startups are dying like flies. But judging from what I saw last time when I went back, I truly think it has matured and it is on track to unleash all of its potentials.
The experience I had at Dessa kind of gave me an unrealistic expectation for my next internship. On the surface, Shopify is everything that I would ever hope for in a tech company: a fancy office with unlimited supplies of snacks and beverages and free lunches and corporate housing and almost 30% increase of compensation compare to Dessa. They even had this extravagant intern retreat where they shipped all of Shopify interns to a national park to spend the weekend. I was able to learn so much from my team and my mentor and problems that I was solving at Shopify were both fun and challenging. There were so much that Shopify has taught me for which I will be forever grateful.
Nevertheless, I couldn’t help but felt something was missing. That sense of belonging that I felt at Dessa was simply not there. It was nobody’s fault. No one was to be blamed for that but me and me alone because of my unrealistic expectation of a company.
I was like this kid who has always believed in Santa Claus until one day to be told the truth by an adult. When I left Shopify my feeling was mixed and my thoughts were confused. Sometime I questioned myself what is it that I am chasing after and yet I really can’t give myself a clear answer.
I finished last two years of my undergrad with more questions than I first started. Though good thing is, I still have another two years left in my undergrad to figure that out. This may sound sadder than what it actually is. But I think this is probably one of the most important lesson I have learned, is to embrace uncertainty. All plans are doomed to fall apart at some point no matter how well it was planned. I guess it’s just way easier to enjoy life, instead of planning every single details, just give it your best effort and wait to see what happens afterwards.