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)

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.

Explosión de Lenguajes
View more presentations from msalias.

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.

El trío southy en Agiles 2009

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).

Southies talks

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.

septiembre 07, 2009

PyCon Argentina 2009

/common/2009/website/img/banners/PyConAR-2009-badge.png

Este fin de semana estuve participando en esta formidable conferencia.

Organizada a pulmón por la gente de la comunidad Python, el evento fue una muestra más de lo que se puede hacer sin mucho más que ganas y pasión. Me hizo acordar mucho a las jornadas Agiles 2008 en ese sentido, e incluso ellos lograron algo más prolijo en varios sentidos.

Como era de esperar, mi charla dentro de este evento estuvo centrada una vez más en IronPython, esta vez acompañado por mi joven amigo Johnny Halife.

Picture 1 Esta vez, a diferencia que las otras decenas de veces que hablé sobre este tema, el público conocía mucho más de Python, aunque para mi sorpresa cuando pregunté quien conocía y quien trabajaba en .NET, muchas manos se levantaron en la sala.

Lo primero que hicimos, y creo que llamó la atención, fue una breve demo mostrando TryPython.org, el sitio que Michael Foord está desarrollando iterativamente como un tutorial de Python ejercitable en línea. Lo interesante de la demo era el escenario completo que demuestra:

El tutorial incluye el texto tradicional que explica las características de lenguaje en la mitad izquierda de la página, y una consola interactiva donde pueden probarse los ejemplos a la derecha.

Esta consola no es algo pasivo que se transmite para su ejecución en el servidor. Corre por completo dentro del browser, aprovechando el runtime de Silverlight, es decir que ejecuta código Python, pero no usando el runtime clásico, basado en C, sino el CoreCLR, que es la implementación de .NET dentro del plugin alojado en el browser. De nuevo, no usa un runtime de .NET instalado en la máquina, sino el que está en Silverlight (una parte menor de los 4.6 MB que ocupa el plugin).

Para mostrar qué tan lejos estamos de una solución limitada y propietaria, el browser era FireFox, no IE. Pero más aún, como demostración tajante de que no teníamos .NET corriendo debajo, el sistema operativo no era Windows, sino Mac OS X.

Con esta brevísima demo creo que logramos enganchar a la audiencia, y después volvimos un rato a las explicaciones: qué son y cómo funcionan .NET y Silverlight, la historia de Jim Hugunin implementando Python sobre .NET (después de su éxito con Jython, que es Pythin sobre la JVM) para probar que el CLR era una pobre plataforma para lenguajes dinámicos, y descubriendo en el proceso que no era cierto. Cómo Jim fue transmigrado a Microsoft para terminar y extender IronPython y luego factorizar desde éste el Dynamic Language Runtime (DLR), sobre el que están implementados también IronRuby, IronScheme y otros lenguajes de este estilo.

Contamos que IronPython incluye todas las librerías estándar de Python, y el proyecto IronClad está agregando soporte para usar las extensiones en C directamente desde el runtime.

Finalmente hablamos un poco sobre los usos y mostramos una serie de demos cortas como la DlrConsole, que es también una consola que interpreta Python dentro del browser, pero además permite cambiar sobre la marcha entre Python y Ruby, viendo las variables declaradas en un lenguaje desde el otro, etc.

Otro ejemplo muy impactante para mi fue el de Gestalt, un proyecto reciente que permite agregar scrit embebido en el HMTL de una página pero escribiendo el código en Python o Ruby, en lugar de Javascript. Obviamente, requiere Silverlight instalado porque usa el runtime, pero es muy prometedor.

Disfruté mucho la interacción y las demás sesiones, especialmente una sobre interacción con dispositivos MIDI dada por Anthony Lenton (full cordobés a pesar del nombre). Excelente y original.

Gracias a Ezequiel Gutesman que me invitó cuando empezaba la organización. Espero tomar más contacto con la comunidad Python local a partir de esta experiencia.

julio 11, 2009

Caminando sobre las nubes

Cloud

En mi último post comenté que estoy tratando de mantener todo lo que puedo de mi actividad en “cloud services”, o servicios hosteados por terceros.

Toda la industria está moviendose hacia este paradigma y por ahora los frenos principales tienen que ver con temas de confidencialidad o privacidad, disponibilidad (sobre todo al estar offline), y garantías de permanencia del servicio.

Pero veamos algunos de los servicios que uso y que hasta ahora me han resultado útiles (otros los he probado y descartado). Como van a ver, algunos se solapan en características, pero uso varios porque hay ciertas cosas que necesito de uno y de otro que me resultan convenientes. Se podría decir que lo que falta es UN servicio que cubra todo, pero en realidad creo que la diversidad es saludable.

Evernote

Este es posiblemente el que más uso, porque es sumamente sencillo y rápido para acceder. Evernote es simplemente una aplicación para tomar notas, con clientes disponibles para Windows, Mac, Win Mobile, iPhone y muchos otros dispositivos, y por supuesto, accesible directamente en la web.

