This post’s intention is to create a discussion about what is it like to be a programmer, and I would like to give a short into to some aspects about it.
Why being a programmer?
Because at some point we all fantasized with being able to make our world change, to transform it at will, to extend the capabilities of our mind to specific things…
Although we see the results of programming everywhere, it wasn’t until that first day that someone with pride and excitement showed us some lines of code, some explanation about what they were doing and then hit play and we saw the app running, when it hit us.
Maybe the connection just made wasn’t very clear at a first moment, the only thing we could think was “wow, with just that?”; but later it was clear that programming was for us the way to transform the world, to understand it better and even to see new connections where apparently random things were happening.
And that’s how the journey started… Why do you program?
What do you program?
There are a huge diversity among programmers, from those that like to play with the instruction pointer and the locations in memory using assembly language, to those that are in charge of creating mini worlds with their own rules, constraints and stories for gaming, without forgetting the programmers for programmers, the ones that create tools, maintain them for all of us to get the benefit of their genius.
There are operating system programmers, programming languages programmers, plugin programmers, script programmers… And in my experience, with time, a programmer become a philosopher in its field, those that write drivers for hardware devices see and understand the world for those that develop new programming languages, and way different from those in charge of create user interfaces, and each one, all of them, has something to tell and even more, something to learn from… What do you program?
How do you program?
Being a raised as a C programmer and after studied many programming languages, script languages, notations, standards, protocols, libraries, etc. either by curiosity, conviction or circumstance, I’ve learned that the only rule is: choose the appropriate technology/language depending on the problem to solve.
There is not a single language that will apply for all cases in the world. Therefore the paradigms, levels of language and capabilities of each programming language.
The more technologies you know, the best you can understand the problem you’re trying to solve (because each technology gives you a different approach to think of the problem) and the best you can pick which technology is the most adequate.
Although in real life, this may not be the case since enterprises and companies may have a long-life contract with a particular technology or language, either for monetary reasons (strategical partnerships, service contracts, etc) or legacy compatibility (old systems that are too critical to be just stopped and thrown away) or maybe just lack of knowledge.
In all this constraining circumstances is when the best spark of creativity rises: how do I do in this technology what I need? And new findings are gotten this way, by stretching the current boundaries on a technology to reach out new capabilities.
When do you program?
All the time… The brain becomes an abstraction monster trying to eat everything we capture creating logic representations of the phenomena we observe and when the monster fails, then the magic happens: new understanding is created.
Learning a new programming language gives the brain tools to see, feel and think differently, every trial and error teaches us more about us and ourselves, and when we happen to see someone else’s code then we see the way his brain thinks, for a second you are in their shoes and you can open your own horizons to new levels of understanding.
Now… Tell me, what is it like to be a programmer?