A Year in Review- 7 mins
A Year in Review
This past school year has had a lot of 'firsts' for me. My first legal drink, my first time being truly independent, my first time taking a college computer science class, and so so many more. As I sit in the living room of my parents' apartment in suburban Minnesota, I can't help but think I've grown a lot along the way, and learned quite a bit. So now, if you'll allow me, I think I'll ramble on a bit about that.
College lived up to my expectations, and I really enjoyed it this last year. But there was definitely a deal of work that I had to do, and I incurred quite a bit of stress along the way. For those who don't know, UBC's computer science program has been climbing in prestige throughout the past few years, which, at first glance might seem like a great thing. However, the demand for spots in the major has grown, while the number of spots has not. So then, how does the department handle such an issue?
For those select few who don't already find freshman year of college at least somewhat daunting, throw in a projected 80 percent cutoff and anxiety levels soar through the roof. Now allow me to explain, because this might not sound that bad to some. 80 percent? That's like a B- in the US, right? Right. But not in Canada. That 80 percent average is considered an A- at UBC, attributable to grade deflation. Looking at the averages for most of my first year courses, they tend to sit around low to mid 70s, with the exception of math classes (which have a nasty reputation for low averages) where the averages tend to be in the low 60s and high 50s. With this context in mind, the task at hand suddenly seems much more scary. And boy was I ever scared. But I might argue that the constant fear of doing poorly in classes actually was a great motivator for success in my case, and that it made me grow. I knew going into the year that I was going to have to work hard and not fall behind, and so I made sure to come up with strategies that would help me to succeed in my courses early on (but that should be the subject of a later blog post).
Academic stress aside, my CS courses were pretty enjoyable (I took CPSC 110, CPSC 121, and CPSC 210), and I think I did pretty well in all of them. Here's a quick rundown of what I learned in each course, and some of the key takeaways I had!
CPSC 110: Systematic Program Design
The intro to programming class at UBC. Let me tell you, it does not fail to live up to its title. It is VERY systematic. Is this a bad thing? Is this a good thing? I'd like to contend that it's a bit of both. On the one hand 110 provides a level playing field, using a Lisp-derivative called Racket instead of Python or some other commonly known language, which might give students with prior programming experience a significant leg up. While it does have this benefit, it kinda ends up leaving you with knowledge of a language which most will probably never use again (unless you take CPSC 311). On the other hand, Racket (and really Lisp in general) really forces you to think about recursion - and recurse we did. On this subject, I think one of the more interesting things I learned about in 110 was tail-call optimization and how tail-recursive solutions can vastly improve the runtime of a function as well as its stack usage.
CPSC 121: Models of Computation
It might be a little more difficult to guess what this course is about just from its title, and to be honest, it was sometimes still difficult to tell what this course was about when I was taking it. CPSC 121 takes a sharp turn away from the more hands on, 'programmy' side of computer science that CPSC 110 demonstrated, and covers these main topics: logic, mathematical proofs, and finite state machines. The goal of 121 is to give students an idea of how computers work, culminating in a module called "the working computer," which scratched the surface of how computers work to execute instructons in machine language. Throughout the course there was also a lab component which, unfortunately, often times seemed to stray away from the lecture material towards the start of the class. My favorite, although arguably also most frustrating, thing I learned from 121 was how to construct formal and rigorous (enough?) mathematical proofs. We learned different proof techniques, and were given some fun and challenging homework problems, especially on our last assignment which dealt with mathematical induction. I think that if I had to take one thing away from this course, it would be mathematical induction, just because of how powerful and useful of a technique it is in showing that sequences (or even steps in an algorithm) will yield a certain result. On a more serious, character-building note, I took away the lesson that proofs are hard, and not knowing how to solve one at first shouldn't be cause to throw your hands up in the air and give up. You have to be resilient and make sure not to get locked into one specific mindset that you won't be able to escape from.
CPSC 210: Software Construction
It certainly does not take a rocket scientist to figure out what this course was all about. 210 focused on the design and implementation of software systems using an object oriented language (in our case, Java). This class ended up involving a lot of diagrams - UML class relationship diagrams, call graphs, sequence diagrams, etc. While these are certainly useful things to know, I found that this was a bit boring at times. The highlights of this course for me, however, were definitely the design patterns that we learned at the end. We focused on the Composite and Observer patterns, and also learned how to implement our own custom iterators in Java. Do I necessarily see myself pulling out one of these design patterns years from now? Maybe not. But the general principles behind the creation of the design patterns (substitutability, coupling, and cohesion), are most certainly things that I will take with me going forward in my development career.
This year was really eye opening academically, and I'm looking forward to learning even more in CPSC 213 and CPSC 221 this summer! :)
Of course, it's never good to work hard without letting loose from time to time too. Over the course of the year I made some really awesome friends (especially in the CSSS), and we find some fun ways to blow off steam on the weekends! Vancouver is a gorgeous city, and I can't imagine a nicer place to spend 4 (or maybe more?) years of my college life. I think a couple of my favorite Vancouver memories this year were when I walked along the Seawall at Stanley Park (which I would highly suggest anyone visiting does!), visiting the English Bay with friends on a couple occasions, and sitting down with a cold drink at the Granville Island Brewery. There's really so much to do in this city, and I've only seen the tip of the iceberg - I can't wait to explore it even more this summer!