Below, you'll find a set of online resources designed to accompany the 6.00 lectures. We've found that the readings are generally more effective when done after the lecture, though you are of course welcome to read them at any time.

## General References

A textbook for 6.00 is now available. The book and the course lectures parallel each other, though there is more detail in the book about some topics. The book is NOT required. We will not be referring to it in assignments or depending upon it to cover holes in the lectures.

Guttag, John. *Introduction to Computation and Programming Using Python*. MIT Press, 2013. ISBN: 9780262519632.

An updated version of the textbook is also available:

Guttag, John. *Introduction to Computation and Programming Using Python: With Application to Understanding Data*. MIT Press, 2016. ISBN: 9780262529624.

If you choose not to purchase this book, you will probably find it useful to buy or borrow another book that covers Python. You might check your local public library's resources, or search online for a free Python text, such as *How to Think Like a Computer Scientist* or *An Introduction to Python (PDF)*.

## Lectures 1-3

- Introduction: Chapter 1 of
*How to Think Like a Computer Scientist* - Variables and statements: Chapter 2 of
*How to Think Like a Computer Scientist* - Strings: Variables and strings section of
*Python Programming*(also, the strings section) - Python variables are names: Other languages have "variables", from
*Code Like A Pythonista: Idiomatic Python* - For PS0: Input/output section of
*Python Programming* - Conditionals: Chapter 4 of
*How to Think Like a Computer Scientist*(through section 4.8), and the conditional statements section of*Python Programming* - Iteration: Loops section of
*Python Programming* - Tuples: Tuples and sequences section of the
*Python Tutorial* - More on traversing and slicing strings: Chapter 7 of
*How to Think Like a Computer Scientist*

## Lecture 4

- Functions, type conversion, and stack diagrams: Chapter 3 of
*How to Think Like a Computer Scientist* - More about functions: Chapter 5 of
*How to Think Like a Computer Scientist*(through section 5.4) - Recursion: Chapter 4 of
*How to Think Like a Computer Scientist*(from section 4.9 on), as well as Chapter 5 of*How to Think Like a Computer Scientist*(from section 5.5 on)

## Lecture 5

- Numbers: Floating point arithmetic: issues and limitations from the
*Python Tutorial* - Successive approximation: Wikipedia article on Newton's method

## Lecture 6

- Lists: Chapter 8 of
*How to Think Like a Computer Scientist* - Dictionaries: Chapter 10 of
*How to Think Like a Computer Scientist* - As a reference: the
*Python Tutorial*section on lists and dictionaries (feel free to skip 5.1.3 and 5.1.4)

## Lectures 7-8

- Asymptotic notation: Section 3 from the Spring 2005 6.042 lecture notes on OCW (PDF)
- Order of growth: Sections 2.1 and 2.2 from
*Computational Modeling and Complexity Science* - Binary search: Wikipedia article on binary search (focus on the recursive implementation in Section 4)

## Lectures 9-10

- Selection sort: Wikipedia article on selection sort
- Insertion sort: Wikipedia article on insertion sort
- Merge sort: Wikipedia article on merge sort

## Lecture 12

- The knapsack problem and dynamic programming: Introduction to dynamic programming on 20bits.com

## Lectures 14-16

Lots of reading on classes:

- Chapter 12 of
*How to Think Like a Computer Scientist* - Chapter 13 of
*How to Think Like a Computer Scientist* - Chapter 14 of
*How to Think Like a Computer Scientist* - Chapter 15 of
*How to Think Like a Computer Scientist* - Chapter 16 of
*How to Think Like a Computer Scientist*

## Lectures 17-19

- Random walks applet
- Matplotlib/pylab reference

## Lecture 20

- Monte Carlo method: Wikipedia article on the Monte Carlo method