"Framework" is one of those words we use the most in Software Development, but it also is one of the most difficult to define. Perhaps, this is because we use it very frequently.
Taking some formal definitions we can explain the concept of Framework as:
... an essential supporting structure
A software framework is a universal, reusable software platform to develop software applications, products and solutions.
Mixing up and stiring the aforementioned definitions and adding a bit of personal experience's salt, we can say:
A framework is a structure that provides us with standards, practices and software modules that help us solve some type of problem.
The best real-life example I can think of to explain a framework and how it helps us as software developers is:
Let's suppose that we are still very young and we live with our parents in a 'good-enough economic situation'. We will have a number of problems already resolved for us, such as:
- When we are hungry, we can head to the fridge where we'll find food.
- When we need to use electricity, we can simply use it without having to worry about paying the electricity bill.
Also, have some restrictions such as:
- How many friends I can invite home.
- If I can make a party or not.
- While the house may have services like phone, we will be limited on how long I can use the phone for.
- Et Cetera...
However, when we decide to go to live alone and therefore we stop using the "Parents" framework, we realise that this framework solved many 'problems' for us and we just limited ourselves to use the services and utilities that it offered.
- If we want food, we have to go to the supermarket and buy what we can with the resources (money) we have.
- If we want to keep the food we buy, we'll need a friedge.
- We'll have to pay the electricity bills on time to keep friedge working.
- We'll have to take care of any problems that arise in the house because nobody will do it for us.
On the other hand, now we have the freedom of not having to be completely
"framed" on the lines of the Parents framework as :
- We can invite friends home whenever we want.
- We can make parties whenever we want.
- We can use the phone the number of times we want.
Of course! we will not have the same experienced resource management framework that Parents offered us and therefore it is entirely up to us to use all available resources in the best way.
Exactly the same applies to software development, we can use, for example, the .Net framework:
Having a memory management completly developed and efficient, database access, web services, etc..; although we can not make our application work with high levels of performance as if we would use C/C++. In the latter case, we have the ability to create an application with a very high level of performance but we should take care of things like allocating and freeing memory; create our own method to access databases or a web service.