Programming is not what you think it is

Zoran M.D.
9 min readJan 4, 2020

First things first, let me introduce myself. I am Zoran and I have been working as a software developer for over 10 years. However, the first time I used and programmed a computer was almost 30 years ago, before the Personal Computer was even invented. What I want to do is share some insight and tell you about my perspective on Computers and most of all, Programming.

It’s not rocket science

Programming comes in many shapes and sizes. There are even software development platforms like Scratch that can teach your child to program simple tasks for the computer to execute in a cartoonish like environment.

You know how we as kids would love to watch cartoons, especially for the first time, and we wouldn’t know what will happen next ? Well, today’s kids can actually control what happens in similar environments ! And on to more serious stuff for the future, computer animation is big business, projected to be worth 270 BILLION US dollars in 2020 ( source : https://www.statista.com/statistics/817601/worldwide-animation-market-size/ )

It’s better

Combined with the games industry, which is projected to surpass 138 Billion US dollars by 2021, these 2 branches of programming alone are worth almost as much as the whole space economy (~414 billion US dollars for 2018). But it’s easier to code than build rockets and there is a huge variety of things to code, which may include building and guiding rockets, but it’s definitely not limited to that !

It’s easier

Perhaps the days when kids will make small robot drones fly to the Moon and bring back a small lunar rock will be here soon, but they are not here yet. But the days when kids can make their own cartoons and games are here ! And even small robots using platforms like Arduino and many others.

Okay, but what IS it ?

I know you’re getting anxious and I shouldn’t drag this point any longer, but I just want to really emphasize that Programming is not what most people think it is.

Not even the term Computer Science is any closer to truth since it’s not a science and not even restricted to computers.

Basically speaking computer programming is instructing a computer to do a series of operations in order to help us solve a problem, and most people leave it like that. But that is such an incomplete answer that is closer to being wrong than being right.

In order to truly understand what programming is we can’t just rush into it as if it’s a quiz question, or we risk falling in the same traps that most people do and get a wrong answer. That would be much worse than no answer at all !

Back to basics

First of all, even if the current mentality of the software industry and developers is to ignore the hardware for the most part, you simply cannot understand software without understanding hardware. The more specialized our software, the deeper the knowledge of our hardware we need. Since this is an introductory read, we won’t even use computer hardware for this, just plain ol’ hardware store hardware.

Let’s say we have a hammer, some nails and a plank. Yes, a simple nail hitting hammer, the most basic of them all. And we are the handyman that will drive a nail in the plank and then remove it.

There is a saying that “if all you have is a hammer, you treat all the problems like nails”. And this implies that you should use different [hardware] tools for different situations and problems, because using one for all may do more harm than good, if at all possible.

Very true, and in here lies a very important lesson about solving problems using hardware. To add a nail to a plank you can use a hammer, but to remove it you may get away with the hammer, but you may need a nail plier or a crowbar or you may even need to cut the plank altogether. More tools means more cost of tools for you, the handyman and also means the need of more specialization, because someone needs to make each and every kind of tool used by you, the handyman.

Solving problems using software uses a different approach. It is *as if* all your problems are nails and you are using custom hammers to drive them in a plank. You may need to build your hammer each time for different types of nails and planks, but you only need to build hammers. No nail pliers, no crowbars, no nothing. And no factories to build nail pliers, crowbars etc., just hammers.

Now let’s say, as an exercise, that you are trying to build a brick and mortar house and you want to know exactly to the last hammer and nail what tools and resources you need to build not just the house, but also to the last handful of iron and sand the needed resources to build tools for building the house. There are hundreds of millions of houses built in the world, yet trying to calculate the material requirements of building the tools for a single one of them quickly gets so complicated that I doubt anyone would even attempt it.

It’s just like Carl Sagan used to say :

If you wish to make an apple pie from scratch you must first invent the universe

In software this is quite trivial : what software do you need to build software ? Just other software. More precisely a programming language, but don’t let the name mislead you, it’s still just software.

The browser you are using to see this text is most probably built in the software language C# or C++, yet the same programming language can be used to program office tools, video games or even rockets.

If we’ve gone this far, we might as well go too far

There is never a “too far”, but I find that quote to be funny.
As we have seen, software is as flexible as a concept as Mathematics is. Many people say that Math is the language of the Universe. I somewhat agree but with the mention that it is at most a descriptive language of the Universe. You can calculate the length of a football stadium or the trajectory of a rocket, you can describe them with Math.

Software on the other hand can do something that Math alone cannot. No matter what Math formulas you apply to your calculation, you cannot *change* the length of the football stadium or the trajectory of the rocket. In software however, you can. Not only that you can, but if you are planning to build a football stadium or a rocket, you must. That is where Software is most powerful and used today, in planning everything and anything, from buildings to machinery and even human society. In examining it’s uses, we are getting closer and closer to what programming *IS*.

If Math is a descriptive language of the Universe, then Programming is a prescriptive language of the Universe.

Did you just say… ? :o

Yes, and I firmly stand by it.

We haven’t invented Math, we discovered it. We invented the notations used in Math, but the Math would work just the same whether we know about it or not. Two plus three equals five even if we say it, even if we write it like 2+3=5 or II+III = V or even if we have no idea about it.

Physics, Chemistry and even Engineering. All discovered. The only things we invent are applications of principles from the Universe. The Principles themselves were “invented” long time ago, by the Universe itself. We can do our best to observe them and describe them in Physics, Chemistry and Biology, mostly using Maths, but we can do nothing to change the Principles themselves.

But even if we can’t change the Principles, we can and do control their manifestation and interactions.

We control the force with which we handle a hammer to hit a nail and drive it in a plank. We even control if that is what we are going to do with that hammer and in what way we do it. Or what nail or plank. Or perhaps if we use a screwdriver and a screw instead.

And just like that, we can and do use Software and Programming to perform other tasks. Any task !

In fact, when we decide what steps we should take to drive a nail in a plank, we use an algorithm, even if we know this term or not. An algorithm is simply envisioning the steps we should or will take to perform a task. Any task !

Computer Programming is just a subset of Programming; and please note that my article’s title lacks the word “computer”, not by chance.

Just like our daily tasks are made out of tiny steps that we can understand, computer software is made out of tiny steps that the computer understands. The sum of tiny steps is an algorithm, and that is the basis of Computer Programming and Programming in general, but Programming is much much more. We’ll talk about that in future articles, this is just my first on the subject.

Programming is Life. Literally.

At some point in the Human existence, we understood close to nothing about the world we live in. That’s today, pun intended. But in our distant and (even more) primitive past we used to take the world around us just as it was, in a descriptive manner. We were passive spectators to the events around us. We didn’t even consider action and reaction or that one thing causes another. We didn’t see the connections between events and we just accepted them as they happened. It took us quite a while to understand that a lightning that hits a tree and a fire that erupts are not a coincidence and that fires don’t appear at random. And not even lightning for that matter. In 1859 “we” performed experiments to verify if small living creatures like flies could spontaneously be created from dust ! ( An idea known as spontaneous generation )

To summarize our views of the world up to this point : in the beginning we thought that everything was “just so”, then “just the will of gods”, then “Random or Coincidence” (which I consider it to be the God of the Godless). As time passes by we see more and more Causal connections between events, leaving less and less of the world around us up to chance. We are doing this by observing even closer the world in which we live, and we notice something about it : we now know that certain causes will have certain effects, before they happen.

We know what will happen before it does in situations that involve mostly Maths, Physics or other STEM fields. We can know this because we have observed not only events that occur but because we also inferred the laws of Nature that are driving the events under our observation to occur in a precise and certain manner. The laws of nature that prescribe manifestations.

My observations about this observation, inception intended, is that the laws of Nature behave prescriptively, just like software does. As if the “software” that are the laws of our nature had been prescribed, Programmed if you will. After all, we do know about 26 fundamental constants of the Universe that have precise values, there are assumptions that they may evolve over time or from place to place, but we have no clue why their values are the ones that there are. What we do know is that they produce meaningful interactions that are always congruent and consistent with themselves and with the rest of the observable Universe. ( Nice clip about this )

Of course, I am not the only one to notice this, that is why the Simulation Hypothesis exists. But I also noticed many other things. After all, this intro must be an intro to *something*, and I am sure that by now you know that this *something* will not be just Computer Programming.

Being my first article, I expect both eggs and tomatoes to fly my way, but please throw them in a constructive manner, so that I may use them to get better at what I do. Thank you ! See you next time !

--

--