If you are a developer, then abstraction isn’t new to you. I think we’re getting to a point where everything we do as developers is add infinite layers of abstractions.
It runs on a Linux operating system, which probably runs on an Intel x86 architecture.
So it is running x86 instructions, which are then abstracted using assembly to make it “simpler” to develop. On top of it, there’s some C code that implements the Linux operating system.
This blog uses a customized theme for WordPress, which is a framework running over PHP. PHP itself is implemented in C. And it runs inside a web server – probably Apache.
But wait. I am not running it on a physical machine, but rather on a virtual machine hosted somewhere.
There are multiple abstractions here at play, and they are only the easy ones to come by.
You decide to write an Android app. You use a cross platform tool, writing your code in HTML5.
That HTML5 renders in a browser WebView object, which… abstracts web pages. It is wrapped around with the cross platform tool’s Java framework, which apparently hooks up to the… Android Java Framework.
This in turn sits on top of a Java virtual machine called Dalvik, where your “compiled” byte code gets interpreted to machine code. Some operations you do, require access to the operating system’s libraries, which are written in C/C++. These sometimes need to go down to the hardware through drivers – yet another abstraction.
Life is easy at the top. A bit sad that most of us don’t see the whole iceberg any longer.
You sit at work. You say “well, I need to build this small data set here.” And they you think “hmm… someone might want to reuse it. why don’t I make a class to abstract this kind of a data set? And add an iterator to it”.
We do it every time. We abstract it all to infinity.
Is anyone out there writing any real code these days or just adding layers upon layers of… more “logic”?