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.
Chapter 19 is a short chapter on where the author of this book stands 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.)
Why Software Fails - A short essay on the reasons and ways software fails.
References & Additional Resources
- A Philosophy of Software Design Review - A reminder to view this book, and any book of this kind, with a grain of salt.
- Programmers: Stop Calling Yourselves Engineers - A case that the word engineering implies more than the field lives up to.
- Why Are Software Engineers (Not) Engineers? - A viewpoint on the word engineer as it applies to job titles.
- Programmer Archeologists
- Against Software Development
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
- Code for America: What does it mean to build with, not for?
- usability.gov: User Centered Design
- UCD Introduction
- Community Based, Human Centered Design
References & Additional Resources
- usability.gov: Benefits of UCD
- Embedding Equity in Civic Design to Transform Customer Experience
- Scenario Mapping: Design Ideation Using Personas
- The Eight Golden Rules of Interface Design
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
- Agile Manifesto - A document created by a gathering of software developers that is responsible for the "agile revolution."
- Heuristics for Effective Software Development Organizations
- Managing the Development of Large Software Systems - the original "Waterfall" paper, which you will find, does not actually advocate for the waterfall method as it is often understood.
- Breaking Down Tasks - a recent blog post by Jacob Kaplan-Moss, which does an excellent job of talking through the process of scoping work with few assumptions.
- GitLab Engineering Handbook - A well-written set of engineering values from an open source team.
- Atlassian's Agile Guide - A comprehensive guide to agile methodologies from the company behind a very popular suite of agile tools.
- Conventional Commits - A popular git commit style guide.
- Bikeshedding - A useful term to recognize/avoid a common problem on teams.
Week 4: Building Reliable Software
Key Ideas
- Discuss using Git and GitHub effectively on a team.
- Discuss different types of software testing & best practices for writing testable software.
- Understand the role of observability (such as logging).
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 - This chapter dives into Software "trends" including TDD and Agile.
- APoSD vs Clean Code - A discussion/debate between the author of APoSD and another popular book, Clean Code.
References & Resources
- You are never taught how to build quality software - On the importance, and neglect of, Quality Assurance