Skip to main content Link Search Menu Expand Document (external link)

Calendar

Week 1

Jan 17
Introduction
No reading, but you should come to class (even if you’re on the waitlist) to do an in-class activity. If you’re unable to come to class (e.g., you’re sick), email me - the activity can also be completed remotely, and it’s important that everyone does it.
Jan 19
Code-level Design
Mandatory reading: Spolsky’s The Joel Test (note that this article is from 2000, so the examples are a little dated) and Triglia’s Why you should use Black for your Python style linting

Optional reading: Ajami et al.’s Syntax, predicates, idioms — what really affects code complexity?

Week 2

Jan 23
Individual Project 0 due
Jan 24
Process
Mandatory reading: The Agile Manifesto (this should take under a minute to read, but I suggest you think about what it is advocating for at least a few minutes before moving onto the next article), Hosking’s Agile Projects Have Become Waterfall Projects With Sprints, and the Individual Project 1 Specification

Optional reading: Anda et al.’s Variability and Reproducibility in Software Engineering: A Study of Four Companies that Developed the Same System

Jan 26
Code Review
Mandatory reading: Google’s How to do a code review (read all six linked sub-pages in the bulleted list)

Optional reading: Bacchelli and Bird’s Expectations, Outcomes, and Challenges Of Modern Code Review

Week 3

Jan 31
Version Control
Mandatory reading: Ernst’s Version control concepts and best practices

Optional reading: De Rosso et al.’s Purposes, concepts, misfits, and a redesign of git

Feb 2
Working in Teams
Mandatory reading: Jackson’s The Google Technical Interview and the Individual Project 2 Specification

Optional reading: Behroozi et al.’s Hiring is Broken: What Do Developers Say About Technical Interviews?

Feb 2
Individual Project 1 due

Week 4

Feb 7
Requirements and Specifications (1)
Mandatory reading: Spolsky’s How to be a Program Manager and the Group Project Specification

Optional reading: Ernst et al.’s The Daikon system for dynamic detection of likely invariants

Feb 7
Project Formation due
Feb 9
Requirements and Specifications (2)
Mandatory reading: Wayne’s Using Formal Methods at Work

Optional reading: Lamport’s Introduction to TLA

Week 5

Feb 14
Testing (1)
Mandatory reading: Shore’s The Art of Agile Development: Test-Driven Development

Optional reading: Saff and Ernst’s An Experimental Evaluation of Continuous Testing During Development

Feb 16
Testing (2)
Mandatory reading: Petrovic’s Mutation Testing

Optional reading: Memon et al.’s Taming Google-Scale Continuous Testing

Week 6

Feb 21
Testing (3)
Mandatory reading: SQLite’s How SQLite is Tested

Optional reading: Barr et al.’s The Oracle Problem in Software Testing: A Survey

Feb 21
Project Plan due
Feb 23
Languages
Mandatory reading: Howarth’s Why Discord is Switching from Go to Rust

Optional reading: Hoare’s Hints on Programming Language Design (shorter than it looks!)

Week 7

Feb 28
Build Systems
Mandatory reading: Atwood’s The F5 Key Is Not a Build Process

Optional reading: Mokhov et al.’s Build Systems à la Carte

Feb 28
Individual Project 2 due
Mar 2
Static Analysis (1)
Mandatory reading: Ayewah et al.’s Experiences Using Static Analysis to Find Bugs

Optional reading: Bessey et al.’s A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World

Week 8

Mar 7
Static Analysis (2)
Mandatory reading: Schwartz-Narbonne’s How to integrate formal proofs into software development

Optional reading: Chapter 2 (“Abstract Interpretation”) of Ernst’s Notes on Program Analysis

Mar 7
Revised Project Plan due
Mar 9
Free and Open-source Software
Mandatory reading: Stallman’s Why Open Source Misses the Point of Free Software

Optional reading: Terrell et al.’s Gender differences and bias in open source: pull request acceptance of women versus men

Mar 11
First Optional Reading Response due

Week 9

Mar 14
No class - spring break.
Mar 16
No class - spring break.

Week 10

Week 11

Mar 28
No class (Martin has the flu)
Mar 30
Software Architecture (1)
Mandatory reading: Kästner’s Thinking Like a Software Architect

Optional reading: Garlan’s Software Architecture

Mar 30

Week 12

Apr 4
Software Architecture (2)
Mandatory reading: Fowler’s Writing Software Patterns (read up to, but not including, “Common Pattern Forms”) and Lewis and Fowler’s Microservices

Optional reading: Kellogg et al.’s Verifying Object Construction

Apr 6
Tech debt, refactoring, and maintenance (1)
Mandatory reading: Allman’s Managing Technical Debt

Optional reading: Kim et al.’s A Field Study of Refactoring Challenges and Benefits

Week 13

Apr 11
Tech debt, refactoring, and maintenance (2)
Mandatory reading: Spolsky’s Things you should never do, part I

Optional reading: Malkawi’s The art of software systems development: Reliability, Availability, Maintainability, Performance (RAMP) (read up through the 4 “Cases” and then skip to and read the Discussion)

Apr 13
DevOps (1)
Mandatory reading: Sloss’ “Introduction” and Baye’s “Emergency Response” from Google’s Site Reliability Engineering

Optional reading: Dean and Barroso’s “The Tail at Scale”

Week 14

Apr 18
DevOps (2)
Mandatory reading: Lunney and Lueder’s “Postmortem Culture: Learning from Failure” from Google’s Site Reliability Engineering and Luu’s “Postmortem Lessons”

Optional reading: Xu et al.’s “Do Not Blame Users for Misconfiguration”

Apr 20
What is Software Engineering?
Mandatory reading: Shaw’s “What makes good research in software engineering?”

Optional reading: read 10 abstracts in the latest FSE proceedings and make a list of words you don’t know. Then, look up at least 5 of those words and write a brief definition. Submit the list of words, the 5 definitions, and the titles of the papers whose abstracts you read. (I recommend choosing the ten 10 papers whose titles sound the most interesting to you.)

Week 15

Apr 25
Software Engineer Panel
Mandatory reading: none, but attendance today counts for double participation. Also, submit at least one question before class on Canvas.

Optional reading: none

Apr 27
Final Exam (in-class)
Practice Exam (key)

Final Exam (key

May 2
Second Optional Reading Response due

Week 16

May 4
All group project final deliverables due
Exam Slot (8:30AM, Friday May 5)
Group project presentations, all final deliverables due BEFOREHAND. Attendence (in-person) is required. At least one group member must bring a laptop with a working local demo of your group project. Location: ECEC 115.
May 5
Individual Reflection due

© 2022-2023 Martin Kellogg, Jonathan Bell, Adeel Bhutta and Mitch Wand. Released under the CC BY-SA license