X

¿Qué es un framework? ¿Para qué sirve?

El desarrollo de software puede ser un proceso bastante complejo, un proyecto escrito desde cero puede consumir mucho tiempo y dinero en desarrollarse, además puede salirse de las manos muy fácilmente sin una estructura definida que ponga un mínimo de orden, por ese motivo una de las mejores formas de ahorrar tiempo de desarrollo y evitar el caos en un proyecto, es utilizar un Framework, o incluso varios debido a que podemos utilizar frameworks tanto en el back-end como en el front-end, en este artículo veremos que es un framework, para qué sirve y cuáles son las mejores alternativas de en cada área.

Qué es un framework y para qué sirve

Un framework en el mundo del desarrollo web, lo podemos definir es una estructura de archivos definida y que además proporciona un conjunto de herramientas, además de bibliotecas y otras convenciones para facilitar el desarrollo de software, son una base ya armada sobre la cual comenzar a programar un proyecto evitando comenzar desde cero en ciertos en aspectos que en realidad son tareas similares en todos los desarrollos de software.

Funciona como un esqueleto base, sobre el cual se puede construir aplicaciones, suelen ofrecer un conjunto de funcionalidades y una arquitectura base que permite a los desarrolladores concentrarse solo en la lógica de negocio de la aplicación que quieren construir en lugar de tener que reinventar la rueda cada vez, como se suele decir.

Los frameworks se encargan de resolver tareas comunes, frecuentes y típicas de todo desarrollo de software, como por ejemplo la gestión de la base de datos, la interacción con el usuario, el enrutamiento de URLs, la seguridad, entre muchas otras, lo cual sin dudas  ayuda tener esto solucionado desde el día cero, acelera enormemente todo el proceso de desarrollo, en resumen, un framework sirve como unos cimientos que facilita la construcción de aplicaciones al proporcionar una estructura predefinida y brinda soluciones para problemas frecuentes, todo siguiendo buenas prácticas.

Por eso de cierta manera, los programadores al utilizar un framework se obligan a trabajar de una forma predeterminada establecida por el framework, donde cada tipo de componente tiene su lugar definido y una forma específica de nombrarlo, a pesar de ello un framework no está para quitarle libertad al programador, sino para indicarle ciertos lineamientos y estilos predefinidos comunes, lo cual es fundamental en el trabajo en equipo, un framework permite que programadores diferentes sepan cómo trabajar en un mismo proyecto sin mayor dificultad, solo basta con aprender como trabaja el framework de turno.

Origen y evolución de los frameworks

Determinar el «primer» framework para web o escritorio puede ser un tanto difícil debido a que en muchos casos no fueron proyectos públicos, es posible que grandes compañías como Microsoft entre otras, desarrollaran frameworks propios privados para luego ser usados en desarrollar sus diferentes productos y servicios.

Por otro lado también existieron proyectos que cumplían esa función aunque no se les denominaba como tal, un ejemplo clásico puede ser los motores de videojuegos, cumplen sin dudas con la definición que hoy tenemos de frameworks, sin embargo, ni entonces, ni hoy, se les denomina como tal, sino simplemente como motores de videojuegos.

Los motores de videojuegos suelen incluir una arquitectura bien definida, con componentes reutilizables que facilitan el desarrollo de juegos por lo que cubren la definición de framework, el primer motor conocido fue Id Tech 1 de Id Software, o más comúnmente conocido como el «motor de Doom» justamente por ser utilizado en el juego «Doom» que fue lanzado en 1993, aunque el motor comenzó a desarrollarse a fines de los años ochenta, por eso se los considera de los más antiguos.

Entre los primeros frameworks que si se hicieron públicos podemos encontrar MFC (Microsoft Foundation Class Library) lanzado en 1992 y es un framework desarrollo de aplicaciones de escritorio para Windows que proporciona una abstracción sobre la API del propio sistema, de manera de hacer más sencilla la creación de aplicaciones de Windows en lenguajes como C++.

Dentro de la categoría de los frameworks para desarrollo de aplicaciones web empresariales, podemos encontrar a Java Swing lanzado en 1997 y AWT (Abstract Window Toolkit) lanzado en 1995, ambos forman parte de las bibliotecas estándar de Java para el desarrollo de interfaces gráficas de usuario (GUI) y permitieron el desarrollo de aplicaciones de escritorio multiplataforma en Java.

