Software Design in Python
a tool-based introduction
The best way to learn design is to study examples, and some of the best examples of software design come from the tools programmers use in their own work. These lessons build small versions of file backup systems, testing frameworks, and regular expression matchers both to demystify them and to give some insights into how experienced programmers think.
We shape our tools, and thereafter our tools shape us.
— Marshall McLuhan