adventures in making stuff with Daniel Higginbotham

Abstract Mathematics and Programming

23 February 2012

Abstract Mathematics and Programming

If you’ve been alive long enough to develop language comprehension, you’ve probably heard that most people don’t like math. The usual complaint is that it’s just a bunch of formulas disconnected from everything and that you have to memorize in order to finish school.

My opinion is that the poor souls who hate math have never been exposed to the abstract method. This is explained by Timothy Gowers in Mathematics: a Very Short Introduction :

What is the black king in chess? This is a strange question, and the most satisfactory way to deal with it seems to be to sidestep it slightly. What more can one do than point to a chessboard and explain the rules of the game, perhaps paying paprticular attention to the black king as one does so? What matters about the black king is not its existence, or its intrinsic nature, but the role that it plays in the game.

The abstract method in mathematics, as it is sometimes called, is what results when one takes a similar attitude to mathematical objects.

This description does not paint a clear, concrete picture of the abstract method, but I hope it serves to at least rouse your curiosity, and that your curiosity rouses you to read more at the link above. By exploring mathematics from the point of view of the abstract method, you’ll come to see math in a different way.

You’ll begin to learn how it’s possible for some people to take pleasure in reading proofs. Hopefully, you yourself will experience the delight and surprise that comes from treating math as a process of defining mathematical objects in terms of their interactions, and seeing what results from the logical application of mathematical rules. It’s like solving a crossword or sudoku puzzle, only, like, a million times cooler.

Besides its intrinsic value, I think that learning abstract math will make it easier to learn how to program. By learning this approach to math, it makes it easier to disassociate programming symbols from their intuitive, english-y or math-y meetings. For example, “function” is a keyword in many programming languages, but it differs dramatically from the English meaning of “function” and subtly from the functions we’re used to in algebra. Learning to see programming symbols as merely symbols subject to the rules of the programming language is useful.

I also believe that learning abstract math makes your thinking more flexible, but it’s hard for me to describe how. You just see the world differently.

The above book by Timothy Gowers seems like a good introduction. Personally I was introduced to the ideas through Godel, Escher, Bach: an Eternal Golden Braid and Godel’s Proof . Both books are a true joy. The first can take awhile to get through, but the second is a considerably quicker read. They both demonstrate the beauty and delight within mathematics.

I regret that I don’t have the time to provide some concrete examples of how learning this stuff is fun and could possibly help you learn programming. However, I hope that writing about my own experiences might motivate folks to go out there and learn themselves some real math.