I was programming in C previously and then C++ and now in C# and generally playing around with the .NET framework as such when a thought occurred to me that what i am doing is superfluous ! I might write a blog engine, write some e-com application, write a code to print 'hello world' but what is all this ?? The truth is that every system is based on something else and the one thing that interests me the most is the bottom of this dependency, the interface, the connector, who takes care that all data is bound and all interaction happens as per the expectations of the user. That interface is what i want to be working on !!! That's the interesting and the toughest part which makes computers do what they can do ...
When i think about it more, the more i get obsessed with computers ... The truth is that all programming languages are abstractions built over the interface to make it, to flex it the way it is wanted to behave... The ultimate interaction language has always been Assembly ! The ultimate machine code is read from this only ... So basically when Richter sat down to build the unix operating system, he must have met with the challenge that the syntax of the assembly is complex and that all operations are not obvious from the code in first shot ! So he created 'C' which is an abstraction over assembly or the 'interface language' which i will call. C's syntax is much more structured and it gives the reader a good level of understanding of the logic of the code. The abstraction also explains why C is so very powerful for doing any sort of stuff .. All machine related, system related, more powerful, fast and reliable code can be coolly written in C because that is just a small layer of abstraction over our interface language..
C++ built on C and introduced OOPS - Object Oriented Programming ! C++ in itself is not a major level of abstraction because it is as flexible as its predecessor 'C'. System programming can also be done using C++ in a very neat way ... The abstraction happened this time in a different way because all the cluttered spagetti code can now be arranged in real world object encapsulations which is amazing 'coz for a good programmer visualising something perceivable is easier than some unknown variable which doesn't link to its other parts of the code in a neat way ! This was the first major abstraction if you can see it the way i do !
All .NET, Java and other new virtual machines and runtimes along with the languages they brought along are still more higher abstractions over this .. People forget that as abstractions rise, people want to code less and so the abstraction framework is heavy and takes care of all the miscellany to spare the programmer but indirectly giving less functionalities to the user. So there evolved a need for API's to expose the functionalities provided by the lower level languages to the higher abstract ones ..
I love .NET in the way they have maintained consistency in the design of the framework .. There was one beautiful discussion or rather a debate over whether .NET is a platform or a abstraction ... By now i think from what i've said, which side i stand on ! After all it is just an implementation of the CLI right that abstracts out details very specific to the machine (the unmanaged bit ?) wherein PAL kicks in ...
There is nothing to conclude here ... What i have told you are my views and i am sure that it is not far from the abstract truth !
There is also one thought provoking post by Angelika Langer on a Revolutionary Programming Language. Just in case if you haven't checked it out.
Update: Removed the story.