Robust Software Design and Implementation

Spring 2020


Course Info

CSCI 499, Section ID: 29998D
Tuesday 2-5:20pm, KAP 164
Instructor: Barath Raghavan
Course Producers: Aliya Petranik (petranik@usc.edu), Tianhang Liu (tianhanl@usc.edu)
Office Hours: Barath Raghavan (W 9-10am, SAL 214), Aliya Petranik (Th 4-6pm, SAL lab), Tianhang Liu (M 2-4pm, SAL lab)


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 others' 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
Tu 1/14
Welcome
- -
Tu 1/21
  • Send a pull request to username `barath` on GitHub (for mergesort).
  • Set up a Vagrant VM of a Linux distro that has a minimum of Clang 6 and GCC 7, such as Ubuntu 18.04.
  • Google C++ Style Guide
  • Googletest primer
  • Google glog
  • Google gflags
  • Google benchmark
  • GRPC
  • 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.
Readings due.
Tu 1/28
RAII, Testing
- First PR due.
Tu 2/4
Project
- -
Tu 2/11
Quick vs. Clever, Unit Testing
- -
Tu 2/18
Automated Bug Finding
- -
Tu 2/25
(No class, project Q+A)
- -
Tu 3/3
Global-scale System Design
- -
Tu 3/10
Performance choices
- -
Tu 3/17
(No class, spring break)
- -
Tu 3/24
Project Phase 2 Overview
- -
Tu 3/31
Contact Tracing Architecture
- -
Tu 4/7
Golang / Prometheus
- -
Tu 4/14
Security
- -