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
- Mar 21
- Debugging (1)
- Mandatory reading: Zeil’s Debugging – Using Hypotheses to Track Down the Culprit
Optional reading: Ko and Myers’ Designing the WhyLine: A Debugging Interface for Asking Questions about Program Behavior
- Mar 23
- Debugging (2)
- Mandatory reading: Zeller’s Automated Debugging: Are We Close?
Optional reading: Cleve and Zeller’s Locating Causes of Program Failures
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)
- 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