# must read

you must read these books.

## The Little Schemer

*By Daniel P. Friedman and Matthias Felleisen*

This book is an introduction into the world of Lisp. It teaches you to think in terms of recursion.

Just some of the things it contains:

- Building on top of primitives
- Functions: the essence of abstraction
- Approaching computation from a functional perspective
- Termination
- Applicative-order Y combinator
- Meta-circular evaluator

Sequels: The Seasoned Schemer, The Reasoned Schemer

## The C Programming Language

*By Brian Kernighan and Dennis Ritchie*

Essential to understanding how most modern programming languages work under the hood.

Introduction to basic algorithms and data structures:

- Linked list
- Hash table
- Sorting algorithms
- Recursive descent parser
- Binary search tree
- Virtual stack machine

## Understanding Computation

*By Tom Stuart*

Fundamental understanding of what computation is at its core. Computer science topics explained in a very approachable way, through implementing various simple machines in very few lines of ruby code.

Just a rough sampling of what it covers:

- Semantics
- Finite state machine
- Pushdown automata
- Turing machine
- Lambda calculus
- Universality
- Halting problem

## Code

*By Charles Petzold*

How computers work. Explains all the details of how hardware operates with almost no handwaving, including a whole bunch of historical information. Finishes with building an actual computer from scratch.

- Binary codes
- Basic electronics
- Logic gates
- Binary adder
- Flip-flops, Clocks
- CPU
- Assembly

## Gödel, Escher, Bach

*By Douglas Hofstadter*

A beautiful journey through formal systems, levels of abstraction, recursion, attempting to describe how consciousness can arise from lower levels. Decent introduction to propositional logic. Punny dialogues.

- Strange loops
- Formal systems
- Recursion
- Intelligence
- Levels of abstraction
- Meaning
- Propositional logic
- The brain
- Consciousness
- Computation
- Genetics
- Artificial intelligence

## The Annotated Turing

*By Charles Petzold and Alan Turing*

A very heavy but authentic description of turing machines and the unsolvability to the Entscheidungsproblem. Requires some understanding of turing machines and propositional logic to grasp. Lots of little historical notes.

- Number theory
- Turing’s machine
- Universal machine
- Propositional logic
- Entscheidungsproblem
- Equivalence to lambda calculus
- Intuitionistic logic

## Unlocking the Clubhouse

*By Jane Margolis and Allan Fisher*

Boys invent things and girls use things boys invent.

We have a diversity problem. It’s a cultural problem. This book sheds some light on why women and other minorities are “out of the loop” of computing, and how we might fix the leaky pipeline.

This case study at CMU showed that by changing culture and mindset, computer
science education *can* be made more accessible, so that future generations of
makers will be diverse enough to survive.

We should probably also fix the toxic culture in our industry to actually keep these diverse people.

## Feminism is for Everybody

*By bell hooks*

What is feminism?

Feminism is a movement to end sexism, sexist exploitation and oppression.

Come closer. See how feminism can touch and change your life and all our lives. Come closer and know firsthand what feminist movement is all about. Come closer and you will see: feminism is for everybody.

## Logicomix

*By Apostolos Doxiadis and Christos Papadimitriou*

A graphic novel telling the tale of Bertrand Russel’s journey through early 20th century mathematical logic.

It is indeed an epic search for truth.

## Unspeakable Things

*By Laurie Penny*

I will make you a sandwich. It will be stuffed with the dust of history, and I hope you choke on it.

The chapter on cybersexism is particularly relevant to all nerds. Just read it.