I’ll open up by saying I am a mathematician by education. I’m not one of the mathematical great minds and I am unlikely to ever win a Fields medal, but I have a degree in applied math and it’s what I know. The reason I share this is because it helps define the way I think about problems I work on. Regardless of whether I am working on a problem at work or working on something in my spare time, my math background helps to define the approach I take to solving many of the problems I encounter.
I have worked in the software world for a while now and I have encountered a good number of developers who come from a variety of backgrounds. I won’t say all the best programmers I have met are math people, but I won’t say they aren’t. Some people come to programming through an organic sort of process and others go through a formal education process. Either way, there is something that comes forward really fast, Boolean logic.
Boolean logic is very closely tied to the mathematical work that George Boole did in the 19th century. This means, regardless of anything else you do with programming, you are doing math. Always.
I believe that even the people who started off as designers or biologists or cognitive scientists, if they become good programmers, they end up being good at logic and, yes, math.
There is a common debate around what a programmer is. Are they scientists? Plumbers? Engineers? Developers? What are they?
I believe that every software engineer is a developer. I do not believe that every developer is a software engineer. By this, I can say, I believe that every programmer is a developer. An author of code. Programmers are writers.
As is true with journalists and novelists, there are good code authors and bad ones. Some people take pride in writing their code in a crafted, carefully maintained sort of way. I think this is a good thing and more people should do it.
The difference between a good and a bad author of code is the math they do. If we look to other engineers in fields like mechanics or structure, you will see math and science. Computer science incorporates these same elements in different ways. This means, in order to truly author great code, you must embrace the applications of math and make it part of your programming experience.
I believe that in order to be elevated to the state of being an engineer, you must look beyond the simple trappings of the language you work in. I speak the English language, but this does not mean that I am a linguist. I am merely a user of the language. Many developers live in much the same state in their code. Become more than you are and explore the things that make your language work.
I am not prepared to call myself an engineer, by the way. I believe I would make a terrible engineer. I am prone to flights of fancy and I am much more interested in the reasons why than the application of the math I understand. I bury myself in books about math and the underpinnings of programming rather than looking for sturdy materials to construct things with. I, with all of my foibles, am more aligned with philosophers than I am with the engineers who apply their knowledge to make the world great. I am okay with this realization.
In the end, however, I would encourage anyone who calls themselves a developer to dig and pry and tear whole chunks from computing. Find the math that lives underneath it all and apply it to what you know. As you grow and become a greater developer, embrace the math that will make you an engineer and bring sanity and soundness to the code that you and others like you will have to support and maintain for years to come.