The Programmer’s Guide to Theory by Mike James (IO Press 2019, ISBN 978-1-871-9624-37) is intended for programmers who haven’t studied computer science but are planning to, or are simply interested in the ideas taught there. Mike James is an editor and frequent contributor at I Programmer who has a PhD in computer science. I cannot really judge how the book will strike people who have never been exposed to CS concepts as I have a master’s degree myself (German diploma to be precise) but James accurately presents all the concepts I recall from my studies, and in a much more readable way than academic textbooks (or indeed my professors).
The book is slim at just over 200 pages but still covers many important subjects along with their historical background: Turing machines, state machines, computability and the halting problem, grammars and regular expressions, infinities and complexity measures, Gödel’s theorem and lambda calculus. A few simplistic comparisons of the human mind to computer programs are annoying but don’t overshadow the real content. There are a few typos, such as “decreasing n” instead of “increasing n” on p.173, but not many and rather obvious. This is a book I wish I’d had back at university, as a pleasant overview and introduction to many of the theories I was learning about. Highly recommended.
Normally my review would end here. However, despite the excellent content the typography is such an absolute train wreck that I must call it out, especially in a paperback that cost me 19.41 euros for 212 pages. I realize it’s essentially self-published at IO Press but that’s no excuse for typesetting far inferior to any default word processor template, let alone proper LaTeX output.
Where to start? Paragraphs are ragged right with no hyphenation and no indentation whatsoever, with few exceptions mostly concerning itemized lists. Stand-alone expressions and code snippets are usually flush-left like everything else, and vertically separated only by the same far-too-little whitespace as paragraphs – sometimes not even that! Printing is in black and white yet uses images that were evidently originally in color, as on p.197 where a highlighted path is nearly invisible in the printed dark gray.
It gets crazy with mathematical formulas. These randomly appear in regular body text, italics, or monospace. James also spaces expressions of type “n log n” with either no spaces, one space before log, or one space after log (p.174 has some examples). Exponentiation is correctly superscripted yet log2 never gets its proper subscript. Evidently there was no proof-reading of the final output at all. Customers paying 9 cents per page can expect better.
(See Developer Books for my complete review archive.)