Requirements

Before you start this course, make sure you’ve read and followed all of the instructions in the prep document. This will get you set up and explain how to work through the projects.

Remember: you can always Google or ask for help if you get stuck.

Projects

This course is structured into self-contained projects that you can work through at your own pace.

Each project has its own directory with a README.md file that has instructions. If you want to take a look at one way of completing an exercise, there’s some code waiting on a branch prefixed impl/ (short for “implementation”) and an associated Pull Request for you to look at. Try not to copy!

Most exercises finish with a list of optional extension tasks. It’s highly recommended that you try them out. Note that often the extensions are open-ended and under-specified - make sure to think about them with a curious mind: Why are they useful? What trade-offs do they have?

  1. CLI & Files An introduction to building things with Go by replicating the unix tools cat and ls.
  2. File Parsing Practice parsing different formats of files, both standard and custom.
  3. Servers & HTTP requests Learn about long-running processes, HTTP and curl
  4. Servers & Databases Build a server that takes data from a database and serves it in json format
  5. Multiple Servers Build and run file & API servers behind nginx in a simple multi-server architecture
  6. Docker & Cloud Deployment Use containers to reproducibly deploy applications into the cloud
  7. gRPC Learn about RPCs and how they differ from REST, and start thinking about observability
  8. Batch Processing Build an image processing pipeline with cloud storage
  9. Buggy App Run, debug, and fix a buggy application
  10. Memcache Explore sharding and replication of state
  11. Kafka Cron Build a distributed multi-server application handling variable load, with Kafka as a task queue
  12. RAFT and OTel Build a complex distributed system for with strong consistency, and instrument it with tracing