UWaterloo CS 3A Reflections

UWaterloo CS 3A Reflections

It's the end of a term again, and for the 4th time, I'm writing this back at home. In fact, I never left since March of 2020. You know I was half joking last year that I'd be home for more than a year due to this whole pandemic thing, but I guess it is a reality now. It's not so much that I am getting comfortable with this whole lock down and don't go anywhere thing, but its more of I'm feeling numb to it. It has long passed the stage of grief and transitioned to the state of acceptance. Knowing that feeling triggered won't help the situation in any ways, and the best thing I can do is to practice good social distancing and follow public health recommendations. However, not all is bad, seems as though vaccines are pulling through at a promising rate (at least in the US), and Canada is slowly catching up. My conservative estimate/hope is that by 2022 things can be back to normal. But I do hope people understand that vaccine alone won't help solve this pandemic, we must continue to remain vigilant and socially distance until the cases are controlled to a negligible amount. Enough about the pandemic for now, in the rest of this post I'll be talking about why I switched to CS. Followed by the usual rundown of all of the courses taken this term and conclude it with where I'm heading for my co-op.

Why did I switch to CS from SE?

I remember back in high school when I was applying for undergraduate programs I applied to both CS and SE at UWaterloo. With the thought that CS was my backup in case I didn't get into SE, and somehow I wasn't even super happy when I got CS, and was only really satisfied when I got that SE acceptance. Looking back, I think I was definitely quite naive and valued too much of a program solely based on their perceived "prestige". If you tell the high school Mark that he'd be switching to CS from SE, he would think you are trying to trick him. Although I wouldn't blame him, because even if you ask me right now to choose for a first year student between SE or CS, I'd still pick SE. I think the main benefit of SE is the cohort, the amount of smart, talented, hardworking, and friendly individuals can really shape one's life for the better. I think if I started off in CS, I definitely would not have as big of a friend circle of hardworking friends as I have now. And yes, this is considering the gruelling ECE courses (which you can read about my basically traumatic experience from my blog post for the first year of SE). However, I'd say SE becomes increasingly less attractive for me personally as I progress towards upper years. It's not that the courses given in the mandatory curriculum are useless, but rather they either are not of my interest or I'd rather spend the time taking some other courses that I'm interested in. For example, I'm doing a minor in combinatorics and optimizations (and another in computational mathematics), which is possible to do in SE, but that would just mean I'll have 6-7 courses per term (which idk about you, I actually would suffer so hard and have 0 social life). And besides, now I have so much freedom in picking whatever courses I want to take (since the mandatory courses in CS is so much less than in SE). I can really customize my university experience to the way I like. Not to mention that I've already developed a strong connection with the SE cohort except now I will have more flexibility in the courses I take. So overall, I didn't switch because I thought the SE program is flawed, but rather, I was seeking for bit of a more personalized university experience.

How was the school term?

It was O.K., definitely not the busiest term, but the final week was kind of high stress.

  • CS 341 - Algorithms: Ah yes, known as the all mighty course that helps you pass LeetCode interviews certainly lived up to its name. Although I already knew most of the algorithms discussed in the course, it was nice being introduced to them in a mathematically formal manner. So the assignments in this class are like doing LeetCode but you'll also have to prove its correctness and show its complexity bounds (relatively formally). It was refreshing and somewhat pleasant to learn how to solve dynamic programming questions in a relatively systematic manner, rather than just coming up with ad-hoc strategies. Overall, I'd say this course although was delivered in a somewhat dry manner, the content is really quite useful in interview settings.
  • CS 350 - Operating Systems: Honestly this course reminds me of ECE 222 (Digital Computers), in the sense that there were so many random facts and things that needs to be memorized. And yes, the assignments are no joke, I think I've never spent this long on an assignment before (maybe about the same time I spent on my CS 241E (foundations of sequential programming) assignments). These assignments really can take a whole week to do. I remember I spent 3 days for 12+ hours a day doing one assignment. This course overall is just very very tedious with the assignments and mountains of MC questions. That is not to say this course was not informative. Although the course was taught using OS/161 (an educational OS developed by Harvard), it provided a good introduction to most of the important moving parts that are required for an OS to function. In fact, most of the content taught in this class are stuff that I had no previous knowledge of.
  • CO 487 - Applied Cryptography: This is hands down my favourite course of the term. Not only was the course highly relevant and useful, the professor Alfred Menezes made the course just that much more interesting and enjoyable with his high quality video production and the occasional memes. Honestly I can safely say he's my favourite professor in university yet! Not only was he knowledgeable (he wrote some of the most important books on Elliptic Curve Cryptography), but also so responsive and fun to speak with. I legit just go to his office hours to just chat with him, I don't think I did the same for any other professor so far. The course went over important cryptographic standards like DES, AES, RSA, ECDSA as well as the fundamental mathematics that support such standards. It was certainly a useful and enjoyable course! I highly recommend taking this with Alfred!
  • CS 492 - Social Implications of Computing: This course is more of an ENGL course than CS, I wrote 5 essays each about 1000 words as well as one group project with 4000+ words. Although I did enjoy the readings, and the professor brought up some really interesting ethical, social, political, and moral questions regarding computing. I was not impressed with the opaque grading standards, where some essays I would get no feedback besides a final grade with no justifications. I was particularly unimpressed with the grading of the group project, where the TA's feedback was simply a disagreement to our stance. We were marked on our opinion either being "correct" (either the TA agreed or not) rather than the soundness of the paper. Especially, when we were specifically asked to provide our opinion and support them with research. Oh well,  I guess it is hard to be in an arts class and be marked objectively.
  • STAT 230 - Probability: This is the course that I had to take to fulfill one of my CS requirements. Even though, STAT 206 (Statistics for software engineers) already covered the content in this course and STAT 231, it was only considered as an equivalent to STAT 231. Even though I was never a big fan of probabilities (since grade school), I have to admit that this course was taught very well. The lectures were clear and straight to the point with relevant examples, along side with all of the materials in PDF, MP4, and interactive versions on Mobius. Not to mention the super helpful professors (sometimes a bit passive aggressive, but always helpful). I don't really need to recommend this course because it is required for all math students (includes CS students).

Where am I heading for co-op?

I think this is the first time that I actually am going to a job I found on WaterlooWorks (the previous 3 co-ops were all through referrals). I'll be working as a software engineering intern focusing on cryptocurrency risk modelling at Bloomberg LP. (Bruh why does this sound like I'm announcing my internship on LinkedIn... please don't take this the wrong way, I honestly am a bit irritated at the ways some people announce their career changes on LinkedIn). Really grateful and excited to have the chance to really dive into the world of financial technologies. It is going to be very different from all my previous SWE experiences since it has a much heavier emphasis on the development of ML models, the SWE aspect is really just integrate it into the Bloomberg Terminal. Undoubtedly, feeling a bit anxious since I'm not nearly as confident in ML than SWE, but I think this would be a very interesting learning experience. This would've been better if the pandemic didn't happen because if this was in person I'd be in the NYC office and exploring NYC.

Closing note

I hope a vast majority of Canadians can be vaccinated before September and hope that this pandemic will finally be under control by the end of this year. I do recognize that there are other parts of the world that are also suffering with this pandemic, and I wish them all the best in their vaccination efforts and the control of the spread of the virus. In the meantime, I will continue working remotely and being as careful as I can with social distancing and sanitization (which I hope everyone do too). Anyways, I hope you are staying safe and hang in there, we are almost there (hopefully)!!!