Robust Software Design and Implementation

Spring 2019


Course Info

CSCI 499, Section ID: 29954
M/W 4-5:50pm, GFS 107
Instructor: Barath Raghavan
Office Hours: Tue 2-3pm


Overview

This course will concern how to build robust and elegant software, built around a single project, and leveraging best practices from industry. You will write, over the semester, a single medium-sized piece of software in C++ (several thousand lines) from scratch. 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. You will do coding projects individually but will do peer review and collaborate in later phases of the project. 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.


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

Chirp Project Description


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/7
Welcome
- -
W 1/9
  • Set up a Vagrant VM of a Linux distro that has a minimum of Clang 6 and GCC 7, such as Ubuntu 18.04.
  • 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.
M 1/14
  • Refine your sort implementation into a project that uses glog, gflags, gbenchmark, and gtest to present in class. Add any relevant features to make use of all of these libraries. Use any build system you prefer.
W 1/16
RPC
Project
  • Install GRPC and prepare for demonstrating in class a very short example that shows a client sending a GRPC request to a server and getting a response.
M 1/21
Holiday
- -
W 1/23
Concurrency
RAII
-
  • Submit at least one pull request for review for your project implementation.
M 1/28
Design
Testing
-
  • Submit at least one pull request for review for your project implementation.
W 1/30
Refactoring
-
  • Submit at least one pull request for review for your project implementation.
M 2/4 -
  • Submit at least one pull request for review for your project implementation.
W 2/6
Testing
  • Submit at least one pull request for review for your project implementation.
M 2/11 -
  • Submit at least one pull request for review for your project implementation.
W 2/13 - Project Phase 1 Due 11:59pm on 2/14 (via pull request)
M 2/18
Holiday
- -
W 2/20 Design presentations
M 2/25 Q+A
W 2/27 Full stack design
M 3/4 Full stack design
W 3/6 Practice of Programming
M 3/11
Holiday
W 3/13
Holiday
M 3/18 Optimization
W 3/20 Phase 3
M 3/25 Golang
W 3/27 Golang systems Project Phase 2 Due (push to master)
M 4/1 Deriving design principles
W 4/3 Course design
M 4/8 No class
  • Submit at least one pull request for review for your project implementation.
W 4/10 Introspection
  • Submit at least one pull request for review for your project implementation.
M 4/15 Channels
  • Submit at least one pull request for review for your project implementation.
W 4/17 Awful code
  • Submit at least one pull request for review for your project implementation.
M 4/22 State machines
  • Submit at least one pull request for review for your project implementation.
W 4/24 TBA Project Phase 3 Due (push to master)