I come from a non-technical background (Nursing and Geography) and transitioned into a technical background, Computer Science major in University and I am currently studying Software Engineering online at Launch School. Throughout this journey, I pondered the question of whether one needs to be good at mathematics in order to become a great programmer?
I have heard this question from many other students as well. It’s not a surprise because if we look at the typical Computer Science curriculum in post-secondary education, it includes many mathematics courses. After being a Computer Science Student for a while, I found mathematics and programming very interconnected. After all, mathematicians are the people who invented the concept of the computer and the algorithm.
Does this mean one needs to be good at mathematics such as Calculus or Linear Algebra, or mathematics in general in order to become a great programmer?
I do not think so. Let me explain.
First, I want to answer the question: what is mathematics?
Generally speaking and in my own experience, mathematics taught in school is narrow in scope and technical in character; this is quite different from the nature of the discipline itself. As a result, many students dislike mathematics and are uninspired by it. Yes, there are technical aspect to mathematics that are tedious and boring. However, this technical foundation lays the ground for the true subject of mathematics, which is the creation and study of patterns and structures. With mathematics we can study the beautiful patterns of the universe or create a structured theorem to find the next largest prime number faster.
In my opinion, programmers are already mathematicians 😉. Why is that?
Programmers create new patterns and structures through algorithms and code. Programmers also read existing code, where they will discover the structure of the problem, untangle its patterns and hypothesize a solution. This process is known as computational thinking or breaking down a problem. This type of thinking is similar in both mathematics and programming, but within the discipline of mathematics we use algebra and within programming we use code.
In programming, one must become fluent with the syntax and the rules of the language. I would reference this as the boring technical aspects, and can be analogous to remembering the logarithm or exponential rules in Algebra or the properties of the derivative in Calculus. In order to do the really fun and rewarding things in programming we need to remember the technical things first! After that, we can be wildly creative in solving complex software engineering problems. Equivalently, once we’ve become fluent with algebra we can be incredibly clever and creative when writing mathematical proofs.
Overall, I do not think one needs to be good at mathematics in order to become a great programmer. Programmers practice computational thinking, which is a skill that becomes better with practice and can be learned and developed outside of the “math/calculus/algebra” world. It takes practice to break down a complex problem into smaller manageable parts. Eventually, it’ll start to feel more natural.
Practicing the boring or tedious parts of mathematics such as completing hundreds of algebra exercises made me familiar with the mathematical language and enabled me to think at a higher level when computing a mathematical proof. This is similar to remembering the rules and syntax of a programming language so it becomes easier to create the algorithm and to code it out. One can think at a higher level because they’re already familiar with the technicalities of the mathematical or programming language. Without being comfortable with the syntax and rules first, students struggle with what Launch School calls the Two Layer Problem:
a challenge that beginners to programming frequently encounter: learning to solve problems while simultaneously memorizing the syntax of a particular language
One way to practice computational thinking is to trace out code. We can be meticulous on what the computer is doing. We can go slowly, step by step in a loop, and write out what is happening on each iteration. Until we have practiced breaking down the structure, we are then able to build a solid mental model of what looping does. This can enable us to move faster without writing out the steps every time.
Launch School has many wonderful assignments that help their students practice the computational thinking process slowly and thoroughly. Launch School teaches their students how to break down problems by using PEDAC framework, and I am a big fan of PEDAC. There are really amazing TA led study sessions at Launch School that can help students practice this skill too. If you’re Launch School student, don’t be shy, please take advantage of these resources because the TAs really do want to help you!
A final note on how perspective and mindset can help strengthen computational thinking. In my opinion, we can strengthen our computational thinking by practicing. Furthermore, it helps to be in a safe and supportive environment that fosters growth, encourages making mistakes with plenty of opportunities to learn from our mistakes. I believe that Launch School is a wonderful community for this type of growth and for feeling more confident and comfortable making mistakes in one’s programming journey.
I hope this post was helpful. If you’re new to programming, know that it isn’t an unattainable skill or a natural talent that one is born with. It is a skill that can be acquired through time and practice. Just like with with everything else, we become better through patience and perseverance. Additionally, having a supportive environment can help develop a positive growth mindset which helps with mastering the skill of computational thinking. I wish you the best wherever you may be right now and I hope you have a blast learning how to program! 🚀