Skip to content

Topics & Readings

Week 1 - Intro

Key Ideas

  • Challenges of writing good software.
  • Understand where Software Engineering as a discipline comes in.
  • Introduce this course's perspective.
  • Establish how this course will work.

Required Context

APoSD: Chapters 1-3, and 19

These first few chapters introduce some key concepts about why writing software is hard.

Why Software Fails - A short essay on the reasons and ways software fails.

References & Additional Resources

Week 2 - Designing for the Public

Key Ideas

  • Understand user-centered and human-centered design.
  • Discuss their importance to civic technology.
  • Consider how these principles will apply to building your projects.

Required Context

References & Additional Resources

Week 3: Building Together

Key Ideas

  • Understand common software methodologies.
  • Learn a pragmatic approach to working together in a small team.
  • Learn to use version control effectively on a team.
  • Learn about code quality tools in software collaboration.

Required Context

  • APoSD Chapters 4-9 - These chapters discuss modular software design. This is useful as we think about working in a collaborative team, and will help greatly when we need to test our code.
  • APoSD Chapters 11-15 - These chapters focus on making your code understandable. This is an increasingly important consideration as your team size grows.

References & Resources

Week 4: Building Reliable Software

Key Ideas

  • Using Git and GitHub effectively on a team.
  • Examine different types of software testing & best practices for writing testable software.

Required Context

  • Python Testing Overview - Notes from 30122 on testing in Python, review if you haven't thought about testing in a while.
  • APoSD Chapter 10 - This chapter discusses exceptions. Note that it is a somewhat unorthodox stance, and not necessarily in line with how most Python programmers think of exceptions.
  • APoSD Chapter 19 - A short chapter on the author's stance on various trends in software development. (Part of the path to developing your own taste when it comes to software is getting opinions from experienced people and deciding which parts fit your personal style.)
  • APoSD vs Clean Code - A discussion/debate between the author of APoSD and another popular book, Clean Code.

References & Resources

Week 5: Interfaces & APIs

Key Ideas

  • Principles of interface design.
  • Introduce some design patterns (our first) that relate to interface design.
  • Examine common interfaces through a look at HTTP & related API paradigms.

Required Context

It will be helpful to come having prepared on two topics:

1. HTTP

We'll be using HTTP both as an example of interface/protocol design & it will assist in our discussion of APIs. It will be helpful to understand the differences between HTTP verbs, and the general structure of an HTTP message.

Unless you have covered this in another course, I would recommend reading the first four sections of this guide: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Overview

You can skim/skip anything about HTTP/2 or QUIC. Those are encrypted versions of the HTTP/1.1 protocol, and do not change the message format.

You have what you need after the fourth section, everything starting with MIME types is too in-depth for our purposes.

2. REST

You may have heard the term REST or RESTful API. This is an hugely influential concept in modern API & web application architecture.

This is the paper that coined the term:

Fielding, Roy Thomas. Architectural Styles and the Design of Network-based Software Architectures (2000) - Chapters 5 and 6

This is admittedly not the easiest read, especially if you haven't read this particular kind of writing before.

You may find it useful to refer to the Wikipedia article on REST, which also provides helpful context and a thorough summary.

References & Additional Resources

Week 6: Functional Patterns

Required Context

We'll be discussing functional programming patterns this week.

I would recommend reading this helpful introduction to functional concepts in Python:

It will also be helpful for Wednesday's class to have read over this:

Also, now is a good time to be thinking about the topics in APoSD Chapters 17 & 18 which are applicable to our next few weeks.

References & Resources

Week 7: OOP Design Patterns

Required Context

If you haven't read APoSD Chapters 17 & 18 now would be the time to do so.

I would also suggest looking at a few patterns either in Refactoring Guru or Python Patterns below. Choose 2-3, to get a sense of how the author(s) recommend you approach patterns.

References & Resources

  • Refactoring Guru's Design Patterns - a nice guide to design patterns that's a bit more readable than the Gang of Four book (below)
  • "Gang of Four" book: Design Patterns - the canonical text on Design Patterns. More geared towards OOP than most modern programmers would prefer, but still well-regarded.
  • Python Design Patterns - A thoughtful reimagining of the "Gang of Four Book"

Week 8: Refactoring & Advanced Architecture

Our penultimate week together we will focus on what happens as applications grow and need to be refactored, as well as architectures beyond those introduced earlier in the quarter and when you would adopt them.

There are no required readings this week.

References & Resources

Week 9