A lo largo de esta charla vamos a mostrar cómo el uso de herramientas basadas en los conceptos más sólidos de la "ingenieria del software" pueden ayudarnos a aprovechar mejor el tiempo del que disponemos habitualmente a fin de alcanzar una mayor productividad. Es justo aclarar que todos los conceptos que desarrollaremos a lo largo de esta presentación, si bien están bien consolidados a través de varias horas de estudio e investigación, estarán enfocados prioritariamente en nuestras propias conclusiones, surgidas del uso cotidiano de estas tecnologías en proyectos concretos . En definitiva, al final de esta presentación tendrán una idea clara de aquellos conceptos y tecnologías que les ayudarán a convertirse en profesionales del software más productivos.
¡Atención a este concepto! El tiempo es el factor con mayor influencia en nuestras vidas como proveedores de tecnología informática. La gran realidad del mercado de hoy, es que TODO SE ENCUENTRA LIMITADO POR EL TIEMPO . Tiempo de desarrollo. Tiempo de respueta ante una falla. Tiempo de adaptación al cambio. Tiempo de implementación. Tiempo de capacitación. Cada una de estas variables afectan y determinan el éxito o el fracaso de un proyecto, exclusivamente ante los ojos del cliente . Lo interesante es que han surgido numerosas metodologías y tecnologías orientadas a aprovechar mejor el tiempo, muchas de estas las trataremos a lo largo de esta presentación.
¡Antes de continuar es preciso aclarar algunos conceptos! En este punto, hablar del crecimiento de Internet es prácticamente redundante. Es indispensable remarcar la tendencia del mercado a orientar sus requerimientos al terreno del desarrollo web. De hecho, la mayoría de los requerimientos de las empresas se están planteando como aplicaciones web. Sin embargo, se hace indispensable tener bien claro de qué hablamos cuando nos referimos a desarrollo web, y más precisamente a aplicación web.
Podemos definir a una aplicación web, como cualquier aplicación de software que accedida a través de internet, utilizando un browser como cliente. Y es en la definición de este concepto, donde encontramos las principales ventajas por las que este tipo de aplicaciones de software son tan requeridas hoy en dia:
1) Acceso Global : aprovechando Internet, una aplicación web puede ser accedida desde cualquier punto del planeta.
2) Bajos requerimientos de hardware : bajo esta arquitectura, cualquier PC que disponga de una conexión a Internet es potencialmente un puesto de trabajo.
3) Fácil de usar : dada las limitaciones de esta tecnología y el gran campo al que están destinadas, las aplicaciones web en general son muy fáciles de usar.
4) Mantenimiento : al encontrarse centralizada la aplicación en un servidor, su mantenimiento o actualización se hace más sencillo que el de una aplicación de escritorio. En este modelo no nos importa la cantidad de clientes que consuman la aplicación.
Seguridad : este tópico todavía sigue siendo la gran desventaja de este modelo. Dado que a pesar de la gran difusión de Internet, no ha desaparecido en la gente el tabú de la "inseguridad" de la red.
Esta tendencia se encuentra bien fundamentada en numerosos estudios estadísticos. Aunque si nos llevamos de Google Trends, es evidente que hoy el volúmen de búsquedas está volcado a favor de las aplicaciones web.
Ahora voy a comenzar a hablar de un conjunto de “mejoras prácticas” o “buenas prácticas!” que nos dieron resultado a la hora de desarrollar aplicaciones web. Son prácticas que marcan una diferencia cualitativa en el desarrollo de aplicaciones. Se puede trabajar sin usarlas? De hecho sí, pero nuestra vida cambió a la hora de empezar a hacerlo. Somos más felices, dormimos más tranquilos, somos menos propénsos a ataques de pánico y cosas así. Algunas de estas prácticas son nuevas, algunas tienen muchos años de trayectoria. En estos casos no estamos descubriendo ninguna nueva tecnología, simplemente aplicando técnicas probadas por mucho tiempo, que siempre dan buenos resultados.
Don’t Repeat Youself! Consiste simplemente en evitar las duplicaciones en las tareas que se realizan en un proyecto de software. Puede incluir actividades que van desde evitar el código duplicado a través de la eliminación de procedimientos o funciones repetidas, hasta la escritura de scripts que automaticen la realización de tareas repetidas. Es una filosofía que enfatiza que ningún tipo de información debe ser duplicada, ya que eso conduce a reducir la claridad y a problemas de inconsistencia. Es un concepto que surge del libro “El programador pragmático” [1], de Dave Thomas y Andy Hunt. Trata el tema de las mejores prácticas en el desarrollo de software. [1] http://www.pragmaticprogrammer.com/ppbook/extracts/rule_list.html
El Modelo-Vista-Controlador es un patrón que se usa en el desarrollo de software para separar las distintas areas de una aplicación. Consiste en separar los datos (el modelo) de la interfaz de usuario (la vista), para que los cambios en la interfaz no impliquen cambios en la forma en que se manejan los datos de la aplicación. El patrón MVC soluciona este problema introduciendo un intermediario entre los datos y la interfaz, el controlador. Veamos un esquema.
Cuando ingresa una petición a un servidor web, el controlador se encarga de “manejarla”, es decir, la descifra, determina la acción que tiene que realizar, obtiene los datos necesarios consultando al modelo, y luego realiza la presentación de los datos, comunicándoselos a la vista. En rails estos componentes del patrón tienen nombres específicos, ActionRecord, ActionView y ActionController.
El mapeo objeto-relacional es un técnica de programación para convertir datos entre sistemas incompatibles de datos, entre una base de datos relacional y un modelo de objetos. Podría decirse que se crea una base de datos orientada a objetos virtual que puede ser accedida desde el lenguaje de programación. La principal ventaja de esta técnica es que puede lograrse en muchos casos una independencia del motor de base de datos que está utilizando la aplicación. Al acceder a los datos como si fueran objetos, es posible hacer una abstracción y dejar de utilizar el SQL que normalmente se utiliza para acceder a la base de datos. Existen distintas implementaciones según el lenguaje que se esté utilizando. Por ejemplo, para Java, una de las más conocidas es Hibernate [1]. Para Rails tenemos ActionRecord, que utiliza un modelo denomado ActiveRecord [1], que mapea un registro de la base de datos, a una instancia de un objeto en el lenguaje de programación. [1] http://www.hibernate.org [2] http://en.wikipedia.org/wiki/Active_record_pattern
Este es un esquema de cómo se mapea un objeto a la base de datos. Una instancia de la clase Persona es equivalente a un registro en la tabla del mismo nombre.
El control de versiones consiste en el manejo de múltimes versiones de una misma unidad de información. Los cambios que se van realizando a un documento tienen asignado un código, por ejemplo, un número de versión y está asociado a la persona que hace el campo. Ejemplos de sistemas que utilizan control de versiones son GoogleDocs y la mayoría de los motores para Wikis.
Convención sobre configuración significa que el desarrollador solo tiene que especificar los aspectos no convencionales de su aplicación. Por ejemplo, si hay una clase Cliente en el modelo, la tabla correspondiente en la base de datos se llamará clientes por defecto. Solo si alguien se desvía de esta convención, como por ejemplo, como por ejemplo llamando a la tabla clientes_activos , entonces tendrá que escribir el código necesario para indicar que la tabla tiene un nombre particular.
Que es un framework? Un framework es un diseño reusable para un sistema de software. Generalmente es expresado como un conjuntos de clases abstractas y la forma en que sus instancias colaboran para un tipo específico de software. Generalmente los frameworks incluyen programas de soporte y bibliotecas de código para ser utilizados por los desarrolladores. Básicamente proveen un esqueleto sobre el cual construir nuestra aplicación. Como se diferencia de una “librería”
Las bibliotecas son un concepto más viejo, y son solamente una colección de clases y/o métodos utilitarios, que pueden ser llamados por nuestro código para obtener cierta funcionalidad. En cambio los frameworks, contienen principalmente llamadas a nuestro código, que permiten extender cierta funcionalidad que el framework provee por defecto.
“ tradicionales” es una apreciación nuestra a falta de un mejor nombre.
El punto principal que nos hace llamar a estos frameworks como frameworks ágiles es el hecho de que siempre utilizan Convención sobre configuración.
(in)signia lleva ya cuatro años en el mercado, y tenemos el honor de haber participado en más de 25 proyectos tecnológicos con algunas de las empresas más importantes del mercado regional. Desde hace ya un año y medio, decidimos estratégicamente dedicarnos exclusivamente al desarrollo de aplicaciones web. Actualmente contamos con un equipo compuesto por 2 diseñadores y 4 desarrolladores, quienes se encuentran avocados al desarrollo de 7 proyectos en curso.
Y la respuesta es simple. ( ...Alejados de la exclavitud y la explotación laboral por supuesto... ) Invertimos bastante tiempo en investigar y estudiar aquellas metodologías y tecnologías disponibles que nos permitan mantenernos a la altura de las cirscunstancias, en todo momento. Gracias a esta inversión en I+D, hoy podemos afirmar que contamos con la capacidad productiva más avanzada del mercado local . Al final fue todo una cuestión de elección. Pero ¿cuáles son las elecciones que tomó insignia?
Elegimos Subversion como Sistema de Control de Versiones. Actualmente contamos con un repositorio central online al que podemos acceder desde cualquier parte. De este modo, aseguramos que cualquier miembro de insignia pueda acceder a una copia de trabajo específica, trabajar sobre ella y confirmar los cambios, desde cualquier lugar donde este se encuentre.
Elegimos desarrollar aplicaciones basadas en los estándares propuestos para XHTML y CSS.
Principalmente, elegimos no atarnos a una plataforma en particular, ni para desarrollar ni para producción. Gracias a esta desición, hoy podemos afirmar que las aplicaciones que desarrollamos pueden correr perfectamente tanto en una plataforma de Microsoft, Mac o Linux. Con respecto al ambiente de desarrollo en si, lo levantamos en estas tres plataformas. Cada plataforma presenta su desafio a la hora de configurarla como un ambiente de desarrollo.
Con respecto al uso de un framework para el desarrollo de aplicaciones… De todas las alternativas que evaluamos, Ruby on Rails (… o simplemente Rails) fue la opción que más se ajustó a nuestros objetivos corporativos.
Simplemente, dejemos que Rails se revele a nosotros a través de su código…
Este es el código necesario para especificar un modelo en Rails. Por convención, el modelo “Empresa” se mapea directamente con una tabla llamada “empresas”. Para especificar las validaciones y las relaciones con otros modelos, Rails cuenta con DSL’s bastantes declarativos.
Una vez establecido el modelo, contamos con varios métodos para acceder los datos. Find es uno de ellos. Lo interesante que además contamos con métodos como “find_or_create_” que son generados dinámicamente. Capacidad que es únicamente posible de lograr (facilmente) sobre Ruby.
Asimismo, podemos acceder muy facilmente al contenido de un registro en particular.
Gracias a un plugin que construimos (luego ampliaremos este concepto). Este sería el codigo necesario para generar todo el soporte web dentro de un panel de administración para usuarios autenticados para la tabla “empresas”.
Este es el comando necesario para poner en producción una aplicación Rails.
La principal ventaja de Rails es que se trata de un framework open source. Es decir, no es necesario adquirir licencias para trabajar. Tiene la ventaja principal de reducir el costo. Si se tratara de una aplicación que hay que instalar en los servidores del cliente, habría que incurrir en los respectivos gastos de licencia. No solo el framework es open-source, sino que lo son también la mayoría de las aplicaciones que utilizamos para trabajar con Rails. * El lenguaje Ruby * Los entornos de desarrollo (Como RadRails y Aptana) * Los plugins para incorporar en los proyectos. http://wiki.rubyonrails.org/rails/pages/OpenSource
Una vez establecido el modelo, contamos con varios métodos para acceder los datos. Find es uno de ellos. Lo interesante que además contamos con métodos como “find_or_create_” que son generados dinámicamente. Capacidad que es únicamente posible de lograr (facilmente) sobre Ruby.