Review: CPSC 313, 317
Posted on June 22, 2015 in ubc • 5 min read
Again, a set of long overdue reviews for a bunch of 3rd year CPSC courses that I took in 2013W2, hopefully in time for fellow students who are considering registering for these courses. Enjoy, and as always let me know if you have any feedback; comments, questions, or suggestions are all greatly appreciated!
CPSC 313:
In a nutshell:
Language: Java, Y86 (a subset of x86 assembly used in this course)
Toolset: Eclipse, your preferred text editor
Prereqs: CPSC 213 and CPSC 221
Website/resources: CPSC 313, Piazza
Textbook: Computer Systems: A Programmer's Perspective, 2nd ed., by Bryant and O'Hallaron
CPSC 313 is more formally known as "Computer Hardware and Operating Systems", and is the spiritual successor of CPSC 213. If you've already taken (and enjoyed) 213, you should feel right at home here, since the focus is on many of the same topics taught in 213, only in far more depth. Instead of using the imaginary SM213 assembly language again, however, you'll be using a subset of x86 as taught by the textbook, i.e. Y86. You'll start off by learning the basic set of instructions provided to you by Y86, followed by designing and implementing a sequential CPU, then doing the same thing for a pipelined CPU. These topics will cover about a half, or slightly more, of the course; the remaining time will be spent on exploring caching, memory hierarchy, file systems, and virtual memory. While there might be small bits of overlap here with CPSC 213, most of the material covered in 313 is either new or dealt with in much greater depth.
Your total grade will be based on occasional in-class group exercises (5% total), 5 assignments (25% total), 2 midterms (25% total), and a final worth 45%.
It's worth pointing out that the pace of this course is very quick, more so than any of the other courses I've taken so far in 3rd year CPSC, and a lot of material builds on top of previously covered material. As such, you definitely want to stay on top of things, and ask questions early and often if you find yourself not understanding a concept taught in class (luckily there's Piazza for that, as well as tutorials). Also, tutorials are generally worthwhile in this course, so either go to them or do the tutorial exercises yourself. There is no term project, but there are 5 non-trivial assignments that may take up a considerable amount of time depending on your familiarity with the material taught in class. Assignments may consist of tasks as simple as adding an Y86 instruction to your simulator, to debugging problems in an implementation of a Y86 simulator, to eventually implementing things like data forwarding and branch prediction in your simulator; these tasks will involve writing code in either Y86 or Java (the simulator itself is written in Java). You can work in groups of 2 max, so definitely take advantage of that.
Dr. George Tsiknis is an amazing prof; he's very passionate and enthusiastic about the material he teaches, and he's quite fun and lively in class. It's also worth pointing out that his lecture slides are pretty awesome as well, and help to illustrate concepts that would otherwise be difficult to understand. However, he does have a strong accent that may take a while to get used to.
CPSC 317:
In a nutshell:
Language: C, Java
Toolset: Eclipse, your preferred text editor, GCC on the department Linux servers
Prereqs: CPSC 213 and 221
Website/resources: CPSC 317, Learning Catalytics, Piazza
Textbook: Computer Networking: A Top-Down Approach, 6th ed., by Kurose and Ross
CPSC 317, a.k.a. "Internet Computing", serves as UBC's introductory computer networking course. That's a very broad subject in of itself, and the topics covered by the course are also quite broad; you'll cover a bunch of communication protocols, and learn about key pieces of networking infrastructure, the protocol stack and the responsibilities of each layer, and some key paradigms and strategies such as isolation, data loss (and mitigation), performance, layers and abstractions, etc. You'll also touch upon bandwidth and latency, multimedia, reliability, peer-to-peer, and security/privacy (there was even a lecture that covered PGP fundamentals, which was a bit of a surprise to me). However, due to the breadth of topics covered, you actually won't go into much depth for many of the above topics in 317.
The marking scheme is as follows: 4 assignments (21% total), 4 quizzes (26% total), and a final exam worth 53%. Yes, those numbers are quite weird, but they do add up to 100.
The one thing in particular I wanted to point out about my CPSC 317 experience was the level of difficulty of the assignments, and the disconnect between the assignments and the material covered in lecture. The course itself and the material taught in class are quite straightforward, but I felt the assignments were much harder in comparison. I distinctly remember (even 2 years after the fact!) that one assignment in particular, which IIRC involved writing a FTP client, was sufficiently difficult that the instructor claimed 3/4 of all students in the class would've gotten a big fat zero on the assignment with what was handed in by the class on the due date; he did however end up giving the entire class an extra week to ask questions and finish the assignment. The other assignments were all quite challenging in one way or another: socket programming in C and Java, writing a client to stream video with RTSP and RTP in Java, and also implementing the server side portion of that video streaming assignment in C. I think a lot of the difficulty originiated from the fact that the assignments had very little to do with the material covered in lecture, or were barely touched upon during lecture. That's in contrast with CPSC 313, where the material was difficult (even more so than 317) but the assignments were directly related to the topics covered in lecture, and were in effect practical applications of the knowledge that students acquired during lectures; such assignments have IMHO more educational value and are less intimidating.
Dr. Donald Acton was the instructor for the section of CPSC 317 that I took in 2013W2. It's clear that he is passionate and very knowledgable about the topics covered in the course and he's also quite approachable as a professor. However, he does seem to go off on unhelpful tangents at times during lecture, and his various in-class examples during lecture were not always clear or sufficient. CPSC 317 was one of the few CPSC courses where I ended up cracking open my textbook out of necessity and studying from that rather than learning primarily through lectures, the latter being my preferred method as I'm largely a visual learner.