## Books and Class Notes

- A Practical Introduction to Python Programming (pdf, html) — A hopefully easy to understand intro to Python, covering language basics, a little GUI programming, and some intermediate topics. Has a few hundred exercises.
- A Quick Intro to Java (pdf, html) — An introduction to Java programming, designed for people with previous programming experience. Also covers some GUI programming and has a few hundred exercises.
- An Intuitive Introduction to Data Structures (pdf, html) — Covers dynamic arrays, linked lists, stacks, queues, recursion, binary trees (including BSTs and heaps), sets, maps, graphs, and sorting algorithms. Has a few hundred exercises.
- An Informal Introduction to Formal Languages (pdf, html) — Covers DFAs, NFAs, regular expressions, Pumping Lemma, context-free grammars, PDAs, Turing Machines, and decidability. The “informal” part of it comes from the fact that there are no formal proofs. Instead there are many examples and intuitive explanations. There are also a number of exercises at the end.
- An Intuitive Guide to Numerical Methods (pdf, html) — Covers numerical methods for root-finding, derivatives, integrals, and differential equations, as well as interpolation. I tried to write it in a way that conveyed an understanding of the methods and their limitations. There are about 200 exercises at the end.
- A Simple Introduction to Graph Theory (pdf, html) — Covers most of the topics of a typical undergraduate course, like trees, Eulerian and Hamiltonian graphs, graph coloring, matching problems, digraphs, and connectivity. There are a few hundred exercises at the end.
- Number Theory (pdf, html) — Covers a lot of the topics from a typical introductory number theory class. I tried to write this in a way that conveys a conceptual understanding of the important topics.
- Networking — Covers HTTP, DNS, TCP, IP, and various other important protocols and concepts in networking.
- Operating Systems — Covers typical topics from an Operating Systems course, including system calls, processes, process scheduling, memory, page replacement algorithms, threads and concurrency, devices and drives, and file systems.
- Security — Covers classical and modern cryptography, passwords, a little bit a network security, basic web app security, and several other topics.
- Algorithms — Covers various important algorithms and data structures as well as dynamic programming and complexity theory.
- Geometry (pdf, html) — Covers Book I of Euclid in depth, using modern notation and language for the proofs. Selected parts of a few other books are covered as well.
- Discrete Math — A simple intro to discrete math that covers logic, sets, functions, recursion, induction, counting, probability, and graphs.
- Precalculus Review — A series of notes on algebra and precalculus topics designed for people needing a quick refresher or introduction to prerequisite topics needed in calculus. There are also exercises with solutions.
- Android Notes — A very quick guide to getting started with Android followed by some code snippets of useful things.
- Python quick reference guide — A 9-page guide to the basic language features of Python.
- Linear Algebra — These are notes I wrote up in grad school for a linear algebra class I was teaching.