"Tooling for Turing Machines" takes the Allong approach to tools: It begins with the simplest possible tools, and works its way up, step by step, illustrate the patterns and ideas that power modern software development toolchains.
Tooling is about managing complexity. We need tooling for programs that are very big, for programs that have hard-to-understand coupling between the distinct parts. We use programming techniques to reduce those problems as much as possible, and then we use tooling to manage the problems we cant eliminate in code.
The obvious question is, A book about tooling is great, but why is it about tooling for Turing Machines? That doesnt sound very practical! Heres why this book uses Turing Machines to talk about tooling in software development. To be useful for learning, example programs need to be simple enough to understand in first reading.
Programs that multiply two numbers, or emulate the game of life make excellent examples for teaching programming. But they arent complex enough to need tooling to manage. Unless... unless we write them in a language that makes such programs very big and difficult to understand.
Programs for Turing Machines grow very rapidly. Applying the rules for Conways Game of Life to a single cell can require hundreds of thousands of instructions and be very difficult to follow step-by-step. A program with hundreds of thousands of instructions that performs a well-understood task is actually perfect territory for discussing compilers, debuggers, linters, testing frameworks and every other kind of tooling that makes modern software development possible.
Thus, Tooling for Turing Machines."
(Note: This is not the final cover. The image and title are subject to change.)