The world of computing till date has been chaotic. We have had various languages struggling to interoperate with each other, developers undergoing huge learning curves to shift from one language to another or from one application type to another, non-standard ways of modeling applications and designing solutions and huge syntactic differences between languages.
Past years have seen some solace in the form of enterprise “glue” applications and standards like COM, which put-forth a binary standard of interoperability between application components. But in reality, this was not always true. Also, as applications increased in their reach, it was found that rather than re-inventing the wheel for a solution, it was better to take the “service” of another applications specialized for a piece of work.
Thus from a paradigm where applications replicated code to provide common services, we have moved to a paradigm where applications are built as “collaborative units” of components working together.