En el área del desarrollo web general, podemos encontrar Ruby on Rails lanzado en 2004, Ruby on Rails, también conocido como Rails, uno de los primeros framework de desarrollo web y fue escrito en el lenguaje de programación Ruby y que tuvo gran influencia en frameworks de otros lenguajes, principalmente debido a que fue gracias a Ruby on Rails se hizo tan popular la arquitectura MVC (Modelo-Vista-Controlador) y promovió la convención sobre configuración usada hoy día por casi todos los frameworks disponibles más allá del lenguaje.

Ya dentro del área del desarrollo web para PHP, podemos encontrar como uno de los primeros, a Zend Framework lanzado en 2006, fue uno de los primeros frameworks PHP estructurados y orientados a objetos para el desarrollo web y proporcionó componentes y bibliotecas reutilizables para facilitar la creación de aplicaciones web robustas y escalables en PHP, luego vieron otros que ganaron mucha más fama como Symfony y Laravel, y en menor media CodeIgniter.

La explosión en la cantidad y variedad de frameworks disponibles vino sin dudas de la mano de JavaScript, donde se desdibujó un poco el concepto y se volvió caótico, si bien hay frameworks en toda regla como Angular que cubren la definición de framework, también existen muchos proyectos que se autodenominan frameworks que en realidad son bibliotecas dedicadas a una tarea específica, mientras, por otro lado, bibliotecas que se utilizan como frameworks como el caso de React.

Ventajas de utilizar un framework

La primera ventaja sin duda es la productividad, los frameworks ya proporcionan una estructura y un sin fin de funciones ya resueltas y listas para usarse, lo cual permiten a los desarrolladores comenzar más rápidamente con el desarrollo de aplicaciones, enfocándose directamente en la capa de negocios de la aplicación.

La segunda ventaja y probablemente la más importante, es estandarización del código, los frameworks se basan en seguir patrones y convenciones establecidos que promueven las buenas prácticas en el código y la arquitectura de la aplicación estandarizada, por ejemplo MVD y una estructura de directorios bien definida donde cada componente tiene su lugar establecido, esto sin dudas facilita la colaboración entre desarrolladores y garantiza que el código sea más fácil de entender, mantener y escalar a medida que crece el proyecto.

Otro aspecto importante es la seguridad, los frameworks ya incluyen ciertas características de seguridad integradas y buenas prácticas recomendadas que ayudan a proteger las aplicaciones contra vulnerabilidades comunes, como la inyección de SQL, ataques XSS y CSRF entre otras, todas estas funciones ya están probadas debido al uso y los años de experiencia del framework, es justamente por esto que la probabilidad de que tengan agujeros de seguridad son mucho menores que si un programador se encarga de escribir estas funciones desde cero.

En cualquier proyecto, con proyección de futuro a largo plazo, la escalabilidad es un requisito casi fundamental y los frameworks por arquitectura ya suelen estar diseñados para soportar el crecimiento, ya incorporan la posibilidad de soportar cambios de motor de base de datos, de soportar sistemas de caché o la posibilidad de balancear carga sin afectar la funcionalidad.

Otra ventaja no menor es la comunidad detrás de los frameworks, suelen contar una gran comunidad de desarrolladores que día a día contribuyen con nuevos componentes, nuevas bibliotecas, plugins, documentación, soporte para nuevas tecnológicas que vayan surgiendo y soporte en línea, todo esto sin dudas ayuda a mantener el software al día y poder agregar nuevos componentes y tecnologías muy fácilmente.

Desventajas de utilizar un framework

La principal desventaja es la falta de flexibilidad, los frameworks imponen una estructura y forma de trabajo que pueden no suele ser fácil de adaptar cuando existen necesidades muy específicas de un proyecto que no fueron contempladas por los desarrolladores del framework, por esta razón también existen frameworks minimalistas que ofrecen una muy limitada cantidad de funciones de manera de darle al desarrollador más libertad de implementar lo que necesita a su manera y de hacer mucho más liviano y eficiente el framework sin tantas funcionalidades que no se usarán.

