mayo 14, 2010

Presentando Southworks Professional Improvement Program

Muchos de ustedes ya habrán leído sobre el proyecto Hogwarts en el blog del Maestro.

La motivación de este proyecto es aportar a la comunidad las prácticas de desarrollo de software que creemos fundamentales en Southworks,  y que consistentemente vemos ignoradas o utilizadas parcialmente.

Pruebas Unitarias

Esto cubre un abanico de metodologías, técnicas y espacios conceptuales bastante amplio, dentro de los cuales arrancamos con un primer curso cubriendo estos temas:

 

  • Test-Driven Development
  • Inversión de Control e Inyección de Dependencias
  • Mocking
  • Principios SOLID
  • Ejercicios generales utilizando todas la técnicas

Para cada uno de estos temas tenemos un conjunto de presentaciones, material de soporte para el instructor, proyectos de ejemplo con complejidad creciente y ejercicios de distinta dificultad incluyendo algunas soluciones de referencia.

También tenemos prevista la evaluación posterior a cada curso sobre los resultados de los ejercicios y una serie de preguntas para verificar los conceptos teóricos.

 

Nuestro plan inicial se enfocaba principalmente en generar todo este contenido para ejecutar clases presenciales, pero siempre pensamos en compartir en línea una buena parte para llegar a personas interesadas que no podemos alcanzar físicamente.

Sin embargo, la recepción que ha tenido lo que publicó Angel hasta ahora (por ejemplo el primer y segundo videos), nos impulsó a acelerar el avance de la faceta en línea del proyecto. El resultado es que estamos muy cerca de abrir a la comunidad el proyecto, basado en la plataforma de entrenamiento Moodle, funcionando por supuesto desde nuestra infraestructura en la nube.

Por supuesto, no descuidaremos la interacción cara a cara. La diferencia es que las sesiones presenciales serán complementarias al contenido en línea, para despejar dudas y realizar prácticas en conjunto. Y obviamente no sólo estarán a cargo y cerca nuestro. Esperamos que diversos grupos puedan replicarlas en forma local.

Interesados: permanecer atentos a este blog y el de Angel. La semana próxima deberíamos estar publicando el sitio final del proyecto. Hogwarts es el nombre de código del proyecto (otra práctica recomendable), pero el nombre oficial, que estamos presentando en sociedad es el del título:

Southworks Professional Improvement Program

 

mayo 12, 2010

CloudCamp Buenos Aires

El 7 de mayo, la semana pasada, tuvimos la oportunidad de presentar en nuestras oficinas de Southworks el primer CloudCamp en Buenos Aires.

Asistentes a l CloudCamp

El evento salió muy bien, desde mi punto de vista y por el feedback de la gente, y esperamos compartir muy pronto algunos videos grabados durante el evento.

Dave Nielsen en la apertura

Tuvimos la presencia de uno de los fundadores del CloudCamp, Dave Nielsen.

Dave realizó la apertura del evento, explicando la estructura y la mecánica del evento, que contó con presentaciones relámpago (de 5 minutos) de cada uno de los sponsors: Microsoft, Southworks y Globant.

Luego de estas presentaciones pasamos al Unpanel (un anti-panel), con expertos que se propusieron como voluntarios en el momento mismo y contestaron a las preguntas de los asistentes.

IMG_9504.JPG

El trío de expertos quedó conformado por:

A ellos se sumó parcialmente Dave en algunas respuestas del público, y de muchas de las preguntas se perfilaron los temas para las sesiones de los Open Spaces posteriores, a las que se sumaron algunas propuestas que el público votó en el momento.

Los temas que quedaron fueron:

  • Private clouds
  • Migrando aplicaciones a Windows Azure
  • NoSQL (y otros patrones de acceso a datos)
  • Seguridad en la nube
  • Google App Engine

