Not Actually About What Programming “Is”

Alright, so there were some blog posts going around recently that were about how “programming isn’t math” and all that. The main two I’m thinking of are

I’m a firm believer in the connection between constructive mathematics and computation, so on the face of it I definitely disagree with the premise that “programming isn’t math”. On the other hand that’s not really what these posts are about, in a sense. Most of the discussion was really about math education and how we tell some people that they’re “good at math” or “bad at math”. If I understand one of the major points from the blog posts and the twitter conversations, then it’s that we often encourage people to go into programming based upon their performance in traditional math education or that at the very least we give people interested in programming the impression that without performing well in traditional math education then you don’t have a chance in programming.

If that’s what’s meant by “programming isn’t math”, then I absolutely agree! The point I made in a pithy tweet that made the rounds for a couple of days is that I think the sentence is more accurate if you replace “math” with “arithmetic”, but really the less snarky version of what I mean is that since math education in the U.S. is generally about arithmetic and not skills in mathematics, then no there really isn’t a correlation between programming skill and “math” skill.

Perhaps this sounds like I’m splitting hairs, but I think it’s an important distinction. In U.S. education we teach rote rules of arithmetic that require no real creativity, just a kind of basic pattern education. This means that a lot of people see math as the antithesis of creativity, which is why going around twitter there were a lot of comments about how “programming isn’t math, it’s art” or that “programming isn’t math, it’s language” and my main disagreement here is that these are false dichotomies. Mathematics isn’t somehow unrelated to art or language. There’s a non-empty intersection between all of these skills. As for me, for years I just was “okay” in math classes until I taught myself calculus to spite a teacher (long story) and then stepping beyond calculus I saw that math could be really really interesting and creative.

So while I think it’s good that we talk about how what amounts to terrible “mathematics” education isn’t necessarily useful to or correlated with programming skill I don’t want us to further malign mathematics or encourage people to be afraid of mathematics or conflate it with simple arithmetic. What I don’t want is to have a culture around programming where people are discouraged from understanding the foundational aspects of computation. I want programmers to know that there’s hard theoretical limits to what problems are computable. I want them to know the fundamentally algebraic models of computation. I think understanding what, theoretically, programming really is is a very useful skill.

I’m not saying, thought, that programmers need to go out and study the foundational mathematics of computation. I think those of us who work in education need to be better at teaching programming in a way that includes the theory in a fashion more accessible and understandable. I’m not even sure what this curriculum would look like. Perhaps tools such as Agda, Coq, or Idris could make make constructive mathematics more obviously connected to programming and allow students to use programming skills to learn proofs and theory. Perhaps we just need to completely overhaul how math is taught from the ground up, but that seems like an almost impossibly difficult goal from where I’m standing.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s