notes for book How to Design Programs