Robust Systems Design and Implementation

Spring 2021


Course Info

CSCI 499, 30164R
M/W 10-11:50am, via Zoom
Instructor: Barath Raghavan (Office hours: Tu 2-3pm -- USC Zoom link)
Course Producer: Adam Egyed <egyed@usc.edu> (Office hours: M noon-1pm, W 2-3pm, Th 10am-12pm -- USC Zoom link)


Overview

This course will concern how to build robust and elegant software, structured around a single project, and leveraging best practices from industry. Over the semester you'll write a single system in C++ that is several thousand lines long, all from scratch. All projects will be done individually. More importantly, every line of code will be code reviewed and we will iterate on the specifics of project designs and implementations over the semester. We will put into practice code review (both in and out of class, including peer review), design review, unit testing, style guides, interpretation of automated analysis, and benchmarking. While your projects will be individual, you will do peer review and collaborate throughout the course. Class time will be largely devoted to code/design review and discussion, and to student presentations.


Course Structure

The course will involve discussion and group work during class and very little traditional lecture. The focus of the class will be on submitting code for review and fixing it after review, and presenting the design and review of other's code. Attendance is required due to the discussion-oriented course structure.


Readings

There will be a few reading assignments, mostly in the early weeks of the semester, and class discussion about those reading assignments. There will be no written responses required for reading assignments.


Project

Project Specification


Grading

Details of grading will be provided in class. Unlike in other courses, code can and should be submitted and resubmitted, with grades being assigned only on the final version. Grades will be determined based upon the project, class participation, and attendance as follows:

75% Project (25% for each of 3 milestones)
25% Class participation and attendance


Schedule

Date Reading Assignment Due
M 1/18 Holiday -
W 1/20
Welcome
- -
M 1/25
  • Set up a Vagrant VM of a Linux distro that has Clang 6+ and GCC 7+, such as Ubuntu 20.04.1.
  • Among the Google C++ style guide rules, identify one that you agree with, one that you disagree with, and one you are confused by. For each, prepare a code example that compiles in your VM to present in class.
  • Send a pull request to usernames `barath` and `adamegyed` on GitHub (for mergesort).
W 1/27
RAII, Testing
  • Send a pull request of your mergesort that uses glog, gflags, and benchmark, and has associated tests.
M 2/1
Project
  • Compile a sample GRPC-based program and test it in your VM to share in class.
W 2/3
  • Submit a project pull request.
M 2/8
Automated Bug Fiding
  • Submit a project pull request.
W 2/10
Quick vs. Clever
  • Submit a project pull request.
M 2/15 Holiday -
W 2/17
Global-scale System Design
-
  • Submit a project pull request.
M 2/22
Global-scale System Design
-
  • Submit a project pull request.
W 2/24
Go Language / Project Phase 2 Overview
-
M 3/1
Logging / Prometheus
First phase due.
W 3/3
Fuzzing / Security
-
M 3/8 Guest: Chris Tuttle -
W 3/10 Guest: Chris Tuttle -
M 3/15
Reflection
  • Submit a project pull request.
W 3/17
Debugging
-
  • Submit a project pull request.
M 3/22
Static Analysis
-
  • Submit a project pull request.
W 3/24 Guest: Melvin Walls
  • Submit a project pull request.
M 3/29
Naming and Addressing
  • Submit a project pull request.
W 3/31
Project Phase 3 Overview
- Second phase due.
M 4/5
Code Synthesis
  • Building a protobuf alternative
-
W 4/7 Holiday -
M 4/12
Internet Architecture
- -
W 4/14
SRE / Chaos Engineering
-
M 4/19
Systems Tour
- -
W 4/21 -
M 4/26
  • (1) Organic Startup Ideas, (2) How to Get Startup Ideas, (3) Relentlessly Resourceful, (4) What Startups are Really Like (patterns 3-12) Graham
  • -
    W 4/28 Code Review Third phase due.