My Second Story of Studying Software Engineering at Waterloo (UW SE 1B)

My SE Posts Term-by-term: 1A1B

Briefing Note: Everyone has a different university experience — this is only mine.


It feels surreal that my first year of Software Engineering, of university, is actually over. While studying, it felt like time was passing at a turtle’s pace. But over time, slowly but surely, my to-do list for the term began to shrink.

And then, a few days ago, mere hours after I submitted my last exam of 1B, reality started to sink in.

I’m done with first-year. It’s over.

… A few minutes later, I opened a document and started writing this story. And after some editing, here we are 😛

This post covers my thoughts on first-year SE as a whole, the SE courses during 1B, plus some term takeaways.

SE Reflection

There’s a question that pops up in every graduating class profile that goes something along the lines of “Would you choose your program again?”

Obviously, it’s early (I mean, early to the point where this should not be used as any sort of indicator as to whether I’ll ever switch out of SE, kind of early) to answer this question. Still, I wanted to write down my thoughts so far because I’m interested in seeing if/how my opinion changes over time.

So far, the answer is yes.

I would choose SE again, and here’s why.

The Cohort

I love the SE 2025 cohort.

Everyone is so supportive of each other, and it’s really great to see. Although we talk a lot about courses (making sure not to violate Policy 71), we also talk about things unrelated to school.

I thought this would be rare since most of us haven’t met in real life and haven’t been able to share many experiences, but it’s actually quite common. Conversations can range from tech to memes to just life things, and everyone just seems so lovely.

I’ve gotten to talk to so many neat people, and I can’t wait to meet everyone in real life.


In 1A, we had three math courses, one engineering course and one CS course (and a half-credit SE101). In 1B, we had one math course, three engineering courses, and one CS course.

I found this term harder than the previous one because I just wasn’t as good at engineering courses as I was at math ones. In high school, I had done robotics and taken a computer engineering course, but those didn’t prepare me for the content here.

I honestly didn’t enjoy some of the courses (… mainly the engineering ones) either. This was partly because I wasn’t good at them, but mostly because I couldn’t see myself applying what I was learning anywhere outside the course.

If SE didn't have these requirements, I would not have chosen to take these courses.

However, looking back, I did like the experience of learning things I didn’t want to learn. In high school, I had always taken courses that I had wanted to take, but the SE degree issued me with a unique challenge that pushed my problem-solving abilities near their limits. And I like challenges — it’s one of the many reasons why I applied for and accepted UW SE.

It’s been hard to describe this feeling with words — I’ve rewritten this section at least a dozen times. So here’s a story of the time I felt something similar which might help this whole thing make a bit more sense.

When I visited family in China during the summer when I was little, they used to drag me out on long morning walks. Every time, I would come back sweaty from the heat, and I hated that feeling. All I wanted to do was to comfortably stay inside with the air conditioning before eating lunch, and then going out in the afternoon when it was cooler.

My parents always told me that lunch would taste better after the morning walk because I would have worked for it. That didn’t make sense to me since it wasn’t like walking resulted in lunch, and we cooked it the same every day.

However, when I actually stopped and compared two days when I walked and when I didn’t, lunch did taste better after the walk. Being tired and sweaty (feelings I despised) made the food taste better.

Just like how the difficulty of this term made the personal victory of passing all the more sweet.

I wouldn’t be surprised if other students felt differently. In another life, I could see myself hating the required courses and wanting to switch out of SE next year. But so far, after a week of reflection, this is where I stand.

Will I ever use some of the content I acquired during this term ever again?

Probably not.

Still, I kind of like having the knowledge stored away anyway. Besides, now I can pull stuff like this: Do you know what this thing is?

Course Reflections

CS138 (Introduction to Data Abstraction and Implementation)

While CS137 covered a lot of topics I already knew, CS138 definitely broadened my scope of CS.

We switched from using C (in CS137) to using C++, though the similarities of the language made the transition easy.

I do not miss malloc() in the slightest.

During the course, I learned more about binary trees and hash tables, though the most exciting topic was object-oriented programming (OOP). I had done OOP during high school robotics, but I hadn’t realized just how deep the subject went.

Professor Mike Godfrey’s lecture slides and videos were quite long but were honestly very educational and well-put-together.

In my opinion, the most significant difference between CS137 to CS138 was the number of test cases provided. CS137 spoiled us with many premade test cases, but I often had to write dozens of test cases for CS138. Even though it was tedious, I’m glad I picked up that skill. I have no doubt I’ll need it later, both in future CS courses and in the workplace.

ECE106 (Electricity and Magnetism)

ECE106 was like ECE105 level of difficulty but worse.

ECE105 started with concepts explored in high school physics (such as kinematics, forces, work and energy). Even though the problems were challenging, there were some familiar topics.

ECE106 started with triple integral calculus and then moved on to some somewhat familiar topics, like charges and electric fields (but harder). After about two weeks, we were diving into content I had never heard of, and I struggled a lot with trying to wrap my head around the concepts.

