The software of today is really made up of a rather long series of layers, with each layer reducing the complexity and increasing the capabilities of software developers.
The first developers literally programmed in ones and zeros. They had nothing more than that – pure binary. Heck, in the beginning, the notion of “programming” didn’t even really involve software, but rather the manipulation of hardware – actually flipping switches to physically alter the bit settings on the device.
But soon enough, along came an assembler, which is basically a layer of abstraction over binary code. Then Grace Murray Hopper invented the notion of a compiler, and this brought about human readable languages. (Some argue that assembly is human readable – I guess I mean “readable my mere mortals”).
But of course, every language has to have an operating system to code against. Once we had that idea down – that of writing a human-readable language against the operating system (OS) - we wrote Application Programming Interfaces (APIs) to make calling into the OS easier. Instead of coding against interrupts in DOS, we had a neat, fairly easy to use thing like the Windows API.
But naturally, we weren’t happy there. We needed another layer! So along came things like the VCL and MFC. They were layers on top of the OS’s Windows API making it easier to write Windows programs. (Of course, if MFC makes it easier, I’m not sure what word to use to describe what the VCL does for Windows programming. )
But that wasn’t good enough for us, now, was it. We needed yet another layer. So along came things like Java as a cross-platform layer, and for Windows, we now have .Net. At its base level, .Net is another level of abstraction on top of the Windows API.
So (crudely put) we have .Net on top of the Win32 API on top of the OS on top of Assembler on top of binary code on top of physical switches. Layer after layer. As a result, we have managed to tame the immense complexity of the computers that we have today. Without all these layers, we’d never be able to write the software that we use today.
So the question that pops into my mind is this: What is the layer that we are going to put over things like .Net and the VCL?
I myself have no idea, despite having thought about it quite a bit. I’m guessing that it will be something that we haven’t even really conceived of yet – or something that only people way smarter than you and I are thinking about today.
Nevertheless, I bet you have an idea. What is it?