Lets stop the abstraction!

There is an old saying - "Give a programmer 5 hours to write a particular program, and they will spend 4 hours writing another program that can write the original program in one hour!".

Increasingly these days, it is hitting me just how true that old adage is.  I have been cutting code for over 30 years now, and more than ever I am of the opinion that the world of programming is just drowning in a sea of constantly evolving tools.

It is no longer enough to just pick a language and become proficient in that, and just plain write code using that language.  Nowadays, it is a constant dance of selecting frameworks, database layers, deployment layers, and even additional languages that simplify the writing of the base language of your choice!

We all know that at the core, all computers just function on a series of 1's and 0's - the turning on and off of electrical impulses.  The closest we can get to that is to write in assembler code - manipulating the registers and directly accessing blocks of memory in the hardware.  But that, as we know, is fraught with danger.

So we rely on higher level languages, which are then compiled or interpreted down to machine language so we can run our apps using code that is easier for us to understand as humans.  For years, we simply picked a high level language, then let the compiler or interpreter get on with converting that language into machine language.

But lets look at an ubiquitous language of today - Javascript.  Now Javascript in itself is a fairly simple language, bearing close resemblance to C and other languages, so that programmers can usually pick up the nuances and write decent code in short order.  It is also an interpreted language, usually being converted into machine instructions at run time within a browser.  Not the most efficient language, but still serviceable and functional.

But somewhere along the line, someone decided that Javascript was still a little too hard, so they invented a simplified version called CoffeeScript.  Lets paint the picture here - we now have a specialised language which is then converted into another language which is then interpreted within an environment written in another language which then converts everything into machine language.

But it didn't just stop there.  CoffeeScript itself became bastardised over time, and now exists in about a dozen different flavours.  As of writing this post, there are around 40 different languages that 'compile' down to Javascript.  This is not counting the hundreds or so other extensions that generate javascript code based on a whole other language.

It is no longer enough to say that you know CoffeeScript.  You have to now define the flavour of CoffeeScript that you are familiar with.  You have to remember a whole new syntax to compensate for the fact that you could not remember another syntax in the first place.

I just can't wait to see the next iteration of languages that compile down to CoffeeScript, which then compiles down to Javascript, which then compiles down to.....  You get the picture.

I am theorising here that there is a glut of excess programmers out there who are not actively engaged in solving real world problems, so they take out their energy and time by writing yet another interpreter/compiler for a perfectly valid working language.

To put it in a more primal context, the village is thirsty, but rather than locating water or digging a well, the villagers are busy improving each other's shovels.  We will all be dehydrated soon, but man will we have some great shovels...