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.
febrero 02, 2010
Video de mi VAN sobre Automatización
enero 07, 2010
MVP otra vez
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.
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.
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.
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.
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:
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…”
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)
octubre 16, 2009
Virtual ALT.NET sobre Lenguajes
Tarde pero seguro, comparto (al menos) los slides de mi presentación sobre lenguajes de programación en la VAN de Alt.NET Hispano el 2 de octubre pasado.
La reunión se grabó, así que en cuanto esté disponible el video espero compartirlo aquí mismo.
octubre 09, 2009
En Agiles 2009, Florianopolis, Brasil
Desde ayer estoy en Florianopolis, bajo un cielo nublado y un clima bastante frío, ideal para no distraerse de la conferencia.
La organización a cargo del amigo Samuel Crescêncio, es impecable, y las sesiones hasta ya cerca del final, muy buenas.
La foto es del enorme auditorio central, y me acompañan mis compañeros de Southworks, Nico Páez (centro) y Ariel “Shaggy” Schapiro (derecha).
Aquí se puede ver el programa desplegado en la entrada (resaltadas en rojo nuestras charlas).
A mi me tocó el primer día, tras la presentación del comité organizador y una excelente Keynote de Brian Marick. En la misma sala, antes de mi sesión hubo una muy interesante de Francisco Trindade de ThoughWorks, que planteaba si Agile estaba convirtiéndose en el nuevo Waterfall, y fue un buen pie para mi tema.
Básicamente me centré en nuestra experiencia en llegar a un nivel de adopción muy alto de los principios y prácticas ágiles, y cómo para seguir mejorando volvimos a profundizar en las prácticas más “duras” como CMMi, PSP, TSP y en conceptos provenientes de la Teoría de Sistemas Complejos.
Ya trataré de plasmar el contenido en un próximo post, con más tiempo, siguiendo los preceptos del Maestro.
Ayer cerramos el día con otra keynote muy interesante de Roy Singham, presidente de ThoughtWorks, que –en mi opinión- decayó un poco en la segunda mitad cuando se tornó en reclutamiento explícito, acompañando el anuncio público de que están abriendo oficinas en Brasil. La primera parte, de todos modos, fue muy buena, y como se grabó en video, espero que pronto esté disponible.
Hoy el día arrancó con el Workshop de estimación de Nico, que salió muy bueno, y sobre el que ya pueden leer en su blog en español.
Al terminar, estuve un rato en otra sesión muy buena de Joshua Kerievsky (famoso por el libro Refactoring to Patterns), de Industrial Logic, quien hizo un paralelo muy bueno entre Arte y Desarrollo.
No pude ver toda la presentación porque me fui a hacer de cameraman en la charla de Shaggy sobre “Agile PMO”, ese bicho extraño que creó dentro de Southworks. :)
La verdad es que salió muy bien, y contó todo el proceso con el que se generar el Health Check semanal de proyectos en nuestra organización, que produce muchísima información útil para todos con un esfuerzo mínimo de parte de cada equipo.
Seguramente estaremos subiendo pronto los videos de las charlas, y me comprometo a compartirlos en este mismo espacio.