Los frameworks son diseñados para ser usados en todo tipo de proyectos, por eso suelen contener una gran cantidad de código para cubrir todas las necesidades, sin embargo, no siempre es necesario para cada tipo de proyectos, es mucho mejor antes de usar un framework, determinar qué funcionalidades se necesitará en el proyecto por parte del framework,  de modo de escoger uno que se ajuste a las necesidades sin que tenga una sobrecarga de componentes que no se usarán y solo lo harán más lento.

Otra de las graves desventajas son «Los problemas de rendimiento», algunos frameworks pueden generar sobrecargas y falta rendimiento adiciona en una aplicación debido a la complejidad de sus abstracciones y la cantidad de código que se ejecuta en el fondo, un ejemplo claro de este punto son los ORM (Object–relational mapping) que es una de las funcionalidades más utilizadas de los frameworks de back-end.

Los ORM permiten abstraer y gestionar desde el código de la aplicación toda la estructura de la base de datos, tiene la ventaja de facilitar el diseño de la estructura de la base de datos y a su vez permitir en un futuro cambiar de motor de base de datos sin modificar la lógica de negocios en la aplicación, sin embargo, el costo en rendimiento es inmenso y las posibilidades de optimización de consultas o de querys son prácticamente nulas debido a que todo es una abstracción fuera del control del programador.

La última gran desventaja que podemos nombrar es la dependencia de terceros, al utilizar un frameworks desarrollado por alguien más siempre existe el riesgo que el framework pase de moda, el desarrollo pierda fuerza o incluso desaparezca, esto es un problema serio sobre todo en desarrollos a largo plazo, especialmente en el ámbito empresarial, donde a diferencia de webs públicas que generalmente son renovadas cada pocos años, las aplicaciones empresariales pueden usarse por décadas.

Los frameworks más usados actualmente

JavaScript

React.js técnicamente no es un framework, sino una biblioteca de JavaScript, sin embargo, se lo suele tratar como si lo fuera, es desarrollada por Facebook que se utiliza para construir interfaces de usuario interactivas y dinámicas, su enfoque en componentes reutilizables y su modelo de programación declarativa hacen que el desarrollo de aplicaciones web sea más eficiente y mantenible, ofreciendo una gran flexibilidad al trabajar con otras tecnologías y bibliotecas.

Angular es un framework de desarrollo web de código abierto mantenido por Google, que se utiliza para construir aplicaciones web de una sola página (SPA) y aplicaciones web progresivas (PWA), ofrece un conjunto completo de herramientas para el desarrollo front-end, incluyendo enrutamiento, gestión del estado, y comunicación con el servidor, es un framework no exento de polémica por sus constantes cambios no retrocompatibles con versiones anteriores.

Vue.js es un framework de JavaScript utilizado para construir interfaces de usuario interactivas y reactivas en aplicaciones web, es conocido por su enfoque gradual, lo que significa que puede ser adoptado fácilmente en proyectos existentes sin requerir una reescritura completa, ofrece una sintaxis simple y clara, lo que lo hace bastante accesible de aprender y utilizar para desarrolladores de todos los niveles de experiencia.

Next.js es un framework que amplía las funciones de React que se enfoca en la renderización del lado del servidor y la generación de páginas estáticas, es una combinación permite crear aplicaciones web rápidas y escalables con facilidad, debido a la popularidad de React, Next.js se ha convertido en una opción interesante para construir aplicaciones web.

Express.js es un framework web de Node.js minimalista y flexible que se utiliza para crear aplicaciones web y APIs de manera rápida y sencilla, con Express, los desarrolladores pueden construir fácilmente servidores web con rutas definidas para manejar diferentes solicitudes HTTP, se ha convertido en una opción popular para el desarrollo de servidores web en el ecosistema de Node.js.

PHP

Laravel es el framework más popular en la actualidad para PHP,  se destaca por una sintaxis clara y expresiva, además promueve las mejores prácticas de desarrollo, con una activa comunidad de programadores, una amplia documentación, por todo eso Laravel se ha convertido en uno de los frameworks de PHP más populares y ampliamente utilizados en la actualidad para el desarrollo de aplicaciones web modernas y escalables. Incluso se puede montar una web Laravel usando cPanel.

