Software Design by Example: A Tool-Based Introduction with Python builds small versions of the things programmers use in order to give some insights into how experienced programmers think. This material can be used for self-paced study, in an undergraduate course on software design, or as an intensive workshop for programmers.