Un framework es algo que da a los programadores la mayoría de los bloques de construcción básicos que necesitan para hacer una aplicación.
Imagina que estás cocinando un banquete para 20 personas. Vas a necesitar un horno, un fogón, una nevera, un fregadero, probablemente cientos de ingredientes, utensilios, platos... etc etc.
Un framework es como una cocina totalmente abastecida. Tiene todas estas cosas listas para que usted cocine. Usted - o la gente que le paga por la comida - sólo tiene que pensar qué hacer con todo ello. Puede que el horno no tenga el tamaño adecuado, o que no haya suficientes platos, o que te falten algunos ingredientes, pero en su mayor parte, todo lo que quieres está ahí donde puedes encontrarlo y puedes hacer que funcione.
Programar sin un marco de trabajo es como intentar construir la cocina perfecta desde cero antes de preparar la comida. Primero tienes que decidir qué vas a hacer. Si necesita un horno, puedes decidir comprar el horno perfecto o construir uno improvisado. Si los ingredientes necesitan refrigeración, puedes idear alguna forma de mantenerlos fríos. ¿Quizás te gustan ciertas marcas de ingredientes? Pues bien, tienes la libertad de comprar sólo esas marcas, en lugar de lo que te pueda dar una cocina ya abastecida.
Así que hay pros y contras en ambos casos. Pero la mayoría de los chefs prefieren tener una cocina organizada para trabajar cuando la comida tiene que estar lista en media hora, que tener una pizarra en blanco. Lo mismo ocurre con la mayoría de los desarrolladores de software.