En la foto aparecemos quienes quedamos a cargo de los temas, aunque en general se trató de discusiones participativas. De izquierda a derecha, Beto Ortega (Southworks), Scott Densmore (Microsoft), Fabio Maulo (NHibernate), yo (Southworks) y Pablo Francavilla (GetSense).

IMG_9513.JPG

Quiero agradecer especialmente a Julián Scopinaro por su trabajo impecable coordinando todas la actividades necesarias para que el evento haya salido perfecto, a Mariano "Pocho" Szklanny por sus fotos (las de este post son apenas una muestra), y a nuestro cameraman exclusivo, Guido Maliandi, quien capturó en video la mayor parte del evento, para que pronto podamos compartirlo con el resto del mundo.

 

febrero 02, 2010

Video de mi VAN sobre Automatización

Gracias nuevamente a los amigos de Alt.NET Hispano, y sobre todo a Fernando Claverino, quien se tomó el trabajo de redactar el resumen disponible en la Wiki del grupo, si quieren ahorrar una hora y media, que es lo que dura el video.

enero 07, 2010

MVP otra vez

Microsoft Most Valuable Professional

Ya se me hizo costumbre, como sucede desde 2002, empezar el año con el mensaje de felicitación anunciando el premio MVP.

Como siempre, la sensación es de cierto orgullo y un poco de perplejidad porque no me parece que mi contribución sea tan grande, sobre todo comparándola con la de otros MVP alrededor del mundo a los que admiro.

Pero en fin, sigo en la musical categoría de C#, supongo que porque es el paraguas en el que agrupan a quienes estamos alrededor de otros lenguajes que no tienen aún su propia categoría (tal vez por ser aún más proyectos que productos completos).

Como todos los años, espero dedicarme principalmente a aprender más sobre otro lenguaje. La década pasada la dediqué con mayor o menor profundidad a Eiffel, C# mismo, ML, Boo (poco), Python (después de años de mis primeros contactos), el 2009 me concentré en F#, y este pienso dedicarlo seriamente a Ruby.

La decisión tiene que ver con dos hechos principales: uno es tener cerca un fanático de Ruby como Johnny Halife, y por otro lado el hecho de que la implementación de Ruby en .NET, IronRuby, haya llegado al RC1 (primer Release Candidate, lo que significa que está muy cerca de la versión final).

Por esto, sería de esperar (y aquí tomo un compromiso personal que espero poder cumplir) que este año publique unos cuantos post y de algunas charlas sobre Ruby (la versión multiplataforma, basada en C) y sobre IronRuby (la versión basada en el DLR), y la interoperabilidad entre ambas.

diciembre 20, 2009

Un día nublado en Rosario

Bueno, el 4 de diciembre estaba realmente soleado, pero el tema del que fuimos a hablar con Johnny Halife a la UTN de Rosario fue Cloud Computing. Me tomó un tiempo escribir este post, pero ahí va.

Johnny tratando de no dormirse mientras yo hablo.

Salimos de Buenos Aires a las 3:30 AM, y llegamos a Rosario cerca de las 7:30 para desayunar frente a la UTN (Universidad Tecnológica Nacional) con Andrés Joaquín, nuestro anfitrión y organizador de esta serie de reuniones sobre arquitectura de software.

Nos gustó mucho el nivel del público, profesionales realmente experimentados (más allá del título o no de “arquitecto”) provenientes de diferentes ámbitos laborales y plataformas tecnológicas (aclaro que la UTN proporciona el lugar pero la gente viene de todos lados).

Por cuestiones históricas, empezamos por Amazon Web Services, cubriendo brevemente sus servicios y mostrando un poco cómo es el proceso de provisioning de máquinas virtuales en EC2.

Descripción de los servicios de Amazon.

No voy a contar todo el contenido de más de dos horas de charla en este post, pero tal vez en otros sucesivos deje constancia de lo principal, siguiendo el modelo de madurez “don’t be a canuto”.

En general, contamos que Amazon provee un servicio de almacenamiento conocido como S3 (Simple Storage Service), otro de máquinas virtuales a demanda llamado EC2 (Elastic Compute Cloud), y para conectar las aplicaciones entre las diferentes máquinas, un servicio de colas (Simple Queue Service).

