Waterloo 1A Retrospective
I'm home now for the holidays having completed my first term of Software Engineering at the University of Waterloo and I thought I'd take this opportunity to reflect a little.
Although it may be surprising given how long I've been doing software things for, I only decided to go into software engineering pretty recently. Until the beginning of the eleventh grade, I still thought I would prefer to go into some media-related program where I could still do some programming but mostly work on making videos. After doing a lot of animations in the past few years, I realized that the work was actually mostly just tedious, and probably not something I'd want to be doing every day for the rest of my life. I decided to keep it as a hobby, because I still do enjoy it in moderation. I was hoping that programming, my other love, would prove to stay fresher and consistently interesting.
It seems that my bet paid off! There are always new and interesting projects to be working on, and I haven't really felt bored at all this whole time. A little overwhelmed at times, but I think I prefer that to being bored.
The courses aren't all immediately relevant to software since this is also an engineering program. However, I find learning about linear circuits and physics to be interesting and challenging in the sort of way that makes you want to learn more, so it has been enjoyable. We have a charismatic physics professor who made physics lectures enjoyable despite being in a large block of three consecutive afternoon classes. Our TA for linear algebra was a fun guy too. In our computer science class, we learned C starting from the basics up to sorting, searching, and memory management. This was all review to me, but projects were interesting and challenging in that you had to not only meet all the requirements for a given program but also make it run efficiently. Our professor was very engaging, so it was a lecture I looked forward to despite the content being review. Additionally, he encouraged us to hide CS jokes behind the sliding blackboard, which some classmates and I did some of the time.
Over the course of the past few months, I think I've operated at the highest density of active projects per unit of time than ever, and I think that's fantastic. They fall into a few key categories:
For our SE 101 course, we had to go into groups of sixish people and program a Scribbler Bot. This was interesting because the hardware is pretty garbage, albeit garbage with a large amount of character. We were tasked with, first, making the robot be able to navigate around an arbitrary obstacle at various angles and return to its original course. Then, we had to create a larger project to do something of our own choosing with it. My group, consisting of Andrew, Steven, Yu Chen, Ruo Tai, and Alyshan, decided to make Twitch Plays Scribbler: A game where online users spam commands and the robot executes them. The goal is to push a ball around by trying to collaborate while spamming commands into the system.
I personally worked on the client side things for the website mostly, as well as the Python code to send back a video stream both from an overhead webcam view and a first-person view from the robot's crappy onboard camera. I also spent some time writing a system to play Hooked on a Feeling with melody and harmony when a user tells it to.
The whole thing turned out pretty well, and although there is no longer a robot turned on and connected to the website, all the code is in a (very messy) GitHub repo and we've got a video of it sort of working:
It seems like every week or so there was another hackathon that one could attend. For the uninitiated, a hackathon is an event, typically a day or two, in which a large number of people meet to make a hardware or programming project from scratch. There were a few in Waterloo, and also a few out of town, although given the way hackathons mess up one's sleep and schoolwork schedule, I opted not to go to out of town ones this term. Regardless, they're great fun and are a cool way to build up a portfolio, make new things, and meet new people. As an added bonus, at a lot of them, there's loads of free stuff to be claimed.
At Hack the North, I did the front end dev work for CVPress, a resume creation and publication tool that (sometimes) fills in what it can on your resume using information from LinkedIn. Yu Chen and Patrick worked on the back end. Halfway through the hackathon I accidentally sent a few thousand GET requests to the LinkedIn servers and had our API access key revoked for a bit, woops.
At EngHack, I did the front end dev work for MoarTi.me, a web app where you create an event and it finds a time that works best for everyone attending. Bilal worked on the back end, Abhishek worked on the time matching algorithm, and Tammy worked on the front end with me.
At SE Hack Day, I began to work on an android client for my Random Bad Jokes website. It's my first time doing anything for Android and there's still a lot of work to be done on this, but it's been fun so far.
Next term, with help from the SE class reps, I'm planning on organizing a Stupid Shit No One Needs and Terrible Ideas Hackathon at Waterloo. For that, Tristan and I are making a tool that uses a graph database of Wikipedia articles to produce a scale between two arbitrary endpoints, so you can produce a legitimate answer when asked "How are you feeling, on a scale from 1 to David Hasselhoff?" It's going to be great.
In addition to the formally organized projects, some other side projects came into being. Andrew, Steven, Yu Chen, Ruo Tai and I are working on an app called SocialTunes which lets people on the same network vote up and down songs to be played over the speaker system. This is the first step in our grand plans to automate our house/apartment/living space that we live in in our 2A term. The end goal is to be able to tap our phones on an NFC sticker by the door to sign in or out as we come and go so that the house knows who's in and curates things like music and lighting for the people inside.
I've also been working a lot on my website. Although it still looks the same, it is no longer built on Wordpress like it has been for the past five years. Now, it's a home-grown system called Trestle written in Perl that I'm pretty proud of. So right now I'm currently typing this up in the admin interface for Trestle to test its functionality. Although people love to hate Perl, I like working with it a lot, and regular expressions are really useful and fun when you get used to them.
I also have this interesting project running where I change my sister's wallpaper to various things remotely. This started before I left for Waterloo and I'd decided to play a running joke on my sister while I'm gone to try to make the distance less hard for her to handle. This started just as a little Python script on her computer that checks for new images every morning that I'd uploaded via FTP to a folder on my website, but since then it's grown considerably. There is now a full-blown responsive web interface where I can upload new wallpapers and view old wallpapers. It even shows when new wallpapers have been downloaded on my sister's desktop and laptop. Although she'd never admit it, I think my sister enjoys getting new wallpapers from me.
I think possibly the best part of the program is that all the people in it are ambitious, creative, and just generally great people to be around. Basically anyone you talk to has some cool project they've done or are doing and will be glad to talk about with you. Being surrounded by people like that really inspires you to keep pushing forward and keep creating.
They also seem to have similar ideas of humour and fun. We've had some semi-frequent movie nights, we've played painfully long games of pool because we keep scratching and pulling out more balls, and we even went and recorded a cover of Hooked on a Feeling on coke bottles.
My first co-op term will be the summer, so that will be pretty interesting. I'm still not entirely sure what I want to do for a job or where I'd want to do it, but I think it would be nice to come back to Ottawa again if possible to see my high school friends while they're all back. Regardless, I think it will be a beneficial experience to work for a company on a larger project than the relatively small scale I've been operating at so far.
I also need to learn how to use an iron so that I can look presentable at interviews and learn how to cook so I don't get scurvy in 2A. This is one of those times where I realize that no matter how many advances there have been on school and software this year, I still am just getting started with this whole "life" thing. But I digress.
I'm definitely glad I'm where I am.