However, the ECE106 video resources were terrific. Professor Brenda Lee provided extremely helpful recorded lecture content, office hours and review sessions. All the course staff were responsive on Discord (the course's chosen communication platform), making the labs and design project almost, dare I say it, fun.

Special thanks to TA Robert Bennett for writing paragraphs in response to my design project questions and saving me from complete confusion.

All in all, I think the course was very well-run, even though I was not too fond of the content.

ECE124 (Digital Circuits and Systems)

I think ECE124 had the potential to be the most exciting course.

Unfortunately, I found the lecture slides and videos were structured in a very challenging format to follow. I ended up teaching myself most of the content myself via the textbook and review exercises.

A significant part of this course was the four lab projects done with a partner. ECE124 labs used a program called Quartus (which tends to crash when it doesn’t like you) alongside a programming language called the VHSIC Hardware Description Language (in short, VHDL).

Over the term, I was programming in both C++ (for CS138) and Python (for work). Trying to also work in VHDL, which has a completely different syntax, was very confusing.

This Urban Dictionary definition pretty much summed up my experience.

No offence to electrical engineers intended.

Though the labs tested my patience, I definitely felt accomplished when our code compiled and worked. Shoutout to Sophie for being a fantastic lab partner, our hours of suffering were worth it.

ECE140 (Linear Circuits)

Circuits were one of my favourite units in high school.

Although, something university taught me very quickly is that just because you liked something in high school does not mean you’ll like it in university.

On paper, this course is made up of things I love — problem solving and logic. In practice, I struggled a lot with ECE140. I consistently got confused with my positive and negative signs for voltage/current. Post-midterm, AC circuits were also not my forte.

The practise problems were the key to my success in this course. Doing them made me more comfortable with circuit analysis, and as I began to recognize patterns in the circuit configurations, I was able to solve problems more accurately. The course notes were also quite helpful to get a baseline of how to approach a solution.

Overall, for me, this course required the most time and effort to be successful, but once the concepts started to click, it was pretty smooth sailing.

In case you were wondering, this is an operational amplifier. We learned about it in this course :P

MATH119 (Calculus 2 for Engineering)

I think that MATH119 is tied for ECE106 in terms of being the best run course of 1B (in a good way). To top it off, I love math, so this is up there for one of my favourite courses in all of first-year.

Note: Our Calculus 2 is technically Calculus 3 since MATH117 (Calculus 1 for Engineering) covered both differentials and integration.

Zack Cramer is a legendary math lecturer who somehow makes hours of math not only make sense but also be interesting. He’s energetic and clearly passionate about calculus, which (magically) made me feel excited about calculus.

The assignments were fair, office hours (run by TA Noreen Gao) were incredibly helpful, and all the instructors were responsive on Piazza.

Zack also started a public YouTube channel, Mathemation, for calculus videos that (in my opinion) rival Khan Academy in quality.

He also introduced this picture which will forever give me serotonin.

It’s so cute. Like. So cute.

Takeaways for this Term

I ended up following all my advice that I wrote for myself after 1A, but I do have a few more things to add on after 1B.

🙃 Take-home exams expected to take 2–2.5 hours will rarely (if ever) take you 2–2.5 hours.

Just trust me and allocate at least half of your day.

I speak from experience, and I’d wager every SE/ECE student will affirm this statement.

📖 Study, even when you think you don’t need to.

This sounds obvious, but at the beginning of the term, I went into many quizzes without studying. Just about every assessment was open book, so I would think, “Psh, how bad could it possibly be?”

Narrator: It was bad.

Although I did alright a few times, overall this mentality resulted in about one failed quiz across every course.

My mentality of not needing to study sort of reset per course. It’s not something I’m particularly proud of, but I’m proud of how quickly I was able to turn my marks around (and honestly, I’m a bit disappointed in myself that I didn’t think to do so earlier).

I studied for every quiz following a failure, which resulted in my marks across quizzes increasing by about 30–40%. I was also able to pass every major assessment (and overall, pass the term with excellent academic standing).

To wrap up this point, when professors provide resources to help you in the course… it’s a good idea to use them. Even if you did well on the last assessment, a new chapter or unit could mean an entirely new beast.

💡 ECE students are champions

After taking ECE105 alongside the ECE students in 1A, and now after taking ECE106, ECE124 and ECE140 alongside them in 1B, I have even greater respect for ECE students. These courses were by far my most challenging courses during my first year.

Although the SE degree does require a few more ECE courses, it requires far less than the ECE degree does. So to the ECE students reading this, good luck with your degree, and you all rock.

💖 Find things that give you joy.

I said this in my last post, but I want to repeat it because it’s the most important thing I’ve learned.

Take breaks. Do things that make you happy. Spend time with people you care about.

(This part is more for future me to see what post-1B-me was up to)

I’m currently playing through Legend of Zelda: Breath of the Wild and loving every second of it. I watched the AlphaGo documentary, which was incredibly interesting. I also watched live games from the League of Legends eSports league (G2 will win summer, trust) with my friends. On the weekends, I go grocery shopping.

As for extracurriculars, I joined the UW WiSTEM team as a web developer and was pleasantly surprised by how amazing everyone was. I loved our weekly icebreaker meetings, and our incredible team ended up winning the WUSA Club Award (and our president got the President Award)! I also continued my job as a STEM instructor for middle-school students through Mathstronauts, and once again, the kids reminded me of the joy of getting code to run 🙂

These things kept me from burning out entirely during my first year, and I think it’s essential to find pastimes unrelated to school.


Spending my first year entirely online was far from ideal, but overall I’m happy with how I learned to adapt to the situation. I’m still glad I chose Waterloo SE, and I look forward to my second year (and hopefully some in-person classes!)

I plan on writing up my experience applying to co-op, but I want to work that into the post where I talk about what I did during co-op, so that’ll come later. I’ll be working at WFHomie as a full-stack engineer for the next four months, and I’m really excited!

And because I want a cool thumbnail for Medium, here’s another System32Comics.



Software Engineering @UW who likes coding, reading, and occasionally, writing.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Hannah Guo

Software Engineering @UW who likes coding, reading, and occasionally, writing.