Iniciar una máquina virtual en Amazon es sencillo. Una vez que abrimos una cuenta (via tarjeta de crédito) y obtuvimos un Access Key ID, podemos acceder a un panel web donde seleccionar una imagen preconstruida (hay diversas versiones de Unix/Linux, Windows y Windows+SQL Server), indicar la cantidad de instancias y encenderlas, sin importar si es una sola o cientos, en segundos estará disponible nuestra infraestructura. El costo se calcula por hora de procesamiento, tráfico externo (no entre máquinas), o espacio de almacenamiento, pero realmente es muy económico comparado con el costo de comprar, administrar y operar hardware en nuestras propias instalaciones.

Luego de cubrir bastante los Servicios de Amazon, cambiamos a Windows Azure, la flamante estrategia de Cloud Computing de Microsoft.

Como comparación, digamos que si Amazon nos brinda algo completamente flexible (acceso prácticamente completo al ambiente virtualizado), lo que a su vez nos exige bastante conocimiento de infraestructura para lograr aplicacions escalables, Azure nos provee una abstracción mucho mayor, donde no tenemos en principio tanto control, pero en cambio el paradigma de programación permite construir aplicaciones escalables de manera sencilla y familiar para cualquier desarrollador experimentado en .NET.

En lugar de “maquinas virtuales”, Azure nos permite levantar instancias de “roles”, sobre los que desplegamos aplicaciones construidas utilizando Visual Studio.

azure-fabric-infographic_lg[1]

Hay dos roles principales en ese sentido, que son los Web Roles, conteniendo aplicaciones ASP.NET (pueden ser Webforms ó MVC) ó Worker Roles, que son básicamente procesos puros.

La clave para construir aplicaciones escalables es seguir los principios fundamentales que ya deberíamos seguir: que los procesos estén bien separados de la presentación. De esta forma podemos ir aumentando la cantidad de instancias de los roles de presentación o proceso en forma independiente, para cubrir la demanda en cada momento.

Windows Azure provee además un servicio de almacenamiento de Blobs (imagenes, archivos, video, etc), uno de tablas no relacionales (el modelo estándar para escalar bien en la web con datos no excesivamente estructurados) y por supuesto, un mecanismo de colas por el que se comunican los roles.

Como un complemento a Windows Azure, Microsoft agregó SQL Azure, que es lo que la comunidad reclamó tempranamente: soporte para bases de datos relacionales; básicamente SQL Server en la nube.

Al finalizar nuestras dos sesiones, Pablo Francavilla y Juan Pablo Picasso de GetSense, describieron Google App Engine, la alternativa de Google para la nube.

Screen shot 2009-12-21 at 11.02.43 AM

Este servicio es más similar a Azure que a Amazon en el sentido en que no hay control alguno ni referencias a la infraestructura real, sino un conjunto de APIs para dos lenguajes principales: Python y Java. Hay posibilidad de ejecutar algunos otros lenguajes que corren sobre la máquina virtual de Java, como Scala o Groovy, pero no es el foco del servicio.

Algunas conclusiones que expusimos en conjunto al final de la jornada:

  • Ninguno de los tres modelos es mejor. Cada uno tiene sus ventajas y limitaciones.
  • Mientras que Amazon es el más cercano a la infraestructura real, Azure y App Engine pueden ser más productivos para producir aplicaciones si uno ya tiene experiencia en .NET, Java o Python.
  • Es totalmente factible utilizar más de uno de estos servicios en varios contextos, y de hecho en nuestro caso, lo hacemos con frecuencia.
  • Esta tecnología no está lejos de nuestra realidad. De hecho, con los costos mayores de hardware que solemos tener en América Latina al sumar transporte y derechos aduaneros, este tipo de servicio en donde se paga por lo que se usa, y facilita escalar, es una gran ayuda, sobre todo para nuevas iniciativas.

