How to Think Like a Computer Scientist - learning with Python