Symfony es un framework de desarrollo web de alto rendimiento y de propósito general escrito en PHP, se destaca por su modularidad, flexibilidad y escalabilidad, lo que lo hace ideal para construir una amplia variedad de aplicaciones web, desde sitios simples hasta plataformas empresariales complejas , Symfony facilita la creación de aplicaciones mantenibles y extensibles, fue el más popular en su momento aunque perdió mercado frente a la relativamente mayor facilidad de Laravel.

CodeIgniter es un framework de desarrollo web de código abierto que se enfoca en la simplicidad y la velocidad, es principalmente conocido por su reducido tamaño y su rápida curva de aprendizaje en comparación con Laravel y Sympony, lo que lo hace ideal para desarrolladores que desean crear aplicaciones web de manera rápida y sin demasiadas complicaciones. Aunque ha perdido parte de su popularidad frente a los dos anteriores, sigue siendo una opción interesante y viable para proyectos pequeños y medianos que requieren un enfoque sencillo y directo para el desarrollo web en PHP.

Python

Django es un framework web para Python más conocido y utilizado, facilita el desarrollo de aplicaciones web complejas con un fuerte foco en la seguridad, ofrece una amplia gama de características listas para usar, como autenticación de usuarios, administración de bases de datos, formularios web y generación de interfaces de administración. Es tan bueno que incluso en su momento hicimos una comparación de Laravel vs Django.

Flask es un micro-framework de Python para construir aplicaciones web pequeñas o prototipos con un mínimo esfuerzo y una sintaxis simple y elegante, si bien tiene un enfoque minimalista en comparación con otros frameworks como Django, Flask proporciona todas las herramientas necesarias para construir aplicaciones web, generalmente es la primera opción luego de Django

FastAPI: FastAPI es un framework de Python enfocado exclusivamente en construir APIs web rápido, se destaca por su rendimiento ultrarrápido, es fácil de usar y está diseñado para ser intuitivo, lo que lo hace ideal para desarrolladores que desean crear APIs webs potentes y eficientes de manera rápida y sencilla, gracias a su enfoque en el rendimiento, la seguridad y la facilidad de uso, FastAPI se ha convertido en una opción popular para el desarrollo de APIs web en Python.

Ruby

Ruby on Rails es un framework de desarrollo web de código abierto escrito en Ruby, de gran popularidad en el pasado, actualmente no es tan usado para proyectos nuevos, sin embargo, aún es un framework requerido porque existe muchos sitios web y aplicaciones escritas en él, que requiere mantenimiento por lo que es un framework con sueldos relativamente más altos que otros.

Java

Spring Boot es un framework de Java para desarrollo de aplicaciones Java basadas en Spring, principalmente en entornos empresariales en los que Java sigue teniendo una cuota de mercado importante,  por eso Spring Boot se ha convertido en un estándar de facto para el desarrollo de aplicaciones empresariales en Java, principalmente también a la escasa competencia en su rubro y al relativo estancamiento de los otros frameworks en su mismo nicho de mercado.

Escritorio

Para escritorio existen muchos frameworks como QT, GTK y .Net de Microsoft que siguen siendo muy usados aunque principalmente porque ya están en uso en proyectos de muchos años, la tendencia actual para la programación de escritorio es utilizar JavaScript, HTML y CSS tal como si se tratara de una web, entre los más populares encontramos a Electron y Tauri.

El más famoso de los dos es Electron, un framework permite construir aplicaciones de escritorio multiplataforma utilizando tecnologías web como HTML, CSS y JavaScript, para ello proporciona un entorno de ejecución a partir de motor Chrome V8 y lo que permite a los programadores crear aplicaciones de escritorio nativas con la misma tecnología independiente del sistema operativo.

El menos conocido aunque ha ganado popularidad rápidamente es Tauri, un framework basado en Rust que permite construir aplicaciones de escritorio utilizando tecnologías web como HTML, CSS y JavaScript,  lo que hace generando binarios nativos para varias plataformas, como Windows, macOS y Linux, lo que brinda una experiencia de usuario nativa y una mayor seguridad, debido a que ofrece una gran cantidad de características como ventanas emergentes, barras de menú personalizadas y soporte para notificaciones.

