Documents

This page has a series of helpful links for various topics. Emphasized links (bold, bigger font) are extremely useful for the content of this course and we recommend you look them over.

Language Resources

Go

  • A Tour of Go is an interactive, concise introduction to the Go programming language. We highly recommend it for new (and inexperienced) learners of Go; it provides an overview of all of its major language features, including the unique concurrency model.
  • Go By Example is a hands-on introduction to Go with annotated example programs, with nice snippets of idiomatic Go code implementing various different programming constructs, from file I/O to channel synchronization.
  • The Go blog provides more in-depth articles on specific features within Go. We recommend it if you want to learn certain aspects of Go more in-depth; for example, we found the blogs on slices, errors, and project organization quite helpful.
  • 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.
    • We don’t have an official requirement on package structure; use whichever one works for you!

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.

Course Environment Setup

  • The Container environment setup contains instructions for setting up your Docker development environment. We highly recommend using Docker for course development.
  • If running the Docker environment is not feasible for you, please contact the course staff and we can work out an environment for you. In particular, the Docker environment does NOT run on department systems–if this would be problematic for you, let us know.

Conventions

Using Wireshark

TCP Resources

  • 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.

Working with Git

  • 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. If you have never used Git before and want to get a solid understanding of how it works, we recommend reading chapter 2 (minus the section on tagging), and chapter 3 (minus the section on rebasing).