Python for Software Design: How to Think Like a Computer Scientist