Tomo una nota en mi teléfono (Samsung Black Jack II, que no recomiendo a nadie), en alguna de mis computadoras (Windows o Mac), o en la web, y automáticamente está disponible en todas las demás, con una interfaz muy sencilla, que siempre está disponible.

Evernote soporta texto, imagenes (directamente desde el teléfono, por ejemplo), capturas de pantalla, audio, etc, y cualquier notas lleva un título y tags, pero además todo su texto es indexado, incluyendo el texto dentro de las fotos. Si, Evernote aplica un proceso de OCR muy bueno, e indexa también ese contenido. Ideal para cuando se toman fotos de pizarrones, tarjetas, anuncios, etc.

Las notas se pueden enviar por mail, twittear, o arrastrar en los clientes Mac y Windows. Es muy versátil.

Se puede ver más en este video promocional:

Live Mesh Beta

Mesh es un servicio excelente de Microsoft que también está disponible para Windows, Mac y Win Mobile, y un escritorio web muy sofisticado.

Como en el caso anterior, permite sincronizar archivos entre varios dispositivos, pero con más opciones, ya que son archivos de todo tipo, no solamente notas. Claro que podría utilizarse para notas también, pero no está opimizado para esto, sino para compartir el contenido de los directorios que uno publica.

Personalmente lo uso bastante para mantener copias de archivos en varias máquinas, incluso compartiendolas con otra gente, algo en lo que Mesh se destaca.

Una última característica de Mesh que es muy importante es que permite acceder remotamente al escritorio de las diferentes computadoras sumadas, a través de el puerto 80, e incluso en el browser (requiere un plugin). El acceso es bastante rápido y no requiere más que el cliente de Mesh instalado en la máquina que se quiere controlar.

Esta es mi Mesh de dispositivos:

Mis dispositivos en Mesh

Y este es mi Live Desktop (esto se ve dentro del browser). Como pueden ver, es muy similar a un escritorio de Windows, e inclusive se pueden crear aplicaciones que corren allí adentro:

Mi Live Desktop

Live Mesh es mucho más que esto, ya que hay un protocolo de sincronización y un SDK, pero me limito a cubrir esta parte que es lo que utilizo.

Windows Live SkyDrive y Dropbox

Tanto Skydrive como Dropbox son discos virtuales en la nube donde uno puede subir y bajar archivos. Se complementan con Mesh porque con ellos se pueden compartir archivos o directorios individuales con usuarios particulares o el público en general.

Los uso mucho para compartir material de sesiones, ejemplos, u otras cosas para las que usualmente no necesito restringir mucho el acceso. En ambos casos se pueden crear links directos a los archivos, pudiendo mandarlos por mail cuando el tamaño supera lo que es un attachement.

Dropbox otorga 2 GB de almacenamiento gratuito y se integra con el Explorer de Windows y el Finder de la Mac con lo que se puede sincronizar con directorios locales.

Skydrive otorga ahora 25 GB gratuitos, pero mantiene un límite máximo de 50 MB por archivo que puede subirse. Mantengo Dropbox porque no tiene este límite (no se si lo tiene, realmente) y por la sicronización de carpetas, que es transparente.

En mi opinion, si Skydrive se fusionara con Live Mesh sería excelente, permitiendo centralizar todo y compartir links a archivos individuales. Pero Microsoft está explorando este espacio y tiene varios servicios que compiten entre si, como en este caso.

Google Apps

Finalmente, uso bastante los servicios de Google. Es largo cubrir todos, pero básicamente, brindan además del correo con acceso web, sitios estilo wiki, un procesador de texto, planillas de cálculo y presentaciones. El servicio básico es gratuito.

Estas últimas aplicaciones tienen funcionalidad mucho más limitada que la de los grandes paquetes, pero tienen la gran ventaja de ser accesibles online por diferentes usuarios, incluso a la vez.

Microsoft tiene un servicio similar llamado Office Live, pero hasta ahora sólo permite compartir los documentos, pero utilizando Office para editarlo, con lo que hay que descargarlos, y no soporta ediciones múltiples en simultáneo. Esta funcionalidad está anunciada para Office 14, que aún no está en Beta, pero las demos mostradas en PDC el año pasado entusiasmaban. Esperemos a verlo en la práctica, y ver el modelo de licenciamiento.

Otros servicios varios

Este post ya se hizo bastante largo, así que resumo un par de servicios complementarios que uso diariamente:

Delicious.com es donde almaceno mis favoritos. Allí están todos ordenados con tags, y en general, compartidos con la humanidad bajo la url http://delicious.com/msalias.

Google Reader es mi lector de RSS favorito, que me permita además compartir, reenviar por mail o marcar los post de los 206 blogs a los que estoy suscripto.

 

Esta lista no implica que no haya alternativas mejores para estos temas. En mi caso particular, usando varios dispositivos diferentes a la vez que cambio a menudo, moverme hacia la nube me quita problemas de movimientos y backups.

julio 07, 2009

¿Por qué este hardware?

MacPcVarios amigos y conocidos siguen sorprendiéndose de que use una MacBook.

