Al momento de iniciar un proyecto de programación, es necesario considerar si el framework que vas a usar te puede dar todas las funcionalidades necesarias para desarrollar tus requerimientos de software. A continuación, verás algunos elementos que debes considerar para tomar la mejor decisión.
Podemos considerar la elección de nuestro framework bajo ciertos factores extrernos e internos que nos pueden ofrecer una mejor idea.
1. Factores internos
Consideraremos como factores internos, todos aquellos que determinan la forma de programación de nuestro sistema de software. A continuación, los factores internos considerados son:
Factor | Descripción |
---|---|
El conocimiento o experiencia | ¿Has considerado cuanto manejas de frameworks o pruebas? ¿Del lenguaje de programación? O inclusive ¿de la orientación a objetos? |
La madurez del framework | ¿Tiene mantenimiento y actualizaciones constantes? ¿Suple las necesidades técnicas de forma rápida? |
Herramientas desarrolladas | No es tan imprescindible si tienes buena experiencia general, aquí consideraremos si: ¿existen buenos linters? ¿el IDE o editor facilidad de autocompletado? |
Gestor de dependencias | Es un activo sumamente valioso para considerar usar un framework o no. Si no cuentas con un gestor de dependencias que se integre a tu framework, la integración de dependencias puede significar grandes costos en tiempo y esfuerzo. |
Rapidez del lenguaje y entorno de ejecución | Si consideras que tu sitio web necesita una gran cantidad de procesamiento, este es un buen factor a considerar. Sin embargo, está por encima la funcionalidad y madurez que un lenguaje / framework puede ofrecerte sobre la rapidez. |
1. El conocimiento o experiencia
Sin duda alguna, este es el factor más importante de todos. El conocimiento o experiencia en herramientas, estilos, metodologías y técnicas, definen de forma de programación orientada a la mantenibilidad del mismo, define por completo si es necesario utilizar frameworks o no para construir tu sistema.
En la experiencia, cabe resaltar que los frameworks se rigen por modelos o patrones de desarrollo arquitectónicos para lograr desarrollos mantenibles y escalables a largo plazo. Si entiendes el modelo sobre el cual está construido, también entenderás mucho más el uso de los frameworks que lo ejecutan y que se diferencian tan solo en detalles de configuración y en el lenguaje o entorno de ejecución.
1. La madurez del framework
Es necesario verificar si el framework está constantemente mejorándose. Si es privativo, por lo general ofrecen más asesorías y soporte de lo que deseas hacer.
Si por el contrario, el framework es libre, debes considerar que el framework esté actualizandose constantemente y que escales sobre versiones Long-Term Support (LTS) de tu framework para ir a la par con los soportes y problemas que la comunidad entorno al framework pueda ofrecer.Por otro lado, algunos frameworks libres ofrecen también la posibilidad de pagar por consultorías de desarrollo.
1. Herramientas desarrolladas
Este no es un gran problema a considerar si estás usando frameworks privativos, puesto que el soporte de las herramientas suele ser muy activo, con tiempos de respuesta bastante cortos y de fácil resolución.
Por otro lado, si el framework es libre, debes considerar las herramientas que hay al redededor del framework, no solamente el framework en sí, tal como:
- Los linters: Son herramientas que ayudan a detectar code smell o código que, por lo general, corresponde a problemas graves en el sistema. Así mismo, nos ayuda a detectar buenas prácticas de programación.
- La documentación: Algunos frameworks no tienen una documentación adecuada para realizar lo que deseas hacer, para lo cual, es necesario empezar a depender de la comunidad entorno a la herramienta para verificar si ha desarrollado relacionado con la limitación que tienes.
- El IDE: Es la herramienta de mayor interacción para los desarrolladores, puede ofrecer herramientas bastante útiles, tal como: generación de constructores, de accesores y mutadores, de autocompletado de código, hasta inclusive, de gestor de dependencias y de entornos de ejecución de tu código. De nuevo, si tu framework es privativo, el IDE se encarga de automatizar muchas de estas cosas. Si por otra parte, tu framework es libre, es posible que no tengas estas herramientas, o que sean de difícil configuración. Sin embargo, esto no es imprescindible para lograr hacer lo que necesitas, pero puede ahorrar bastante tiempo. Te colocaré un ejemplo: tienes una lista de una clase cualquiera, y deseas agregar un objeto a esta lista, pero no sabes, en el lenguaje particular, como se realiza. Lo primero que se nos puede venir a la mente es escribir
.add
y dejar que el autocompletado muestre las alternativas y los parámetros necesarios para esta función, ahorrandonos tiempo en consultas sin interrumpir la idea del desarrollo que estás haciendo. - Validadores de tipado: Los lenguajes de desarrollo como python, javascript y php son de tipado dinámico, donde el intérprete o compilador deduce el tipo de dato dependiendo del valor asignado, lo que aumenta el tiempo de ejecución de los lenguajes. Para tener el código más organizado, existen validadores de tipado estático de código como mypy o declaraciones de tipos para forzar la validación de tipos en las funciones.
1. El gestor de dependencias
Es una de las variables más importantes para considerar en la elección de tu framework. El gestor de dependencias puede ser la elección más importante, puesto que tu sistema se verá acoplado en gran manera a esta herramienta. Y para esto colocaré varios ejemplos que ilustran la diferencia entre gestores de dependencias entre frameworks, o inclusive entre lenguajes:
En python por ejemplo, tenemos pip, que se limita a las siguientes acciones:
- Instalar la dependencia en tu entorno virtual
- Colocar las dependencias en un archivo donde cada dependencia tiene el formato
<dependencia>=<versión>
- Aprender los comandos necesarios de pip para instalar o actualizar dependencias automáticamente en tu entorno virtual.
En java la complejidad puede aumentar. Si utilizamos maven como herramienta de gestión de dependencias, esta se centra en el archivo pom.xml
cuya estructura cambia drásticamente en comparación con pip. La escritura de comandos en estructura xml hace que los comandos sean más amplios para configurar las dependencias.
En C++ tenemos cmake, donde existen diferentes formas de obtener las dependencias, las cuales son necesarias compilar primero. La forma de compilación define la forma de linkeo y la instalación del software entre muchos otros detalles a considerar ya que pueden afectar el rendimiento del sistema. Por lo que la gestión de dependencias en este lenguaje conlleva un gran tiempo en la configuración. Sin contar que en C, debemos contar con make exclusivamente, en donde, por lo general, el linkeo de dependencias se hace especificando compilados .o
y .a
1. Rapidez del lenguaje y entorno de ejecución
Lenguajes como Java o Python son lenguajes lentos en ejecución, sin embargo, proveen una gran funcionalidad o poder de expresividad para lograr las funcionalidades necesarias para desarrollar nuestro sistema. Por otra parte, lenguajes como javascript, php, c++ y c son lenguajes de ejecución rápida, unos más rápidos que otros. El caso de php ha sido interesante, hasta la versión 5, la ejecución ha sido lenta, sin embargo, la ejecución ha mejorado mucho respecto a la versión 7 en adelante.
Así mismo, es necesario conocer elementos como los entornos de ejecución y los requerimientos necesarios para correr tu aplicación. Verifica los entornos que requiere tu framework para correr, como nodejs, servidores como nginx, apache, jboss, wildfly entre otros. Dependiendo de las versiones de los entornos pueden aumentar considerablemente la ejecución de instrucciones y, en el contexto de los frameworks, si no son instrucciones muy complejas, puede que el framework no te permita ejecutar estad funciones rápidamente.
1. Factores externos
Ahora hablaremos sobre los factores externos al desarrollo de software usando frameworks. A continuación, veremos una tabla donde resumimos los factores internos
Factor | Descripción |
---|---|
El host | Si haces desarrollo web ¿el host te brinda la rapidez necesaria para soportar tu sistema? Si tu publico objetivo no está en tu país ¿tu publico tendrá una adecuada experiencia de uso de tu producto? ¿es host compartido o dedicado? ¿te permite hacer las configuraciones necesarias? |
Los recursos de tu equipo | En caso de ser otro tipo de aplicaciones que no necesitan host, evalúa los recursos con los que dispones en caso de ser necesario y si son compatibles con tu desarrollo y si el framework puede correr cómodamente. |
La curvatura de aprendizaje | Si estás iniciando en el mundo de la programación, la curvatura de aprendizaje puede ser un factor determinante para el desarrollo de tu proyecto. |
Rapidez de desarrollo | ¿Necesitas desarrollo rápido de aplicaciones, centrándote exclusivamente en el desarrollo de la lógica de negocio? ¿O tienes el tiempo suficiente para aprender desde cero cómo pueden funcionar los frameworks? |
1. El host
¿El host es importante para considerar un framework? ¿de que me estás hablando?
Sí, en efecto, las características del host pueden dificultar la ejecución de frameworks, sobretodo si utilizas aquellos que tengan funcionalidades tan amplias y maduras como springboot, y en java, el manejo de memoria ram no es un componente muy bien aprovechado que digamos.
Es posible que en tu pc corra tu sistema sin tener una ralentización notable por contar con pc y sistema operativo optimizados para desarrollo. Sin embargo, es posible que en tu host no te asignen los mismos recursos y características para subir tu desarrollo, por lo cual es recomendable considerar estos factores antes de usar un framework o no.
1. Los recursos de tu equipo
Está ligado a la subsección anterior. Pero esto es para desarrollos que no son necesarios configurar en un host como las aplicaciones de escritorio,
o videojuegos.
El uso de diversos frameworks para desarrollo de estas aplicaciones pueden significar retrasos significativos en el procesamiento. Por ejemplo, no es lo mismo utilizar gtk o wxWidgets las cuales son librerías clásicas de gestion de ventanas nativas de escritorio, que hacer uso de electron, el cual consume recursos de forma significativa. Por lo que es necesario hacer un análisis de las posibilidades que existen para desarrollar estas aplicaciones.
1. La curvatura de aprendizaje
Esto puede significar un factor considerable si apenas estás iniciando a explorar este mundo. Principalmente, esto se debe a la falta de aprendizaje de los conceptos básicos como el máximo aprovechamiento del paradigma que estás usando, sobretodo si es orientación a objetos para saber como aprovechar elementos como herencia, polimorfismo, sobrecarga de funciones, de operadores, funciones lambda entre otros.
Luego, es necesario entender como funcionan ciertos patrones de diseño y estilos arquitectónicos, tal como el estilo modelo-vista-controlador que es el más popular para construir frameworks de desarrollo web y para que tengas en claro a que se refieren los componentes que contienen estas herramientas.
1. La rapidez de desarrollo
En la rapidez del desarrollo influyen diversos factores que podríamos considerar para definir la velocidad de generación de funcionalidades. A continuación, incluimos algunos factores que influyen aparte de los mencionados anteriormente:
- El tipo de lenguaje: hay diferencias significativas entre los lenguajes de programación, entre ellos si son compilados o interpretados. Go es uno de estos lenguajes compilados, el cual requiere un tiempo para realizar la transformación de lenguaje de alto nivel en código binario con el objetivo de incrementar la velocidad de ejecución. Por otro lado, lenguajes como python, javascript y php son lenguajes interpretados, los cuales permiten realizar pruebas de manera más rápida, pero con una disminución en la velocidad de ejecución.
- La expresividad del lenguaje: Python por ejemplo es un lenguaje muy expresivo, permite hacer operaciones complejas como ciclos y callables en pocas lineas de desarrollo, cumpliendo las recomendaciones de la programación defensiva, y facilitando las pruebas unitarias en el desarrollo. Lenguajes como C++ con sus nuevos estándares junto con la librería Boost integrada en sus nuevos estándares, y java con sus nuevas versiones de las 7 hacia adelante, permiten mayor expresividad con funciones lambda e iteradores.
- El tipado del lenguaje: Lenguajes como python, javascript y php no tienen un tipado fuerte, o el mismo interprete deduce el tipo de dato de las variables asignadas, lo cual disminuye el tiempo de ejecución por asignar esta función al intérprete.
Estos detalles son esenciales al momento de considerar el uso de un framework, ya que definen si es posible desarrollar de manera rápida tus aplicaciones.
1. Conclusiones
Es necesario considerar muchos factores al momento de decidir si usar un framework o no. Los frameworks reutilizan patrones de diseño arquitecntonico de software para reducir la complegidad de desarrollo, haciendo que las empresas o personas se enfoquen exclusivamente en el desarrollo de la lógica de negocio necesaria.
En este post tratamos de explorar si es necesario utilizar un framework o no. Acerca de qué framework utilizar, es necesario inclusive considerar más elementos para tomar una decisión adecuada.
Si por otra parte, no estás interesado en profundizar en el dominio de un framework y quieres elaborar uno, haznos saberlo en los comentarios.
Si te gustó el contenido, y consideras aceptable el estar al tanto de las publicaciones, suscríbete a las redes sociales que administramos en el pie de página. Así también, si consideras que omitimos algo, o quieres que profundicemos en un tema específico, notifícanos en los comentarios.