I’m not going to lie – I didn’t really take this class out of personal interest. It’s a prerequisite for CPSC 416 (Distributed Systems), which is pretty much the only 400-level CPSC course I wanted to take. That is, of course, other than CPSC 410 (Advanced Software Engineering) which UBC has again failed to offer this year. Being my final year, I won’t be waiting around for that one!
I had some apprehension about taking 317, as I had heard that it was both boring and hard – the ultimate recipe for your least favourite class of term. However, the instructor for 317 this past term, Jonatan Schroeder, had also been my instructor for CPSC 313 in the summer. I found his lectures quite enjoyable and easy to follow along, so I figured I would probably have a slightly better experience than my friends.
So, after all that – 317 was probably my favourite class this term. In my co-op at Hootsuite, I had actually encountered dozens and dozens of networking concepts – NATing routers, security, HTTP requests … and you know what I did? I mostly let other people deal with it and became thoroughly confused when things were explained to me. I probably had the NAT router explained to me no less than 5 times, and it never became any clearer. The reason? I didn’t have sufficient background in understanding networking fundamentals. I literally found out what exactly an IP address is because of this class. Could I have looked it up myself? Probably. Did I? Heck no.
To me, it’s pretty ridiculous that 317 is not a required course. So many things I had struggled with in the past made infinitely more sense after taking this course. I finally understand how SSH keys work, so I can stop using cPanel file manager to upload files to this website (ha ha ha).
There is one thing …
The only problem I did find with the course was that the information it provided was definitely more theoretical than applicable – there are three pretty lengthy assignments that allow you to implement both client and server protocols, but most of that work isn’t actually related to the networking portion, but handling the requests/responses in your program. However, as I’ve stated above, with a good theoretical knowledge it becomes a lot more straightforward to follow technical tutorials online to actually do the things.
I highly recommend you take this course if you can. I can’t imagine there are many jobs out there today that don’t use some or all of this knowledge!