Have you ever wondered what you need to know before you’re ready to learn how to program? Maybe you feel that you should be a math wiz in order to consider programming? The simple answer is you really don’t need any special skills and that you can get started right away and have your first program running on your first day.

Most of us learned how to ride a bicycle at an early age. How is it possible to learn how to ride a bicycle without a full understanding of torque, mechanical design, friction, gear ratios, etc.?

I wanted to learn everything possible when I was younger.

I remember a conversation I had with my step dad once where he told me that I would never be able to learn, for example, everything about how a television worked. Not down to each individual component and the whole system including the transmission of the signals over the air. I disagreed and said that it was possible to learn all this and more. And you know what? I did learn all this including down to the microelectronics level.

But what I didn’t do was let this learning stop me from learning other things. It’s actually very practical to learn how to use a hammer to drive nails even without knowing how to construct a hammer at a forge. It’s both necessary and useful to learn skills even without fully understanding all the science and engineering that make those skills and the tools needed possible.

I used to have a book from 1903 called the Handbook of Electrical Engineering.

It was a thick book of about 3 inches and included everything that an electrical engineer needed to know at that time. Including how to pour concrete! Yes, there was an entire section in the book devoted to concrete. It seems this was important back then. And it probably is still important for a lineman even today working with power transmission lines and knowing how to stabilize poles. But most electrical engineers graduating today never learn how to pour concrete. We’ve specialized. There’s so much more to any field today for anybody to know everything.

In fact, the more I learn about a topic today, the more I realize how much there is yet to be learned. We have to focus our efforts and choose a path and trust that other people will choose other complementary paths that will all work together to build systems that no single person could ever even begin to understand alone.

In software design, there’s a practice that I follow called test driven development.

This means that I build a test for my software before I write the code that’s being tested. This is a really good way not only of making sure that the software is fully tested but also that it makes sense from the customer’s point of view. Because in this case, it’s the test that is the customer. Writing the test first makes sure that the code fits easily into the consumer’s expectations.

And all of this is done without needing to know anything at all about electrical engineering or mathematics. Sure, there are some times that I need to think of some mathematical approach to a problem. But normally, and I mean almost always, the most complicated math that is needed is just knowing how to add or subtract one.

Learning how to program uses logic far more than engineering or math.

It’s important to know how to build logic around multiple variables that all interact with each other and keep track of which ones are true and which ones are false. Solving differential equations or even linear algebra is just not normally required. There are libraries of code that already know how to do these things. Sure, somebody had to write these libraries and that person absolutely needed to know more advanced math or physics. But this is the exception and not the rule.

So, yes, you can learn how to program with zero knowledge about engineering and with just a basic understanding of mathematics. If you have the skills needed to work as a retail sales clerk, or a bank teller, or can keep track of sports scores, or can work with measurements and simple fractions, then you have what it takes to learn how to program.

Really, the most important requirement is that you have a desire to learn. Everything else will come in time.