Yes, it’s a sweeping statement, and the comparison I’ll make probably doesn’t fill every nook and cranny but it’s just so darn tasty that I had to quickly knock something out. I think that the developer collective have a massive influence over the direction of software evolution, and therefore it’s underlying technologies. In times gone past the influence probably wasn’t so large (or was it Mr Turing?), but with the rise and rise of the Socially Networked era I think the effect has snowballed.
So where is my justification? Well it lies primarily in anecdote – yes yes I hear your nerdy cries you sons & daughters of empirical science, but hear me out m’kay. We, the developers, spend probably more time online than even an opposite-sex obsessed teen does on facebook (yes, I know it’s part of the internet). We search and we scrounge, getting easily bored and looking for the next interesting tidbit, that scrap of information that will make us better programmers or just entertain us. We take the weak, inefficient and uninteresting and toss it aside while rolling The Good Stuff ™ into our work thereby influencing something as small as the font-family used in the corporate intranet, to something as grand as your start-ups Next Big Idea.
I’ve waxed lyrical but I’d like to get down-right specific. Some large parallels can be drawn between the world of OOP and the advent of Cloud Computing, and it is primarily for this reason that I suspect that some developers somewhere (past or present) were key in architecting what we today call Cloud Computing. OOP is by no means the alpha-and-omega of programming philosophy but it was a fundamental and incredibly intelligent paradigm shift – as is Cloud Computing. My comparison is made by drawing parallels with 2 of the main tenets of OOP.
Encapsulation
Encapsulation can be defined as an information hiding mechanism – and I don’t mean in a Wikileaks expose kind of way. Broadly this is described as:
the internal representation of an object is generally hidden from view outside of the object’s definition. Typically, only the object’s own methods can directly inspect or manipulate its fields.
To those familiar with Cloud Computing the correlation is immediately apparent. As a customer of Cloud XYZ I expect the provider to deal with all of the infrastructure setup and maintenance while providing interfaces that let me create applications or host servers or whatever. For example, if I’m using GAE I don’t really need to know how many servers you have or the amount of RAM that each has installed, I just need to know that I can develop, build, deploy and run my application and that it will scale well.
Cloud Computing hides the implementation of the tools that you need in order to complete development whilst providing interfaces to these tools that make this possible.
Abstraction
For those unfamiliar with the concept it can be quite… abstract. Examples always help:
Abstraction is simplifying complex reality by modelling classes appropriate to the problem, and working at the most appropriate level of inheritance for a given aspect of the problem.
For example, Lassie the Dog may be treated as a Dog much of the time, a Collie when necessary to access Collie-specific attributes or behaviors, and as an Animal (perhaps the parent class of Dog) when counting Timmy’s pets.
All of the clouds together i.e. all those platforms ending in “aaS” can be seen to form the highest level of abstraction. If you need a platform to host your Ruby applications then you’d starting shopping for a PaaS. Once your platform is chosen then you deal with the next layer of abstraction which might be concepts/requirements such as database space, CPU time and amount of RAM. The next layer might then be the application itself and so on and so forth.
Cloud Computing takes complex systems and breaks them into easy to digest chunks. By organising these into abstracted layers (imagine zoom-levels on a map) you can concentrate on, and understand, the level of information most applicable to your situation.
It is largely accepted that there are 2 more core principles of OOP namely Inheritance and Polymorphism. While parallels with Cloud Computing can be drawn for these two concepts I don’t think they’re as revolutionary as Encapsulation and Abstraction. Perhaps you disagree and if you do I’d love to hear your explanations.
So you’ve said some stuff and now I should believe you?
Of course not, but if you’re a developer I’m going to bet my bottom dollar (pound) that this makes sense to you; and not only does it make sense but you can see how big an improvement it really is. I have the utmost respect for those bigwigs in management as well as those well-dressed consultants, but for me I cannot see this type of vision being born anywhere else except in the mind of someone who’s gotten stuck into meaty application development and application architecture. Who ever it was, and where ever they may be, I salute them (live long and prosper).
I would go so far as to say that all cloud computing platforms are about abstraction. IaaS abstracts away the hardware layer. PaaS abstracts away an every growing number of mundane developer tasks. As a matter of fact, you can see this by looking back over the years at what has happened at AWS and AppEngine.
At first AWS offered EC2 quickly followed by S3. Since then a larger number of abstractions have been rolled out, the most recent being Bean Stalk.
With AppEngine you first saw a run time for Python then Java with a simple database. Now there are all kinds of abstracted services to leverage.
Force.com started out highly abstracted, to the point that most developers couldn’t see the power and flexibility. In the end, PaaS from all the different providers are striving to achieve the kind of abstraction that exists today in Force.com.
There is very little to disagree with in this post, I’ve actually held these same views from the start. If you can do it a simpler and easier way, why do it the harder way? Simpler has less risk, easier is faster.
The only real con to this model is that they can charge you for the service. In my opinion, paying someone else a small amount (relatively) to assume all of that risk is a no-brainer, especially if you are an SMB and have neither the man-power nor the infrastructure.
Ok, where’s the like buton…. Both for the post and the comment?
😀 It seems I’ve got all the buttons you’d think people want except for ‘Facebook Like’.
CLOUD SETUP WORKING MODEL AND STUFF WORK FOR INFRASTRUCTURE