For quite a while, especially in internet years, there has been something of a debate about Math and programming going on in the programmer blogosphere, some notable examples of this are: Alan Skorkin’s "You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To Be A Great One", Jeff Atwood’s "Should Competent Programmersbe "Mathematically Inclined"?", and of course Steve Yegge’s "Math Every Day" and "Math For Programmers"
The recent Watson victory on Jeopardy has further pushed the Math intensive fields of Machine Learning and Data Science more prominently into the programmer zeitgeist, which is especially evident on sites like Dzone and Reddit/r/programming. This trend is also underscored by the fact that a very hot area for Technolgy Company hiring is statistics.
The above bloggers, with the exception of Jeff Attwood, emphatically advocate that programmers should take the initiative to improve their Math skills. I am very much in agreement with this approach and would recommend reading all of the above blog entries, especially those by Steve Yegge as they are most substantive. I should also add the disclaimer that this post and some of my future posts will mirror those, especially Steve Yegge’s. This is intentional as I have parallel views and hope to refine and expand upon some ideas that he has addressed in his blog.
As you may or may not be aware, all programmers are already using Math every day, and it’s right below the surface of what we do and I am not just talking about simple arithmetic, if you know it you may already see it, regular expressions and the compiler you use are built on Formal Language Theory and Automata Theory, functional languages are based in part on Lambda Calculus, Algorithm Analysis is pure Math, most data structures, if not all, can be described by Graph Theory, SQL Databases are described by the Relational Algebra and it does not end there.
As Steve Yegge also points out, for most programming jobs today you don’t need much Math, but I think that may be about to change, the way things are trending many of the low end programming jobs are moving offshore, and I worry that this could be a permanent change, after all how many manufacturing jobs have returned, of course you don’t need a factory to create software which means that the low end programming jobs may just become low paying jobs worldwide. A little while back a blog entry showed up on DZone called "Will a Two Tier Market For Developers Emerge As a Result of Scala & Clojure?", I believe that this may be only part of the picture and you guessed it, I think Math with will be part of that equation. The increased language power is not a concept in a vacuum, its context is Math, its ability to handle and model increasingly complex problems will require an increasingly advanced conceptual understanding of those problems.
I think that the field of software development is about to go from one of the least Math intensive fields to possibly the most Math intensive in the relatively near future. I also think that these changes will be wide sweeping and many now seemingly irrelevant disciplines of Math will be used in ways that will be both surprising and amazing. Additionally I would not be surprised to see the field of Software Engineering evolve into a more formal discipline shaped by Math in much the same way that traditional engineering fields are, but with different types of Math.
So what’s wrong with us, why is Math in our industry such an alien concept to most of us? It’s because of how and what is taught, the current Math curriculum is myopic, antiquated and wholly inadequate for an information driven society. The current Math educational trajectory is mainly intended for students planning on becoming and Electrical or Mechanical or other type of Engineer or a Scientist1. I would attribute this problem to four facets of the perspective of Math in regards to education, the first is our educational curriculum mostly mirrors how humans discovered Math, my grade school, middle school and high school education which included Calculus, was all Math that was discovered prior to the nineteenth century. However most of the Math that is relevant to what I do now was discovered in the last 100-150 or so years, I’m thinking roughly since the era of Cantor’s Set Theory2. Another issue with the current perspective is a bias to the to the wrong side of a of what might be called a Mathematical Schism. The third, as I previously alluded to, is that the curriculum is still oriented to the needs of an analog manufacturing society. This creates an additional negative side effect for C.S. curricula, you essentially have to learn a lot of new basic Math concepts, so when you get to college you start out already being behind on the Math you need, and since there is limited course time in a four year program it eats into time you could spend on other and more advanced topics. Of course this is all irrelevant, in the sense that it’s too late, to my current situation and probably yours as well. The fourth, which I attribute to Conrad Wolfram, is that Math is taught in terms of the mechanics of computation which diminishes much of the important underlying conceptual nature.
I think Jeff Attwood’s comments are interesting in that they probably exemplify those typical of most developers, the problem is clearly perspective, and honestly I understand it, it’s not easy to make that leap, Math related programming like Machine Learning is easy to see but the rest of it seems so non-Math related. Also think I have to disagree with the right brain comment, as I would think creating Math, not that I would know firsthand, is as creative an endeavor as are programming and art, Satyan Devadoss advocates the interrelationship between Math and art as a way to create new Math and talks about Math as a creative endeavor in his TTC lectures "The Shape of Nature." Erik Demaine’s Computational Origami work is part of MOMA’s permanent collection and is clearly creative work.
In regards to learning Math, the problem that I think many programmers face is what, how and when do I find the time. As for the first two, Steve Yegge covers this, and I have specific future entries in the works as well to expand on this, as for the time, when do you find the time to learn anything else? The trick is to add Math into the mix and like that four year curricula you have to make choices, I am still trying to get to do some recreational programming with Scala and Closure but my Math obsession and my crazy idea to start a blog are taking time from those and many other ideas I want to pursue. As for the time, here’s a couple of tips, there are books and tons of things you can print from the internet to keep around to look at. Also I usually try to have some reading material with me if I am potentially in any situation where I may have to wait for someone or something like meeting up with friends or waiting on an appointment and I usually have a Topology book in my car for emergency Math reading like being stuck in traffic. Additionally fellow Math enthusiast Antonio Cangiano has some good learning insights in "The pursuit of excellence in programming", which is programming related but can be applied to Math as well.
Unfortunately, my Math interest vastly exceeds my Math ability, so I have quite a number of things that I am still trying to grok. Also I confess I am not solely driven by just programming, my interests in general Science are broad and a deeper understanding of Fractal Geometry and Chaos Theory have, for a long time, been goals of mine and even though I consider myself to incredibly dense at times, the sheer buzz of just figuring things out and seeing them in my mind has become its own reward also the ability to read and understand, sometimes all of, papers and doctorial thesis’s in CS and Math can be pretty mind blowing as well, I haven't really done much with Math yet in regards to programming, but I hope to do cool stuff with it someday soon. All in all I now feel the Math journey is worth it just for journey itself because ultimately MATH TOTALLY BLOWS MY MIND3. I guess what I am saying is try to figure out a way to love it so that it becomes something that you want to do and not a burdensome chore. Stay tuned for some of my ideas on how to do this.
1 Discrete Math is increasingly being applied to many fields previously dominated primarily by Continuous Math, such as Physics, Chemistry, Biology and more.
2 Many disciplines were actually started well before this time such the work of Galios from the early nineteenth century is critically important as well, and one shouldn’t forget Euler’s Eighteenth Century work which was the inception of Graph Theory and Topology. Not to forget the work of Pascal and Fermat whose work and that of many others paved the way for the more recent period of heavy activity.
3Steve Yegge whispers this idea. I am YELLING IT! I just think Math is really cool!