noviembre 11, 2009

Video de la Virtual Alt.NET: Explosión de Lenguajes

La buena gente de Alt.NET Hispano ya ha publicado el video de la reunión de la vez pasada.

Gracias Jorge Gamba, José Romaniello y el resto del equipo. Aquí dejo el video disponible:

Explosión de Lenguajes

Como siempre, gracias a los compañeros del grupo que ponen su tiempo para organizar estos encuentros y facilitar su publicación.

noviembre 09, 2009

Antipatrones: “No tengo tiempo…”

Astronomical Clock by simpologist.Desde hace muchos años (no quiero ni ponerme a contar cuántos) participo en muchas listas de correo dedicadas a distintas ramas del desarrollo de software y temas relacionados.

A lo largo de todos estos años, leí muchísimas veces a alguien lamentándose de no tener tiempo para mantenerse al día con algún tema o para dedicar a otras actividades de mejora profesional (también lo he escuchado en muchas conversaciones).

No puedo comprender estos comentarios: "más cuándo uno es padre, no tenemos tiempo para ver lo último o la tendencia tecnológica", respuesta de un amigo, en una de estas listas, al comentario de otro colega comentando su falta de tiempo.

Como contesté a la lista, soy padre desde hace 13 años, y desde hace 8, padre de dos mujercitas. Pero no por eso  dejé de estar relativamente al día respecto a las tendencias tecnológicas. Y no tengo nada de especial, salvo las ganas y la pasión por lo que hago, por eso no compro el argumento de la falta de tiempo. Muchos de los lectores de este blog me conocen personalmente y hasta han trabajado conmigo. Todos saben que estamos en igualdad de condiciones en la mayor parte de las cosas. No tengo formación académica en sistemas. Aprendí todo trabajando, desde mis inicios haciendo aplicaciones para empresas minúsculas.

Me preocupa la excusa de "no tengo tiempo" porque es un antipatrón que veo recurrentemente en nuestra industria. Muchas veces no tenemos tiempo para:

  • refactorizar el código
  • escribir los tests
  • automatizar los procesos
  • aumentar nuestra caja de herramientas
  • capacitarnos
  • leer y estudiar sobre nuevas tecnologías (no digo últimas, sino nuevas para nosotros)

El problema es que no tenemos tiempo porque:

  • mantener nuestro código es complejo
  • cuando tocamos algo se rompe en otro lado
  • tenemos que hacer un montón de tareas largas y tediosas
  • tenemos que hacer cosas que nos huele que podríamos hacer más eficientemente
  • alguien nos pidió algo que no sabemos cómo hacer y tenemos que probar y probar
  • necesitamos resolver algo y tenemos que construir montones de cosas desde cero

Si miran ambas listas, verán que las cosas que no hacemos corresponden una por una con las cosas que nos quitan tiempo.

Elegimos una profesión que está basada en nuestra capacidad intelectual, y por tanto, necesitamos ejercitarla y mejorarla constantemente. No es una carrera donde podamos destacarnos (y en muchos casos, ni siquiera mantenernos) sin un ajuste periódico. Por supuesto, cada uno tiene su realidad, sus necesidades y entusiasmo, pero no podemos dejar de invertir una parte considerable de nuestro esfuerzo en mantenernos al día.

Como decía un conocido el otro día: “¿dejarías que te opere un médico que hace años que no hace ningún curso de actualización?” Y eso que la medicina tiene un ritmo bastante más lento de cambio.

Espero que se entienda esto como lo que es: un intento sincero de alentar a todos a darle para adelante y crecer como profesionales. Obviamente requiere esfuerzo, pero me parece que vale la pena en una industria donde es obvio que la innovación y la mejora hacen la diferencia.

Les dejo como adicional este antiquísimo artículo de Peter Norvig (es del 2001):

Aprende a programar en diez años (versión en español de Carlos Rueda)

Teach yourself programming in Ten Years (original en inglés)