# Engineers Should Learn Abstract Math

## Preface — Grad School

I will be going to graduate school at the University of Waterloo in the Spring. I will be (attempting) to get my Master’s in Mathematics and Computer Science, and being supervised under a Professor in systems and distributed systems. This is super exciting for me not only for the challenge, but because a year ago I didn’t really expect this. I was mostly looking for a challenge within the tech industry but when I was invited to Waterloo to see their grad programs I completely shifted gears.

## The Abstraction of Math

Software Engineers LOVE abstraction, and I mean its really really really worked out for us. We’ve taken these electrical signals and abstracted it to Machine Code which in turn was abstracted to high level languages. We abstracted talking to hardware to talking to an Operating System. Industry is now moving towards abstracting out the infrastructure of industry from a hardware problem to a software solution with the virtualization of machines and software like Docker (❤ Docker). But in this process I believe we’ve abstracted Math out of computer systems (for many software developers), this is a shame. I have seen many Computer Science undergrads talk about math as this thing they just have to check off in their list of course requirements.

I want this rant to sort of be a sales pitch to any undergrad or Software Engineer that may read this, so if you’re mind is open to the idea read on, also be aware this is just my opinion among many and just an argument for it.

## Intro Math Courses Are Not Good Class Representatives

First off, I’m sure most that have read this have been forced to take Calculus, Multi variable Calculus, Linear Algebra, and probably the most intro level proofing course (Discrete Mathematics). These from what I have found do not show the joy of what math is and do not promote what is so wonderful about math. First off, I **hate **doing calculation work. Constant calculations of eigenvalues, eigenvectors or integrals just straight irritate me. To be quite honest I was quite put off of math for a long time until a close friend of mine convinced me to take an intro to Abstract Algebra course. And thus the addiction began.

From this course I learned of Group theory, and numbers stopped being these discrete values but rather objects in space in which I can manipulate. Not only that — I could **create and define **these objects. The integers stopped being “numbers without a fractional part” to being a** group under addition**, generated by 1, or a **ring.** I may be writing just words without meaning to you but realize at a larger view, this means I have taken this infinite set of values and classified them under something much more understandable than just “infinite”. Groups don’t have to be related to numbers as we know them, they are found in shapes. Operations on this group can be seen as rotation and flipping, rather than the normal operation of addition and multiplication.

## Engineering

Now, I’m not a seasoned veteran by any means, but over the past couple months I’ve noticed that this math that I have been learning has made its way into the way I view problems. I started seeing pieces of data in a new light under the structures taught to me in math. I now ask questions like — can I represent this as a group? What are its operations? How am I interacting with this set of data? With these questions I can simplify and understand my problem. This can lead to better maintainable, provable, concise, and beautiful code. You could do this same process with infrastructure where you can group services as objects in your groups and start defining operations between services. These concepts are not just code based solutions.

## Ability To Understand the Abstract

With practice and study comes the ability to see abstract concepts easier. This was actually the original reason I started more adamantly studying math (now its just for pure love). I wanted to practice visualizing and understanding idea I found in computer science papers. I found these papers to be so incredibly hard to understand as they used notation I just didn’t understand. It’s still pretty hard most days but now I don’t get caught up on notation, and there are more connections that I make when reading. This allows you to be someone on your team that can quickly pick up and understand current solutions within your technology space.

## In Conlusion

I would try math out again if it wasn’t your thing in the past. I would specifically try out Abstract Algebra. In the very least learn about Groups as this was a concept that fundamentally changed how I viewed the data I work with. If you need a start into proofs etc, you can try Concrete Mathematics. A good place to start for Abstract Algebra is Chapter 0. Another thing, don’t always do math alone. I found math so much more engaging and addicting as soon as I found a group to talk and do math with, this may be harder for some but I do believe it does add to the experience. You could also try sitting in on math courses at your local University, I found profs quite receptive to sit ins on pure math courses (but this may not be the case and I could have just been lucky with profs).

If anyone has questions about anything I will do my best to answer them!