Joaquín here. Today, I’m going to talk about one of my courses from fall semester: CS105, also known as Computer Systems! This course taught me all about “how computer systems execute programs, store information, and communicate.”
The course was split up into two components: classroom lecture and partner lab work. The classroom experience was mostly taking notes and listening to my professor lecture, with intermittent small problems to work on with the people sitting around me. It was only about 30-ish people in class, so it was pretty good environment for asking questions whenever I was confused. The lab component, on the other hand, was more focused on problem-solving. Every week, we would head into the computer lab and work on different projects. Across the entire course, we set up basic servers, debugged programs, constructed bit manipulations, overflowed buffers, and much more!
One of my favorite labs was “Bomb Lab.” The professors constructed a series of fictitious “bombs” that would “explode” when a program terminated, and our job was to defuse the bombs by reading the assembly code of the program to understand what it was doing and how to stop the bombs from exploding. There was even a scoreboard so you could see how many bombs people had defused and how many bombs had exploded.
In the first week, I accidentally exploded the bombs single-handedly more than every other team combined. Needless to say, my partner wasn’t super pleased about this, but by the end of the lab, we had successfully defused every bomb.
With the lab work, all of it had to be completed with a partner, which was always an interesting experience. People program, test, debug and think in such different ways, and working together is a good opportunity to learn from each other. My partner for most of this semester was my good friend Max Kunz, and we have quite distinct ways of programming.
My general approach to programming is to code something that works (even if poorly) and improving upon it by changing its components in an iterative manner. Max, on the other hand, spent much more time trying to figure out what to do before he started coding, either in his head or pen and paper, which often resulted in more functional code from the beginning.
But again, we both learned things from each other. Max witnessed and learned my strategic ways of figuring out what’s wrong with my code, and I learned to slow down and talk things through before getting into the thick of things, both of which are valuable skills.
Max and I definitely did get stuck sometimes though. For most of these labs, we would spend at least 6-8 hours in the computer lab, trying different ways to improve or debug our code. Thankfully, throughout the week, there were grutors available to help us if we needed anything. They were a huge resource for us, because sometimes, there’s just that one thing that’s difficult to find or figure out, and you just need a new set of eyes to help you fix the problem. Just this past week, we had to optimize a matrix transpose function, which was a fairly confusing endeavor, but just by explaining our thought process to the grutor who was helping us, we realized some ways to help optimize our code.
On the whole, I enjoyed this class for what it had to offer. It’s always exciting to get to work on challenging problems, especially if I get stuck, because I know it’ll feel AWESOME once I’ve figured it out. Isn’t that what life’s all about?
Creating a GUI Interface using Visual Basic, (to see if I can track an IP address)
Joaquín “62 65 65 70 20 62 6f 6f 70 20 62 65 65 70” Fuenzalida Núñez