Learning a programming language, first of all, needs to increase the ability to solve problems, and mathematics increases the ability to solve problems. This book has three overarching themes: systematic problem solving, the power of abstraction, and computation as a way of thinking about the universe. When you finish the book:

- You have learned a programming language (Python) to express calculations.
- You have learned a systematic approach to organizing, writing and debugging programs.
- You have an understanding of computational complexity.
- You have the knowledge to transfer the problem statement to the calculation formula and problem solving method.
- You have learned a useful set of algorithms and problem reduction techniques.
- You have learned how to use randomization and simulation to solve problems that are not easily solved with closed-form solutions.
- You have learned how to use computational tools (including statistical tools, visualization and machine learning) to model and understand data.

Chapter 1: Getting started

Chapter 2: Introduction to Python

Chapter 3: Some simple numerical programs

Chapter 4: Functions, scope and abstraction

Chapter 5: Structured and mutable data types

Chapter 6: Recursive relations and global variables

Chapter 7: Modules and files

Chapter 8: Testing and Debugging

Chapter 9: Exceptions and Notices

Chapter 10: Classes and Object Oriented Programming

Chapter 11: Introduction to Algorithm Complexity

Chapter 12: Some simple algorithms and data structures

Chapter 13: Diagram and additional class concepts

Chapter 14: Knapsack and Graph Optimization Problems

Chapter 15: Dynamic Programming

Chapter 16: Random Stepping and Data Visualization

Chapter 17: Random Programs, Probability, and Distributions

Chapter 18: Monte Carlo simulation

Chapter 19: Sampling and Assurance

Chapter 20: Understanding Experimental Data

Chapter 21: Random tests and hypothesis testing

Chapter 22: Lies, damned lies and statistics

Chapter 23: Exploring Data with PANDAS

Chapter 24: A quick look at machine learning

Chapter 25: Clustering

Chapter 26: Classification methods