Working through Structure and Interpretation of Computer Programs