martes, 30 de octubre de 2012

Frameworks (Teoria)

Los Frameworks suelen definirse como "Marcos de Trabajo", esta seria la definición prácticamente literal de la palabra Framework. De todas formas si bien a alguno que se encuentra en el tema de la informática,puede llegar a brindarle alguna pista con respecto a lo que en realidad son, al común denominador de la gente la definición "Marco de Trabajo" nada le dice. 

Para que todos lo entendamos, podemos decir que un Framework, no es ni mas ni menos que un programa al cual le faltan porciones que nosotros podemos completarlas para conseguir algun objetivo particular.

Alguna definiciones un poco mas formales que pueden encontrarse en la web son:

________

"En lo que respecta al desarrollo de software, un Framework suele verse como una estructura de soporte bien definida, en la cual otro proyecto software puede ser organizado y desarrollado."
________

“Un framework se puede considerar como una aplicación genérica incompleta y configurable a la que podemos añadirle las últimas piezas para construir una aplicación concreta. Los objetivos principales que persigue un framework son: acelerar el proceso de desarrollo, reutilizar código ya existente y promover buenas prácticas de desarrollo como el uso de patrones.”

La experiencia nos dice que siempre que vamos a desarrollar una aplicación informática, tendemos a normalizar y estructurar los datos de forma tal que podamos modelarlos, para hacer mas sencillo el almacenamiento y la recuperación de estos. Por lo general esa información estructurada suele convertirse en modelos que luego terminan siendo la Base de Datos del sistema que estamos desarrollando. Sin embargo, cuando de estructurar los archivos propios de cada desarrollador se trata, entramos en una zona en la cual nada esta claro y todo queda librado al azar y a las buenas practicas del propio desarrollador. La estructura de directorios, los nombres y estructura de los códigos fuentes, y los nombres y estructuras de los archivos de configuración, son algunas de las cosas que quedan a la "buenas de dios", cuando comenzamos un desarrollo. 
En la mayoría de los casos, cuando se comienza un desarrollo, se suele pensar que luego de haber definido las herramientas (lenguaje de programación, y motor de base de datos), ya tenemos casi todo resuelto, pero esto esta muy alejado de la realidad; En ese momento es justamente donde aparece toda esa incertidumbre producida por la falta de normalizacion y de estructuración de los componentes propios del desarrollo. 
Para solventar esta problemática es que existen los frameworks, ya que los mismos nos brindan una estructura ya probada y satisfactoria para resolver problemas de cierto dominio concreto. 

Los objetivos principales que persiguen los Frameworks son: 

  1. Acelerar el proceso de desarrollo.
  2. Fomentar la reutilizacion de código, y promover buenas practicas de programación, como el uso de patrones. 
Digamos que ambos objetivos están bastante relacionados, ya que el proceso de desarrollo se acelera debido a que mediante la utilización de un framework, se suele tener mucha de la programación de bajo nivel resuelta, por lo cual podemos centrarnos en programar la lógica propia del desarrollo particular que estamos llevando a cabo. 
Habitualmente los frameworks están intrínsecamente relacionados con un lenguaje de programación, ya que de esta forma es que consiguen mayor potencial. Por lo general los frameworks que no están desarrollados para un lenguaje de programación en particular, suelen resolver cuestiones mucho mas sencillas y básicas que aquellos que si lo están. 

La utilización de un framework tiene como ventajas:
  1. Velocidad de desarrollo: 
  2. Código optimizado
  3. Reducción de costos
  4. Estadarizacion y Convención en el código
También trae consigo algunas desventajas como pueden ser:
  1. Tiempo de aprendizaje
  2. Dependencia
  3. Falsa sensación de conocer el lenguaje
