What do you think?
Rate this book


Rather than use mathematical notation or an unfamiliar academic programming language like Haskell or Lisp, this book uses Ruby in a reductionist manner to present formal semantics, automata theory, and functional programming with the lambda calculus. It's ideal for programmers versed in modern languages, with little or no formal training in computer science.
Understand fundamental computing concepts, such as Turing completeness in languages
Discover how programs use dynamic semantics to communicate ideas to machines
Explore what a computer can do when reduced to its bare essentials
Learn how universal Turing machines led to today's general-purpose computers
Perform complex calculations, using simple languages and cellular automata
Determine which programming language features are essential for computation
Examine how halting and self-referencing make some computing problems unsolvable
Analyze programs by using abstract interpretation and type systems
About the Author
Tom Stuart is a computer scientist and programmer, and the founder of Codon, a digital product consultancy in London. He works as a consultant, mentor and trainer, helping companies to improve the quality and clarity of their approach to creating software products, usually on the web. He has lectured on optimizing compilers at the University of Cambridge, co-organizes the Ruby Manor conference, and is a member of the London Ruby User Group.
352 pages, Paperback
First published January 1, 2013
...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.
In the end, syntax is only concerned with the surface appearance of programs, not with their meanings.
The NFA class automatically takes account of free moves — we can see that when our NFA is started in state 3, it’s already possible for it to be in state 2 or 3 before it has read any input — so we won’t need to do anything special in NFASimulation to support them.
The purpose of an expression is to be evaluated to produce another expression; a statement, on the other hand, is evaluated to make some change to the state of the abstract machine.