1 Talking with Computers
1.1 Computers everywhere
1.2 Everyday magic
1.3 Hacking in mathematics
1.4 Programming in logic
1.5 Scheming in Lisp
2 The Shell Game
2.1 Shell programming
2.2 Shell variables
2.3 Information passing
2.4 Asynchronous processes
3 Keeping Track of Your Stuff
3.1 Finding stuff
3.2 Organizing your stuff
3.3 Database management
4 Don’t Sweat the Syntax
4.1 Specifications and implementations
4.2 Syntactic variations across languages
4.3 Stylistic variations across implementations
4.4 Developing a facility for language
5 Computational Muddles
5.1 Computational models
5.2 The substitution model
5.3 Syntax and style revisited
6 Getting Oriented
6.1 Structuring large programs
6.2 Procedures that remember
6.3 Object-oriented programming
6.4 Programming with constraints
7 Thanks for Sharing
7.1 Code for the taking
7.2 Class conscious
7.3 It’s just syntax
8 You’ve Got (Junk) Email
8.1 Artificial intelligence
8.2 Machine learning
8.3 Learning with probabilities
8.4 Learning more about learning
9 Modern Architecture
9.1 Logic gates
9.2 The digital abstraction
9.3 Addition and multiplication
9.4 Computer memory
9.5 Machine language
10 Do Robots Sleep?
10.1 Stacks and subroutines
10.2 Managing tasks
10.3 Multithreaded robots
10.4 Allocating resources
10.5 Metaphorically speaking
11 Under the Hood
11.1 Client-server model
11.2 Acronym city
11.3 Alphabet soup
11.4 Smart milk cartons
12 Analyze This
12.1 Analyzing algorithms
12.2 Computational limitations
12.3 Theory that matters
13 Forest for the Trees
13.1 Graph theory
13.2 Graph algorithms
13.3 File systems as graphs
13.4 The web graph
13.5 Pianos and robots
14 Searching the Wild Web
14.1 Spiders in the web
14.2 Measuring similarity
14.3 Measuring authority
14.4 Searching for exotic fruit
15 Darwin’s Dangerous Algorithm
15.1 Competing hypotheses
15.2 Genetic algorithms
15.3 Survival of the fittest
16 Ain’t Nobody Here But Us Machines
16.1 Machine intelligence
16.2 Other minds
16.3 Freedom to choose
16.4 Carrying on