- Published on
UBC CS Grad Reflection
- Authors
- Name
- Christina Yang
Table of Contents
Having finished all my classes, and waiting to graduate from UBC's Computer Science department at the end of this month, I decided to take some time to reflect on my time at university.
I've been at UBC for three years, and in this time, I've grown significantly in four main areas: technically, socially, emotionally, and spiritually.
Technically
As someone who prefers hands-on learning, I've learned the most through building my own projects. Planda, the main project I've been working on for the entirety of my time at university, has taught me so much more about software engineering than any class ever could. Growing up, my dad always emphasized that Googling was the most important skill for a developer. Tackling challenges on my own, without knowing that a right answer exists, taught me that precisely. I learned to scour the web for online tutorials, blogs and videos, for anything I wanted to learn. I learned to first look for libraries that could save me a ton of time instead of trying to write everything myself. I learned to debug issues with libraries through reading Github issues, stack overflow, and blog posts. I've also learned AWS DynamoDB database design, and that AWS ECS in AWS CodePipeline can be very frustrating to debug. Here are some of the major bugs I've dealt with.
Reading through open-source projects also taught me about code documentation (a weak point for me) and writing clean code. I'm definitely still not great at this, but I'm trying to get better through using tools such as CodeScene and DeepScan, which give me automated code reviews. I got these both through Github Student Developer Pack and would highly recommend any student with the slightest inclination to want to learn to code to get access to the starter pack. For those learning to code, it's got material for coding courses and interview prep. Some of my favourite things I've found or gotten through the pack are ImgBot, Sentry (I run out of replays almost immediately every month though 😭, so if someone knows how to better configure Sentry to not run out of resources, I'd love to hear about it), SimpleAnalytics - a great way to monitor website traffic, BrowserStack for cross compatibility testing, Icons8 gave me great icons to use for Lord of the Lakes. For more on Github Student Developer Pack, I've written a longer post here.
I'm also grateful to the AWS Activate Founders Program for providing AWS credits so I can afford to work on my projects without draining money significantly like I was doing before joining the program, and I would highly recommend anyone using AWS for their projects to apply for it.
My work as a junior dev for one of my university's grant projects gave me an intro into open-source, and taught me a lot about Github, creating issues and pull requests, code reviews, and other collaboration related things. I've always found open-source intimidating, I've tried a few times to contribute, but it was often very overwhelming. I've recently finally made my first few pull requests to an open-source repository (date-fns-tz), and it was a lot less difficult than I expected. I'm currently looking for other Node.js projects to contribute, so would appreciate any suggestions.
University
The main technical takeaways from university courses I have are Algorithms and Data Structures, SQL, programming methodology and languages, and Machine Learning.
Algorithms and DS
I've gotten better at algorithms, and found them to be a lot of fun. There are some algorithm topics that have quite fascinated me, such as Network Flow and Randomized Algorithms. I've also had a lot of fun doing Advent of Code, Google Foobar Challenge and LeetCode. Having done a good amount of LeetCode prior to my algorithm classes, being actually taught things like Dynamic Programming and Divide and Conquer were very eye-opening on being able to understand these topics on a deeper level. I am grateful to great profs like Dr. Cinda Heeren, Dr. Alan Hu, Dr. Nick Harvey and Dr. Will Evans for making algorithms interesting.
SQL
I've only ever worked with NoSQL in my own projects, so it was really cool to finally work with relational databases. I also got to make a new friend, and become close to another one through working on our final project.
Programming methodology
With how big Agile is, I believe learning it will pay off in the future, and have instilled in me the importance of continuous small code releases. Learning to write user stories have been helpful in teaching me to see things from a user's perspective as well. Although I don't typically think about design principles when coding, seeing these methods and their benefits have definitely shaped how I approach my own code architecture.
Programming languages
I've used 10+ programming languages by now, all of which I've touched in school. These are: Typescript, Python, C++, C, Node.js/Javascript, Java, R, SQL, Julia, Haskell, SWI Prologue. My main takeaway isn't knowledge about a programming language specifically, but how to read documentation effectively and learn a new language. I also really enjoyed working with SWI Prologue in particular, because it was a novel language that was completely different than anything I'd done before. Haskell and Prologue in particular taught me to think about programming closer to mathematical terms.
People have always told me that I don't have to rush university. Going in with the goal to get my degree in three years, I've never agreed, wanting to be less of a financial burden to my parents. However now that I've finished, I've been dealing with a lot of fear on what to do next in this new stage of life. I've second-guessed whether I should actually graduate right up until finishing my classes, and even now I'm still unsure. I've been a student pretty much all my life, and I know how to be a student. It's familiar, and I'm fairly good at navigating it, too. But now I have to face the intimidating "real world", with a not great job market, and I have no idea what I'm doing from now on forward, or what my future holds in store for me.
Socially
I'm a pretty quiet person. I typically keep to myself, and am not great at making friends. I've been realizing more and more now, how important making friendships is, and I wished I was more active in this during school. School is such a perfect place to make friends, since there's people everywhere. What helped me a lot in getting to know people and becoming social was living at Carey Hall. Carey has a student dorm with a wonderful Christian community of 44 students. Since we eat our meals together and have fun activities and events, and often study together, it's really easy to make friends. There's nothing that beats practice when it comes to talking to people, and getting to do that every meal made me a lot more comfortable with creating small talk. The people at Carey are also such great and kind people, I've made friendships there that I will always cherish. These people have also inspire me greatly to be a better friend, person, and follower of Jesus.
Emotionally
I won't say much about this, but dating has made me realize that I'm a lot more emotional than I thought. I think I've learned a lot about myself in the process of having to deal with a bunch of emotions I don't understand floating around in my head. Anyway, this is a lesson still in progress.
Spiritually
Living at Carey has probably been the biggest catalyst for me for spiritual growth. Being around others who are passionate about Jesus and seeing how they walk with Him up close, and their own struggles, has inspired me greatly. I've gotten to have/listen to conversations with people about faith, and learn a lot more about how people prioritize Jesus in their lives. I would highly recommend anyone to get involved with a Bible Study or Christian club. The people I've met through these have been so kind and welcoming. As Christians, we are not meant to walk our journey alone. Having people to share our faith with is just so important for spiritual wellbeing.
Advice to new students
- Talk to your professors. I sound like a hypocrite for saying this, since I've hardly ever talked to mine. It's something I definitely wish I did more. The few times I've talked to my professors, they've been so kind and supportive.
- Make friends. Don't limit these to your major too
Accomplishments, Miscellaneous
Things I've learned about building projects:
- Don't be so quick to install a new version. There's likely a bunch of bugs
- smaller libraries are less stable, they could easily become unmaintained.
- Next.js is kinda evil, can be REALLY slow if you don't structure things properly (ex. too much React Context)
- Don't use pure react, try any framework like Next.js to get easier routing
- Don't use React Context everywhere for often changing data, it can make things really slow. Things like Jotai, Zustand, and Redux exist.
- Apply for the AWS Activate Program.
My Own Projects:
Hackathons
- NwHacks 2023: Food For Mood
School projects
- Lord of the Lakes (C++, CPSC 427)
- Randomized Choose Your Own Adventure (Haskell + Prolog, CPSC 312)
- Baseball League Stats (PHP + SQL, CPSC 304)
- Productive hours tracker (CPSC 210)
- Diff-PDG reproducibility report (CPSC 440)
- Ethospire (CPSC 436E)
Work Experience
- Undergraduate Academic Assistant (Junior Dev) at UBC (May 2023-Present, Part-time)
Greatest gain
great friends from Carey
Fun
- Played some chess tournaments
- Got a degree
Book recommendations
- Never Eat Alone - Keith Ferrazzi
- User Friendly by Cliff Kuang, Robert Fabricant
- The Ruthless Elimination of Hurry By John Mark Comer