This book is an opinionated path through the bewildering array of methodologies, languages, tools, and artifact types that collectively make up “software engineering.” The goal is to instill good software habits in students—testability, software architecture, modularity, and reusability—while providing them the gratification of building a working deployed artifact that they themselves (and their peers) would use and find compelling.