Resources

  • Zoom: Join lectures here!
  • EdStem: Used for announcements, online questions, etc.
  • Gradescope: Submit homework here, and receive grades for all assignments
  • Panopto: Viewing recorded lectures
  • Hours: Used to manage queuing for all one-on-one office hours
  • Extension request form: Used to manage queuing for all one-on-one office hours

To access these resources, you must either be enrolled in the course or have it in your cart. Course lists are synced periodically from Canvas/Banner, so it may take a few hours before you have access.

Course guides

Language Resources

Here are our favorite guides and resources for each language (click to expand):

Go
  • Getting started with Go: A concise tutorial on how to start writing and building Go programs

  • A Tour of Go: an interactive, concise introduction to the Go programming language. We highly recommend it for new (and inexperienced) learners of Go
  • Go By Example: a hands-on introduction to Go with annotated example programs, with nice snippets of idiomatic Go code for different constructs
  • This repository provides some examples of a “standard” package layout (note that many people, including the Go tech lead, object to this structure; we provide it here simply for inspiration). Another package layout resource is this blog post.
Rust
  • The Rust Book is the forefront resource on learning Rust. We highly recommend at least skimming through the book to learn about the language’s various features. In particular, Chapter 4 is a good introduction to Rust’s unique memory model, chapter 16 is useful for concurrency, and chapter 20 is useful for networking.
  • This blog post provides a lightning introduction to Rust. We recommend the Rust book as the authoritative source, but this blog post is another well-written resource.
    • Each of the author’s articles are well-written, in-depth explorations of many of Rust’s (and programming in general) nuances. We highly recommend perusing through some if you have the time!
  • Rust By Example is another hands-on introduction to Rust with annotated example programs.
  • This tutorial on Rust networking implements a simple “echo server” in Rust, which provides a good end-to-end example for working with sockets
C
  • Beej’s Guide to Network Programming is one of the most in-depth explanations of socket programming. We would highly recommended reading it if you’re confused about the various system calls (connect, accept, bind, etc.) required for socket programming.
    • Although in C, Go/Rust developers wishing to learn the UNIX/POSIX network API will benefit from this as well!
  • This demo video on socket programming in C and accompanying example code implements the guessing game example in C. This video is from the Spring 2022 version of the course, which primarily used C during lectures–see the course website for this version of the course for more examples!
  • Sockets Slide Deck contains an older a quick-start for getting a C sockets program up and running.
  • Introduction to Asynchronous Programming is a great high level intro to the concepts of asynchronous programming. This helps explain when one may want to use asynchronous programming instead of traditional multithreading.
  • PThreads I and PThreads II are the slides from CS0330 for threading in C.
C++

Note that there is no standard networking library in C++, so you will need to review C’s network API and system calls. If you wish to use an external networking library, please contact the course staff.

  • Wireshark Docs
  • TCP Vegas contains a very useful description of how to read TCP Graphs. See section 2.2 on page 3 for a good explanation of how to interpret both Trace graphs and window graphs.
  • Git Cheat Sheet documents the basic git commands you will be using most of the time. The rest of the documentation on github is comprehensive and should be very helpful if you are stuck.
  • Pro Git is a comprehensive guide to Git. We recommend reading chapter 2 (minus the section on tagging), and chapter 3 (minus the section on rebasing).