Book: Understanding Computation: From Simple Machines to Impossible Programs
This book is for programmers who are curious about programming languages and the
theory of computation, especially those who don’t have a formal background in mathematics
or computer science.
If you’re interested in the mind-expanding parts of computer science that deal with
programs, languages, and machines, but are discouraged by the mathematical language
that’s often used to explain them, this book is for you. Instead of complex notation
we’ll use working code to illustrate theoretical ideas and turn them into interactive
experiments that you can explore at your own pace.
This book assumes that you know at least one modern programming language like
know another language you should still be able to follow along. However, this book
isn’t a guide to best practices in Ruby or object-oriented design. The code is intended
to be clear and concise, but not necessarily to be easy to maintain; the goal is always
to use Ruby to illustrate the computer science, not vice versa. It’s also not a textbook
or an encyclopedia, so instead of presenting formal arguments or watertight proofs,
this book tries to break the ice on some interesting ideas and inspire you to learn about
them in more depth.