== What is a Framework? == It’s easier, far easier, to explain what frameworks are MEANT to do, than to explain what a framework is… and it is the goal that people refer to, not so much the object.

Every single framework is intended to do one thing - help end developers code more efficiently. Ideally, frameworks: * contain less duplicated code * provide functionality for common tasks * have an “elegant” API that is easy to read and use

The English language fails at defining what a framework is. We have no real metaphors of this, because the concept of “frameworks” doesn’t readily lend itself toward any real-world analogy.

There are two primary paths that frameworks choose to take. It’s either one or the other, really, but it’s more or less a continuum at the same time:

non-restrictive and modular - Give the end-users much say in what parts they use, how much they have to use, and how and where they use it

restrictive and monolithic - One solid mass of “This is the Only True Way”, that isn’t designed, or supported, to be broken into bits. It’s all their way or the highway.

Frameworks have nothing INHERENTLY to do with blueprints, but a caveat is that monolithic/dictatorial frameworks not only provide, but force one to use their own specific blueprint + file / directory layout structure + their own ways of doing things.

== A Brief History ==

Frameworks are a very new concept in Computer Science. The first ones were created for C++ and were Cross-Platform GUI toolkits. The first veritable “framework” was Microsoft’s MFC, created for Windows 1995. The first cross-platform framework was Qt, followed by GTK+. Followed, in the mid-2000s by wxWidgets. All were in C++.

Around the mid-2000s, frameworks caught on on the Internet, first with PHP 5. Then circa 2006, Microsoft came out with a Monolithic, restrictive programming language called C# for the new .NET platform. Then Python and Ruby followed C# dot NET in forcing monolithic frameworks down the necks of the programmers.

C#, Java, Python, and Ruby all differ from PHP in that they are all singular monolithic frameworks, in that there is only one “supported” framework. Making frameworks for those languages is ridiculously hard (in relation to PHP) and they are all highly restrictive. C# and Ruby basically compel the end user to use their frameworks and nothing but.