It constantly surprises me the number of students that want to go into Computer Science that don’t like math. Haven’t we been told for decades that the two fields are intertwined?

There seems to be two schools of thought on this struggle between math and programming.

**Programmers do not need to be good at math**

I often hear from programmers in the field that they don’t feel like they need to be good at math to do their job. They have perfectly good careers and rarely have to use any math. So why bother?

Today’s programmers are typically more focused on business logic problems and n-tier communication issues than using fancy equations to solve problems. Maybe the most math that you ever have to do is determine if you are going to overload your mobile network connection or that your Java library is going to be too big to load. When was the last time you had to implement a logical math function that wasn’t already given to you in a library?

Fundamentally, I think the flaw in this logic is that “being good at math” is not the same as “being good at math problems”. I’m sure that many a programmer goes about his day without ever giving the college Algebra class that he took almost a decade ago another thought. So why do we need it?

**Programmers need math to learn logic**

Think back to your last math class. What did you learn? It doesn’t really matter what you answer here since the answer, fundamentally is going to be the same. Math teaches us some basic things that make us better programmers.

- Logical thinking – math teaches us about the application of logic to a problem. Conjecture, proof and building theories.
- Linguistical thinking – There has been tons of research that shows learning math is more like learning a language. We use similar areas of the brain to learn and retain this information.
- Future automation – Programmers typically have a drive to automate processes and tedious tasks. Figuring out these automation techniques for tasks almost always involve computational mathematics in your code.

So not only do we need to take all of those math classes to learn the basics of mathematics, but we are also training ourselves on problem solving and how to approach the tasks that we will find in our programming careers. We are also training our brain to learn the programming languages that we will encounter. Let’s talk about that for a second…

**Math is a language?**

Absolutely! Math is more of a language than programming languages simply due to the way that our brains process problems. When you are handling a math problem, you are dealing with unknowns and ambiguities. This forces us to have to handle things based on context, just like you would when communicating with someone else. One of the great things about programming is that you have a compiler that will help you determine how that ambiguity resolves. You probably also have a better idea of the expected output or the end result in programming than you do when working math problems.

As someone currently working on their doctoral thesis on the subject – this is a subject that is near and dear to my heart. I would argue that in the hierarchy of rigor, mathematics falls between language and programming. Its a bridge for understanding and applying concepts, even if you never actually feel that you use math in your everyday programming tasks. This is why the two fields are locked together – no other training will help you learn the kind of abstract thinking that you will apply in programming like mathematics.

**What does this mean for upcoming students in the field?**

If you’re not good at math I don’t think you’re a hopeless case, but I do think that it has the potential to directly translate to your ability to apply critical thinking and solve problems in your programming courses. However, there is no indicator that I’ve found in my research that states a person must be good at math to be good at language (hello future research project!). Since the two are similar, there is a good probability that a person that is good with languages could also apply the same concepts to programming and be successful.

Feel free to comment. My research analysis will be posted on this blog when I am finished with my dissertation, so maybe we’ll have a more definitive answer then!