Las ventajas "velocidad de desarrollo" y "reducción de costo", van un poco de la mano, ya que al mejorar la velocidad de desarrollo gracias a la reutilizacion de código, se puede reducir la cantidad de trabajo, lo que reduce el tiempo y que es lo que en definitiva disminuye los costos. 
La ventaja de código optimizado esta dada mas que nada por la comunidad que da soporte al framework, sobre todo en frameworks grandes como puede ser por ejemplo "Symphony" o "Django", las comunidades que están detrás de estos desarrollos son enormes, por lo cual permanentemente se les van haciendo actualizaciones y mejoras.
Estadarizacion y Convención en el código, si bien son dos cualidades que pueden conseguirse sin la necesidad de utilizar un framework, podemos decir que la utilización de uno, nos obliga en cierto punto a seguir algunos lineamientos a la hora de desarrollar, lo que produce que cualquiera que conozca el framework y tome nuestro desarrollo, ya sea para hacerle mantenimiento o para ampliarlo, lo comprenda. 

De todas formas no todo es color de rosas en el mundo de los frameworks. Sobre todo en frameworks grandes y complejos, la curva de aprendizaje suele ser bastante empinada, lo cual es un tema a tener en cuenta a la hora de estimar tiempos de desarrollo. Cuando utilizamos un framework, normalmente en la jerga de la informática se dice que "Nos estamos casando con él", ya que una vez que comenzamos el desarrollo, es muy difícil migrarlo a otro framework sin tener que cambiar TODO el código escrito. Por ultimo y a la desventaja final que dice "Falsa sensación de conocer el lenguaje", a lo que me refiero es a que muchas veces se cree que por utilizar un framework, conocemos el lenguaje para el cual están desarrollado. Un ejemplo típico es cuando utilizamos por ejemplo JQuery, muchas veces creemos que por utilizar jQuery sabemos programar con JavaScript, pero esto no es asi... Como nota personal y por mi experiencia siempre aconsejo aprender a manejar el lenguaje de programación, antes de usar un framework complejo. 

Por ultimo algunas cositas que me gustaría comentar son:

Muchas veces se confunde lo que son los frameworks con las librerías o bibliotecas de un lenguaje. 
La diferencia fundamental entre los Frameworks y las librerías o bibliotecas es que cuando utilizamos las bibliotecas lo que estamos reutilizando es código, en cambio cuando utilizamos un framework, reutilizamos la arquitectura.

También he leído en la web que cuando alguien dice que esta utilizando su propio framework en realidad esta haciendo mal el trabajo. Según mi experiencia y esto es una apreciación personal, una persona, tranquilamente puede desarrollar su propio framework, para algún dominio concreto en el cual se encuentre suficientemente capacitado. Yo creo que los pasos para desarrollar un framework serian:

  1. Tener bastante experiencia en desarrollos de un dominio concreto, y haber encontrado alguna manera de desarrollarlos que te ha dado éxito en todos los casos. 
  2. Definir el dominio especifico. 
  3. Definir el lenguaje a utilizar. 
  4. Definir cuales son los pasos genéricos que realizamos cada vez que comenzamos un desarrollo del dominio especifico. 
  5. Ver si se pueden sistematizar dichos pasos genéricos. 
  6. Sistematizarlos.
En una próxima publicación pondré un ejemplo de un framwork que estuve haciendo en estos días, que se adapta perfectamente para la programación de aplicaciones pequeñas, con interfaz gráfica y Base de Datos. 
El framework es para Python, tiene como ORM sqlalchemy, motor de base de datos SQLite y la parte gráfica hecha con PyQT. Con esas cuatro herramientas, podemos hacer programas bastante complejos y en pocos minutos utilizando mi framework. 

Saludos y nos vemos en la proxima. 

2 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. mmm con lo de "Falsa sensación de conocer el lenguaje" me siento tocado, igual puedo agregar algo al respecto con esto. En general recomiendo si se tiene que elegir un framework se elija uno Open Source, así de esta manera cuando tienes alguna duda de como hace para resolver algo podes ver su código, de esta manera no solo aprendes a usar este, sino también así se aprenden a usar mejor el lenguaje, se adquiere bunas practicas y cosas interesantes, como por ejemplo “introspección”, que se usa mucho en el desarrollo de framework. En general hay muchas horas metidas en los desarrollos de estos y por desarrolladores muy grosos, y esta bueno aprovechar el software libre y en lo posible colaborar siempre que se pueda.

    ResponderEliminar