lunes, 28 de mayo de 2012

Arquitecturas SOA

¿Que es una arquitectura SOA?

Todos los componentes de la arqutectura son diseñados para ser usados como servicios

A partir de esta aproximación, podemos definir una aplicación como un conjunto de servicios interoperables

  • Es mas sencillo formar a los usuarios de los servicios cuando hay una nueva versión
  • Mas sencillo recuperarse de errores cometidos en el diseño, ya que los cambios importantes no se "ven" desde fuera, ya que la capa de servicio puede mantener la comptibilidad hacia atrás

Esto contrasta con los "silos" software que conforman los APIs internos (In-process)

Un ejemplo real y que toda la comunidad del software conoce es el de Amazon

Su CEO estableció las siguientes premisas a los equipos de desarrollo de la compañía : (traducción literal del email que envío el CEO a todos sus empleados de las divisiones de software)

1. " Todos los equipos a partir de ahora deben exponer sus datos y la funcionalidad a través de interfaces de servicio.
 
2.Los equipos deben comunicarse entre sí a través de estas interfaces.


3.No habrá otra forma de comunicación entre procesosno debe haber vinculación directa, ni lecturas directas del almacenamiento de datos de otro equipo (ejemplo, aplicación de backend leyendo de base de datos de front-end, por ejemplo) , no hay un modelo de memoria compartida, no hay puertas traseras de ningún tipo. La comunicación sólo se permite es a través de las llamadas de interfaz de servicio en la red.


4.No importa que tecnología (protocolo del API) se utilice. (SOAP, REST..)


5. Los interfaces del servicio , sin excepción, deben ser diseñados desde cero para ser externalizables. Es decir, el equipo debe planificar y diseñar para poder exponer la interfaz a los desarrolladores en el mundo exterior. No hay excepciones.


6. Cualquiera que no haga esto será despedido.


7.Gracias, ! y que tengas un buen día "!


¿ Consecuencias de esto? Amazon tiene uno de los sistemas mas abiertos de los existentes, donde se potencia la reusabilidad de las funcionalidades, aumentando la productividad de sus equipos.






viernes, 25 de mayo de 2012

SaaS

¿Que es SaaS?

Software tradicional: codigo binario que se instala y se ejecuta en el dispositivo cliente.

SaaS: entrega datos y sw como un servicio a través de internet vía un pequeño programa (ej, navegador) que ejecuta en el dispositivo cliente.

    Busquedas, Redes sociales, video...

Ahora existen versiones de software tradicional que tiene su versión SaaS :

    Ej: Microsoft Office 365

Motivos para SaaS

No es necesario preocuparse sobre si disponemos de la capacidad y potencia del HW, del SS.OO
No es necesario procuparse de perdidas de datos (backup)
Es mejor para trabajo en grupo, para comprtir datos.
Permite centralizar la gestión de grandes volúmenes de datos.
1 sola copia del Sw hace tener un entorno HW controlado.
1 copia del software, mejor para despliegues, actualizaciones.

Saas esta muy ligado a las metodologías Ágiles y los lenguajes de programación modernos.

Las actualizaciones frecuentes de Saas se integran bien con las iteraciones de ciclo de vida de las metodologías Ágiles

Hay muchos frameworks para Agile /Saas  (ej, Ruby On Rails )

Productividad en el desarrollo de software

Productividad en el desarrollo de software

Por: Ricardo Trujillo Rodriguez

¿Que podemos hacer para ser productivos en el desarollo de software?

Escribir código claro siendo concisos. Esto en algunos entornos se conoce com KISS (Keep It Simple Stupid!). Parece fácil, pero a muchos desarrolladores les cuesta hacer esto, complicando cada vez mas su código según va evolucionando este. Lo normal es que si no esta bien diseñado, sea muy dificil conseguir esta sencillez y claridad, obligándonos la mayoría de las veces a hacer un refactoring para devolver a ese software al camino de la claridad y la mantenibilidad.

El propio lenguaje de programación que hemos elegido para desarrollar nos puede ayudar o ser una gran barrera para conseguir nuestros objetivos en cuanto a  ser productivos. La mayoría de las veces no podemos elegir el lenguaje para el desarrollo, ya que nos es impuesto por diferentes motivos, pero si somos capaces de elegir, es neceario acudir a lenguajes de 4ª generación o a los nuevos lenguajes de desarrollo muy productivos, como pueden ser Ruby  o Groovy. Si a estos lenguajes les unimos los frameworks de desarrollo que se han creado basándose en ellos (Ruby On Rails , Grails) , nuestro rendimiento como desarrolladores mejorará muchísimo.

    Sintaxis más corta y sencilla de leer. No es lo mismo escribir:

                    assert_greater_than_or_equal_to(a,7)
    que
                     a.should be ≥ 7

    Aumentar el nivel de abstracción.

        Utilizar lenguajes con un nivel de abstracción alto.

        Gestión automática de la memoria (Garbage Collector de Java vs C).

Sintesis.

    Metaprogramación: La metaprogramación consiste en escribir programas que escriben o manipulan otros programas (o a sí mismos) como datos, o que hacen en tiempo de compilación parte del trabajo que, de otra forma, se haría en tiempo de ejecución. Esto permite al programador ahorrar tiempo en la producción de código. (ver Metaprogramación Wikipedia)

   

Reutilización.
    Reutilizar codigo antiguo vs escribir nuevo codigo.
    Refactorizar codigo antiguo para poder ser reutilizado.
        Metodos, Objetos, librerías , design patterns, frameworks.


Automatización y herramientas.

    Automatizar al áximo tareas repetitivas (generar versión, hacer tests). Para ello las herramientas de  integración contínua ayudan y mucho.
    Utilizar herramientas nuevas, hacer selección en función de su independencia, calidad de la UI. Tenemos un ejemplo bueno con el Visual Studio 2013. Eclipse tambien introduce mejoras en este sentido, generador de codigo.La calidad de un editor y sus herramientas, nos pueden ayudar mucho a mejorar nuestra productividad a la hora de escribir líneas de código.
    Un buen desarrollador Sw debe cotinuamentre aprender a utilizar nuevas herramientas de desarrollo para ser productivo.


DRY
    No repetir codigo.
    No hacer copy / paste.
    
¿ Que lenguaje puede reunir todo este compendio de requisitos que buscamos para ser productivos en nuestro trabajo?:

Ejemplo: Ruby, un lenguaje de scripting moderno, orientado a objetos, funcional, con gestión automatica de la memoria, tipos diniamicos, reutilización vía mix-ins y sintesis por medio de la metaprogramación.