Let me explain this excitement, the one I feel on doing difficult, low abstracted programming stuff.
And when I mean difficult, I mean it for me. The difficult stuff for me that I do, it’s like playground to others (many, many of them) for sure.
And what is that I qualify as difficult stuff for me? Well, when you do all your nice applications using vast and robust frameworks on Java, Ruby, Node.js, etc, etc, I prefer to go with plain and pure C. Hell on earth you say? Hell on earth it is!
Maybe the term difficult is not accurate and rather complex is a more precise one, because programming is a very difficult stuff to learn and to masterize, no matter what kind of hacker genius your are. However there are tools to simplify your life.
So we have the terms, simple and complex. And those terms could be very blurry when you try to define them. However there’s this analogy that can help you to see my point: High Level Abstraction & Low Level Abstraction.
And dear reader, I firmly believe that the more you like to think in terms of the problem and the solution you are implementing, with your code, your weapons of choice are going to be some high level OOP framework. To me this kind of programming is boring, no sensical (does this word even exists?), and mind killing.
On the other hand if you develop in terms of the machine with the computational resource you are programming for, and sure, executing that program a problem being solved, you will be dancing with a low level abstraction language like Assembly, C, VHDL or Verilog etc.
I love to think more in terms of the machine I’m programming and build an abstraction from that looooow point, I love the mathematics behind it, I love to model a behavior, whether it is a problematic one or a solution initiative, I love to design, develop and deploy the scalable models arising on my mind, thinking in terms of memory, threads and functions.
I know, I know, I’m not productive. But who cares….. I love doing the complex, -no one ever will do that way-, difficult stuff. I hope someday I can program a videogame from scratch, no Unity/Unreal Engine, or other engine framework BS.
Why Would you prefer Higher Abstraction rather than Lower Abstraction programming or vice versa?
The illustration shows a piece of code from the Allegro gaming library. Oh my God the days I had, when I used to tweak a line here or there with this library. I learned computer architecture, far more from exploring the code in this library rather than anything else.
With this, I learned the basics of memory dynamic allocation, something most programmers doesn’t care about this days. With this I learned about scripts to build code, with this I learned about version control. With this I learned Linux!. Those were glorious days. That was really funny.
Today computing has become more about startups, productivity, the Silicon Valley of broken dreams, social networking, and the funny core, is forgotten… forever. Nowadays being a programmer, has nothing to do with Operative Systems or Machine Level Knowledge.
A shame I think.