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)
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.
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.
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.
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
Date | Reading | Assignment Due |
---|---|---|
M 1/18 | Holiday | - |
W 1/20 Welcome |
- | - |
M 1/25 |
|
|
W 1/27 RAII, Testing |
|
|
M 2/1 Project |
|
|
W 2/3 |
|
|
M 2/8 Automated Bug Fiding |
|
|
W 2/10 Quick vs. Clever |
|
|
M 2/15 | Holiday | - |
W 2/17 Global-scale System Design |
- |
|
M 2/22 Global-scale System Design |
- |
|
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 |
|
|
W 3/17 Debugging |
- |
|
M 3/22 Static Analysis |
- |
|
W 3/24 | Guest: Melvin Walls |
|
M 3/29 Naming and Addressing |
|
|
W 3/31 Project Phase 3 Overview |
- | Second phase due. |
M 4/5 Code Synthesis |
|
- |
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 |
|
- |
W 4/28 | Code Review | Third phase due. |