Difficulty: 6/10 · Time Commitment: 7/10 · Enjoyability: 4/10 · Mark: 90
I did COMP3331 (Computer Networks and Applications) in Term 1 2022. The subject introduces Computer Networks and is the basis for some really important fields in computer science. The subject consists of weekly labs, a midterm exam, an assignment and a final exam. Although this is the typical format of most CS courses, they are very unique in their style and structure.
- Very important content with lots of applications
- Great lecturer (Salil) who is great at explaining content and makes it interesting to learn
- The weekly labs are really dry and tedious
- Each week builds on prior content but the first few weeks are very hard to understand without the content from the 2nd half
- Very content heavy
- No coding demonstrations in lectures mean all coding needs to be self-taught (which isn’t too hard but can be confusing at times)
COMP3331 consists of really useful theory which is the foundation for many related courses on computer networks. It provides a high level overview of how computers communicate with each other and how IP and DNS work. Additionally, the course outlines how different methods of transferring data have evolved over time, such as the differences between packet switching and circuit switching, and different forms of encryption. The last one or two weeks focus on network security and how to both check whether a user is who they say they are, and to verify that their messages haven’t been tampered with.
Lectures and Tutorials
Unlike most first and second year courses, I would say most students would need to watch every lecture to do well in this course. For many other courses, I read lecture slides afterward and used the labs to consolidate them, however, this course is extremely content heavy and Salil does a really good job at explaining harder concepts during lectures.
I never found tutorials useful for this course and stopped going after only one or two weeks because they were mostly like Q&A sessions and didn’t provide anything I couldn’t get from lectures and tutorial recordings. Tutorial recordings were much more helpful because they went through more theory than the in-person ones and explained the important concepts from the lectures in an engaging and digestible way.
The way this course is structured is very unique - the main concepts are taught in the first few weeks and then slowly explained throughout the rest of the term. Because of this, labs in the first half of the term and the midterm exam are both much harder than everything towards the end of the term. The midterm exam is where I lost the majority of my marks (out of the 10 marks I lost in this course, 7 were from the midterm exam) and so, doing well here will definitely make the rest of the term much less intensive and stressful.
This course has one big assignment that is released around midway through the term and due at the end of the term. This assignment involves connecting a server and multiple clients via UDP or TCP packets in order to execute some tasks. The spec of the assignment is very long and there are a lot of edgecases that are not specifically mentioned within the criteria itself. Despite this, the marking for the assignment seems very generous and although I don’t know how it is marked, I think the submission is manually tested against only a handful of test cases instead of being subject to a very thorough test suite of edgecases.
- Understand every practice problem before each exam. As mentioned above, the midterm exam is extremely difficult and contains not only the theoretical content from the lectures but also practical content in the form of calculations gone through in the lectures and covered in the practice problems. These are very mathematically dense and if you haven’t seen them before the exam, it is very difficult to finish them before time runs out.
- Don’t stress about the assignment. Having an assignment with a very long spec and no autotests seems really daunting, however, if you start by around week 8 or 9, it is definitely possible to finish the entire assignment in 10-15 hours. Try to use Python for the assignment if you have a choice because it makes sending requests between a server and client extremely easy and allows you to use libraries to simplify a lot of the coding.
- Write down short definitions for each of the key terms in the course. There are so many acroyms in this course like UDP, TCP, IP, DNS, P2P, DHCP, MAC etc. While these are all covered extensively throughout the course, it can be very helpful to make a little cheatsheet to refer to during lectures that you can refer to as a reminder for what a term can mean.