This has been favorite class that I have taken at CMU so far, and that’s mainly because of the Justine Sherry and her TAs. Justine is very casual and very energetic. She’s always throwing candy around for people answering questions or if there aren’t enough people answering questions. The TAs are most phD students in her research group who will sometimes teach the class and give lectures about the research they are doing.
There were also cool guest lecturers from CloudFare and Netflix that were really interesting to hear about. I’d definitely check out the Cloudflare blog and the Netflix blog to see more details about how these companies design and think about their systems.
This class satisfied my systems elective but is one of the more lowkey classes here. Typically, people wanting more practical or standard classes will take 15440 (Distributed Systems) or 15445 (Databases). For those that are interesting in High-Performance computing, they will take (15418). I believe this class could be another great contender as a systems class. The class goes over the foundations of the Internet and some of the history and the design decisions about why the internet stack looks the way that it is. From a person that I’ve spoken to who has also taken Distributed Systems, he said that the content overlapped a lot, which makes sense given the distributed nature of the internet.
I had a vague idea about how the internet is implemented, mostly through UDP/TCP, DNS, IP, and the network stack. There’s a lot more interesting and unsolved problems here that I would have never encountered without this class. What’s impressive about the internet is just how insecure and unsafe it can be, but you’ll have to take the class to know what I mean.
The course has three projects that work with different parts of the network stack. Projects can be done partnered or soloed. It’s ideal to work in pairs to get used to working with others, but it is not too bad to work by yourself for these.
The first dealt with Secure Ethernet Routing where a person wants to send information to another person anonymously. The second project was reimplementing a TCP algorithm called TCP Reno. This project gave me and my partner problems dealing with packets coming out of order. Unfortunately, we could not make TCP Reno fast enough to pass all the tests.
The third project implemented HTTP requests as a client and server. For those working with web applications before, you’ll feel the most familiar to this project. There is also a similar project in 15213, ProxyLab. The big difference is that 15213 uses separate threads for each HTTP request, but in this implementation, it is required to do handling in a single thread while using poll/epoll to handle concurrent requests. I learned some interesting info about optimizations that HTTP makes to do requests faster like Pipelining, Persistent Connections, and Out-Of-Order Message Handling (HTTP 3 hopefully coming soon to all web servers).
Overall, the projects were fair, and the TAs and classmates are really receptive on the forums. I’d recommend getting used to the Python Sockets library in the Stdlib as it will help making requests to your servers and general testing. My one complaint about the class is that the gradescope grading could be improved a bit. Some tests had some false issues, and given that we had unlimited submissions, it would be nice to see why our code failed on the autograder because sometimes it is just some fine tuning on the grader side that needs to be changed.
I wish more people would take this class as it’s interesting content, the professor is amazing.