After a year of writing this blog, what have I learned about the nature of the relationship between computer programs and mathematics? Here are a few notes that sum up my thoughts, roughly in order of how strongly I agree with them. I’d love to hear your thoughts in the comments.

- Programming is
*absolutely great*for exploring questions and automating tasks. Mathematics is*absolutely great*for distilling the soul of a problem. - Programming is fueled by the excitement of what can be done. Mathematics is fueled by the excitement of how things relate, and why they relate.
- Good mathematics makes for short programs.
- Good mathematics can be sloppy. Good programs cannot.
- Useful algorithms can come from any branch of mathematics, so it is best to be familiar with them all (at least a little).
- Most programs written for the real world use no mathematics beyond the level of an average twelve-year-old, but
*every*program indirectly relies on sophisticated mathematics in an essential way. - Programs that are fun, exciting, or generative invariably utilize some branch of mathematics.
- Short programs that do mathematical things are prohibitively mystical until you’ve spent weeks on the mathematical background. Once those weeks are spent, everything is so obvious it’s trivial.
- The hard question in software design is: how can we take this to extremes? The easy, natural question in mathematics is often: what happens when we take this to extremes?
- Abstraction in a program is strikingly similar to abstraction in mathematics, but the former takes a lot of work while the latter is instantaneous.