Good Math, book review: Challenging concepts, well explained
More accessible than Hofstadter or Martin Gardner's classic mathematical columns, Good Math is a fun, if demanding, introduction to the strange, fascinating fundamental concepts of mathematics that underpin programming.
Understanding maths, logic and computation is becoming increasingly important in business -- especially if you need to evaluate new technology. Can your wi-fi router or your smartphone really make you money by mining Bitcoin in the background? To find out, you need to know something about cryptography, something about hardware design and something about how to calculate power usage so you can figure out whether that crowd-funded device you're thinking of investing in will cost you more in electricity than it will make you in virtual currency. Even if you just want to avoid being fooled by infographics, it's a good idea to think a bit more rigorously about mathematics.
It's been a long time since computing was taught by the maths teacher at school; these days, you can jump straight into programming without knowing much more than algebra. However, a more comprehensive understanding of mathematics will become increasingly useful. If you want to make sense of the principle of machine learning, you need to understand basic statistics and probability. To understand functional programming, you need to know the basics of lambda calculus. And if you're looking at actor frameworks, like the new programming models in the Azure Service Fabric, an understanding of state and Turing Machines will come in handy.
Mark Chu-Carroll's Good Math: A Geek's Guide to the Beauty of Numbers, Logic, and Computation is a good introduction to the appreciation and understanding of maths -- as long as you're already comfortable with mathematical notation and are prepared to pay attention. Chu-Carroll has an engaging style that's easy to read and he makes mathematical discoveries and principles interesting. However, you'll definitely need an aptitude for maths in order to grasp the details. He starts at the beginning, with numbers -- basics like cardinal numbers tell you how many things there are and ordinal numbers tell you what order they're in -- and explains that axioms are sets of rules that define how numbers behave. But in just a few pages you're into Peano arithmetic and induction, with subsequent chapters covering irrational and transcendental numbers, plus 'funny numbers' like zero, Euler's constant, i (the square root of -1) and the golden ratio.
The explanations for most of these are both comprehensive and helpful, although Chu-Carroll does skip rather quickly over how important Euler's constant is in a couple of equations, rather than digging into the implications of the fact that so many of the important constants, from pi to i to the natural logarithm, are fundamentally connected.
Practical and fun
What keeps all this from being dry is that, having expounded an idea fairly formally, Chu-Carroll then explains why you should care about it. For example, induction gives you a way of moving from thinking about finite numbers to thinking about infinities, and it lets you think about all the numbers by thinking about a pattern that applies to one of them (and yes, that's an easy way of leading you into set theory). His potted histories of mathematical discoveries -- including the different theories about zero through the ages (plus the tidbit that it was first used by an Indian mathematician long before it was adopted elsewhere) -- are fascinating, while the 'legendary nonsense' of how the golden ratio shows up in everything from the pyramids to music is light relief.
Similarly, the chapters on roman numerals and 'Egyptian fractions' (the classical habit of expressing fractions as a sum in order to have 1 on the top, so you'd say 1/2+1/6 rather than 2/3) are both practical and fun. If you want to play around with those, Chu-Carroll includes Fibonacci's algorithm.
The section on logic and proofs offers more programming -- in Prolog, Scala and Haskell -- as well as a good basic grounding in first-order predicate logic and a discussion of how to use that for reasoning about and checking the logic of your program. That's particularly interesting when he delves into temporal logic and how you can represent statements that aren't true now but will be in the future.
This all leads up to a good, if involved, explanation of set theory and infinities, starting with Cantor proving that there are multiple infinites (the set of natural numbers and the set of even numbers are both infinite but they're not the same size) and ending up with some of the strangest theorems in mathematics, involving infinitely complex measurements and the axiom of choice. These are some of the most fundamental -- and most confusing -- parts of mathematics, but Chu-Carroll clarifies the concepts involved while explaining why they matter.
The last section of the book covers the mathematics of computation, from Finite State Machines -- which most of us know better as the regular expressions in programming libraries -- to Turing machines and the lambda calculus behind functional programming like Haskell and F# (and indeed the entire idea of types in programing languages). Chu-Carroll's interest is in maths rather than in teaching programming, so he stops just where it's getting interesting in terms of understanding the mathematical underpinnings of this and turns to one of the all-time classics in mathematics and computing: Turing's proof that there are some programs that you can't prove will ever finish running. The brief mentions of the grand attempt to derive all the principles of mathematics, and the way Gödel's incompleteness theorem proved you can't do that, are either enticing or frustrating, depending on how much more you want to know about the fundamentals of mathematics.
Good Math isn't going to turn you into a mathematician and it's a demanding book if you want to really understand these ideas. But as an introduction that will give you a better appreciation of mathematical concepts, it manages to be a fun read whether you dip in and out for the basics and the anecdotes, or stick with it to get that deeper understanding.