La verdad es que vengo trabajando desde hace años mayormente en el mundo Microsoft, y la mayoría imaginan que uso Windows todo el tiempo… y es verdad, pero…

Hace tiempo que venía pensando en probar una Mac, y tuve la oportunidad de hacerlo durante un proyecto con mi colega geek Johnny Halife, todo un evangelizador en estos temas.

Los motivos son varios: primero, últimamente trabajo cada vez más en proyectos de interoperabilidad y con lenguajes diferentes. Incluso para Microsoft estuve trabajando recientemente en proyectos con C++ sobre Linux (casualmente en ese proyecto usé la Mac de Johnny varios días y me convencí).

Hasta pasarme a la Mac tenía el entorno al revés: Windows 7 como host y diferentes máquinas virtuales con distribuciones de Linux para correr Python, Mono, etc. Pero también uso siempre muchas máquinas virtuales con Windows, y Windows sobre Windows, en mi última notebook, era poco eficiente para trabajar regularmente.

Así que invertí los términos. Ahora uso como sistema operativo host Mac OS X (Leopard, hasta que salga Snow Leopard dentro de poco). Y gracias a la magia de VMWare Fusion, tengo funcionando Windows 7 RC a la vez, todo el tiempo, y en forma sorprendentemente integrada.

Picture 1

En la imagen pueden ver abiertos Visual Studio y Live Writer (mientras escribo este post) corriendo en Windows 7, y Safari, MonoDevelop y el Microsoft Messenger corriendo en Mac OS. Y como ven, las ventanas están todas en el mismo desktop, ya que Fusion permite ese modo (llamado Unity) en el que atrapa las ventanas por separado, de manera que no tengo que cambiar de un desktop a otro. Todo es prácticamente igual, salvo las obvias diferencias de los estilos (noten los típicos botones de minimizar, maximizar y cerrar, que en Windows están a la derecha y en Mac OS a la izquierda, además de tener distinta apariencia).

¿El resultado? Las aplicaciones que corren virtualizadas en Windows funcionan más rápido que en mi notebook anterior, sin virtualización. El secreto, obviamente, es la combinación de software y hardware totalmente propietario que permite que Mac mantenga una eficiencia y estabilidad impresionantes.

Y utilizar Mac OS es un entretenimiento adicional. Tiene cosas fabulosas y algunas carencias increíbles, pero eso da para otro post…

Lo cierto es que tengo lo mejor de ambos mundos, totalmente conectados, y eso me permite jugar entre Unix (Mac OS es un Unix remozado) y Windows, saltando de Mono a Visual Studio, de Python a IronPython y otras cosas divertidas.

Finalmente, también estoy intentando mantenerme firme en una decisión importante para minimizar el impacto de los cambios de máquina: estoy usando más y más servicios en la nube. Sólo instalo en un OS o el otro el software que no tiene alternativa decente en la web, e intento no mantener archivos en los discos sin sincronizarlos con algun servicio remoto. Prometo una lista comentada de los mejores de estos servicios para un próximo post.

junio 29, 2009

Seminario de Arquitectura en el MUG

Verona Desde el mes pasado estoy dando este seminario en el MUG sobre Arquitectura de Software. Aunque termina en septiembre y ya es muy tarde para sumarse, como hubo varios interesados tardíos, voy a tratar de ir comentando algunas características y resultados parciales aquí.

El formato del seminario es experimental, aunque tiene unas cuantas técnicas para mitigar el riesgo de este mecanismo “poco probado”. Básicamente, estamos iterando y refinando parte del proceso de avance sobre al marcha.

El cronograma incluye solamente cuatro reuniones presenciales en el MUG, una por mes, aunque en el interín estamos trabajando bastante a través de una lista de correo y un grupo en línea.

Como texto de referencia estamos utilizando la Application Architecture Guide de patterns & practices, la que describiré en más detalle en un próximo post. Seleccioné este libro por varios motivos:

  • AppARch2.0_smallEstá disponible para descarga en forma gratuita
  • Cubre en forma amplia el espacio de arquitectura de aplicaciones
  • Tiene varios niveles de lectura (introductorio, de referencia, como guía bibliográfica para profundizar, y como guía para orientar en el proceso de diseño de arquitectura).

Algo que estamos haciendo es ir más allá del contenido básico de la guía. Aunque es en general bastante independiente de la tecnología, tiene algunas secciones como la introducción a la plataforma .NET (el resto tiende a ser bastante neutro). Lo que estamos haciendo es tomar esta presentación para comparar la plataforma con otras.

También estamos haciendo bastante énfasis en las habilidades de comunicación, que son fundamentales en el rol del arquitecto, y por eso los participantes del seminario están entregando sus trabajos en formatos de presentación, y seguiremos avanzando en ese sentido.

Espero que parte del esfuerzo que los participantes están dedicando a este seminario se cristalicen finalmente en material que pueda compartirse con la comunidad de desarrollo y arquitectura en forma de blogs, artículos, y otros formatos.