Cómo elegir el framework adecuado para un proyecto

Al elegir el framework se está tomando una decisión que no solo puede significar la diferencia entre el éxito o el fracaso del proyecto, sino que es una decisión sin retorno, en caso de querer cambiar se debe comenzar de cero, por eso lo ideal es tomar la decisión con calma y sobre todo con fundamentos objetivos.

Usar un framework por ser un viejo conocido por programador o porque se programa en tal lenguaje no son argumentos válidos, la elección debe ser objetivo basado en las necesidades actuales y futuras del proyecto.

Los frameworks nacen y mueren todos los días, por eso el principal punto a tomar en cuenta es el ciclo de vida de las aplicaciones, si un proyecto se espera que tenga un ciclo de vida corto, probablemente no importe mucho la popularidad ni el futuro del framework a largo plazo, sin embargo, si el ciclo de vida será largo, por ejemplo en aplicaciones empresariales, es mejor evitar los frameworks nuevos sin trayectoria ni rumbo claro, es mucho mejor decisión apostar por frameworks que tengan una cierta cantidad de años y una popularidad grande que garantice soporte por muchos años.

Lo mismo sucede con los lenguajes de programación, Ruby on Rails estuvo de moda algunos años, sin embargo, en la actualidad si bien sigue vivo, no existen proyectos nuevos basados en RoR ni en Ruby, por el contrario, PHP que tan mala prensa tiene a veces, sigue firme como el lenguaje que soporta el 80% de las webs en Internet.

El futuro de muchos frameworks JavaScript penden de un hilo o marchan sin rumbo, muchos son atractivos porque facilitan el desarrollo e incluyen funciones interesantes, sin embargo, pueden quedar sin soporte muy rápido, entre los frameworks con mayor trayectoria se pueden encontrar React y Angular, sin embargo, probablemente en front-end el ganador en ese caso sea React debido a que Angular suele sufrir cambios drásticos entre versiones.

Otro punto importante es comprender los requisitos específicos del proyecto, incluyendo el tipo de aplicación que se está desarrollando, las características necesarias y los plazos de entrega, el desarrollo en algunos frameworks y lenguajes puede variar mucho comparado con otros, no es lo mismo programar en PHP que en Rust o GO.

Se debe evaluar con mucho cuidado los puntos fuertes y los puntos débiles de frameworks disponibles, considerando puntos como el rendimiento, la escalabilidad y la disponibilidad de desarrolladores, la compatibilidad con bases de datos, la posibilidad de optimización, etc.

También es importante tener en cuenta la experiencia del equipo de programadores y su conocimiento con los frameworks, puede ser una buena idea realizar pruebas y prototipos con diferentes opciones de framework puede ayudar a evaluar mejor antes de tomar una decisión final.

Incluso se debe evaluar la necesidad de usar un framework o no, todo depende de la complejidad del proyecto y los requerimientos, actualmente muchos sitios están migrando de frameworks en JavaScript a JavaScript puro por temas de rendimiento.

Conclusión

En esta oportunidad hemos aprendido que un framework es, básicamente, un conjunto de archivos estructurados, herramientas y bibliotecas que se utilizan en el desarrollo de software, facilitando mucho esta tarea. Existen muchos frameworks distintos, y los diferentes lenguajes de programación pueden tener varios disponibles. Dependiendo de las ventajas y desventajas que tengan, tendremos que inclinarnos por uno u otro.

La elección es subjetiva, no existe el mejor framework ni el mejor lenguaje, todo depende de los requisitos, de la experiencia y la disponibilidad en el mercado de los programadores, si existen apuestas seguras en cuanto a lenguajes y frameworks de largo plazo, el principal es sin dudas PHP y Laravel, muy cerca vienen Pyhton con Django, el futuro o la popularidad a futuro de Rust y GO aún está por verse, tienen muy buena prensa, sin embargo, son mucho más complejos, son excelentes para proyectos con necesidades muy puntuales por lo que dudosamente tengan una cuota muy grande de mercado.

Artículos relacionados