¿Qué es un framework y por qué es importante para mi proyecto?
Framework. ¿qué rayos es un framework y por qué debería importarme?
Breve historia del mundo (del desarrollo)
En el principio, se inventaron los lenguajes de desarrollo, que eran de propósito general y servían para crear sistemas operativos y programas para los equipos de escritorio y posteriormente para las notebooks, que evolucionarían en laptops y tablet PC.
Pero un día apareció internet y aunque en sus humildes inicios las páginas eran solo informativas, poco a poco fue surgiendo la necesidad de volverlas más interactivas y con ello fueron surgiendo diferentes lenguajes especializados para la web, como PHP y algunos de propósito general adoptaron funcionalidades nativas para el desarrollo de sitios y web-apps, como Python. También cobró importancia JavaScript, un lenguaje (entonces) poco potente y que servía para cosas muy sencillas como mostrar mensajes y evitar que los usuarios hicieran clic derecho.
Hoy en día, existen dos tipos de lenguajes para desarrollo web: de lado servidor y de lado cliente. Sin ahondar mucho en esto, podemos decir que unos se ejecutan en los servidores que nos proporcionan el acceso a los sitios y web-apps (PHP, Python, Ruby, Go, etc.) y el otro corre en nuestro propio navegador cuando usamos alguno de esos servicios (JavaScript).
Muy diferentes en cuanto a su uso, estructura y capacidades, pero con un reto en común: la usabilidad del sitio, aplicación o sistema en cuestión es crítica, pero sin dejar de lado cuestiones como la seguridad, estabilidad, capacidad de dar mantenimiento, escalabilidad y experiencia de usuario.
Construcción artesanal
Hace algunos años, cuando se requería desarrollar un sitio sencillo que permitiera registrarse para, digamos un sorteo, el programador armaba una estructura en HTML, colocaba un formulario y éste se procesaba por medio de PHP por ejemplo. Al llenar los datos y dar clic en el botón Enviar, el servidor recibía la información y la guardaba en algún lugar, como una base de datos; tal vez enviaría un email al usuario notificándole de su registro, pero era todo lo que se requería. Básicamente un archivo HTML para la página y otro PHP encargado de procesar la información.
Los sitios y aplicaciones web de hoy pueden llegar a ser muy complejos, tener cientos de pantallas, docenas de tablas, estar distribuídos en servidores alrededor del mundo y ser capaces de darnos acceso a archivos, documentos, imágenes, videos, mapas; todo mientras nos permiten registrarnos, iniciar sesión, mandar mensajes, crear órdenes, comprar productos, editar artículos y un largo, largo etcétera. Las páginas sencillas de dos archivos son cosa del pasado y para hacer posible el desarrollo de proyectos de tan amplio espectro, hubo que crear algo que ayudara a reducir la complejidad de hacer que todas las piezas de un sistema moderno trabajen en conjunto sin convertirlo en un espaguetti de código.
Ese algo, son los frameworks. En vez de hacer un desarrollo artesanal cada vez que se requería implementar un sistema complejo, se pensó en crear una plataforma base sobre la cual construir dicho sistema, que proporcionara los bloques básicos y que facilitara la interoperación entre diferentes sistemas o componentes mediante protocolos o estándares.
El hilo negro
Dice el famoso dicho "No reinventes el hilo negro", refiriéndose a que si algo ya existe, muchas veces es mejor usarlo a perder tiempo tratando de replicarlo desde cero. Y en el desarrollo esta es una poderosa filosofía: Reutilizar y modularizar.
La idea principal detrás de los frameworks es darle al desarrollador toda la funcionalidad que pueda necesitar para que el proceso de construcción sea mucho más rápido, estable y estandarizado. Si se requiere leer los datos de un formulario, validar que la información sea adecuada, guardarlo en una base de datos y enviar un mensaje por correo electrónico basado en una plantilla específica se puede hacer sin un framework. Obviamente habrá que hacerlo todo desde cero o utilizando componentes, tal vez algunas librerías; pero con muchos frameworks es posible hacerlo sin involucrar componentes o servicios adicionales.
Naturalmente, existen límites en las capacidades de un framework y para ello contamos con librerías o servicios web, pero se busca que estos sean casos particulares y que el desarrollador promedio tenga las herramientas suficientes al basar el diseño de un sistema en un framework moderno.
Back & front
Regresando un poco al tema de lado servidor y lado cliente, es importante mencionar que dada la complejidad de algunos sitios o aplicaciones web, muchas veces se utilizan varios frameworks para los distintos componentes del mismo, por ejemplo:
- Funcionalidad de servidor (backend) - Python con Django
- Funcionalidad de cliente (frontend) - JavaScript con React
- Funcionalidad de API (para apps móviles) - PHP con Slim
Esto es solo un ejemplo, pero es posible mezclar lenguajes y frameworks dependiendo del servicio, incluso con la llegada de los microservicios, la cosa se puede poner más compleja. Y como es natural, esto puede afectar la capacidad de darle mantenimiento a un sistema así o incluso para escalarlo.
Al final del día lo que se requiere es una buena planeación y utilizar la herramienta adecuada para el trabajo.
Así que, ¿cuál es el bueno?
La pregunta del millón... ¡y la respuesta te sorprenderá! (o tal vez no).
Si vas a construir una casa no existe una técnica definitiva para hacerlo, si bien hay normas y lineamientos sobre lo que se debe y no hacer, cada quién es libre de buscar los materiales y procesos que mejor se ajusten a su presupuesto. Pero también al tipo de suelo, clima, etc. por lo que siempre es recomendable asesorarse con un experto que conozca bien la normativa y las opciones disponibles en el mercado.
Lo mismo sucede con un sitio, web-app o sistema. Habrá quien diga que X lenguaje es mejor que Y o que el framework Z es lo último y más trendy. Sin embargo, lejos de fanatismos y preferencias personales, un verdadero experto debe ser capaz de dar una recomendación que se ajuste al tipo de proyecto, su público objetivo, el presupuesto, el tiempo disponible, el tamaño del equipo que lo va a trabajar y mucho más. Existe una gran variedad de factores que se deben tomar en cuenta al elegir un framework y que en el peor de los casos pueden ocasionar problemas importantes si se ignoran.
En Artisan estaremos felices de apoyarte en esa decisión considerando las características de tu proyecto y ofreciéndote siempre varias alternativas para que puedas elegir la que mejor se ajuste a tu presupuesto.
Ven y cuéntanos sobre tu idea, nosotros te ayudaremos a hacerla realidad.
Y no te pierdas las próximas entradas sobre las ventajas y desventajas de los distintos lenguajes y frameworks disponbiles actualmente.