RailsConf 2009

Me contaba ayer mi colega Brian que va a estar hablando en la RailsConf 2009.
Las RailsConf son, por así decirlo, como el sueño húmedo de cualquier programador de RoR, donde se reúne lo mejor de lo mejor para compartir sus experiencias, dar consejos y en general conversar de todo lo relacionado con esta tecnología.

La convocatoria es del 5 al 7 de Mayo en Las Vegas, Nevada. Me pilla un tanto lejos, así que probablemente me la tenga que perder, pero si tenéis la oportunidad de asistir al evento y os gusta Ruby on Rails, yo no me lo pensaría 2 veces.

2.0 thing

Imagino que todos sepáis a estas alturas (a no ser que viváis en medio del desierto debajo de una piedra, en cuyo caso es poco probable que estuvierais leyendo esto) que hoy fue la investidura presidencial de Barack Obama. Pero más que hablar del nuevo presidente de los Estados Unidos, o de cualquier elemento político, quiero compartir un pensamiento a cerca de lo increíble que ha sido el seguimiento de la ceremonia de investidura y de cómo esta cosa que hemos ido creando, llamada web 2.0, social media o lo que sea ha cambiado (en mi humilde opinión) el mundo.

La web ha evolucionado un montón desde sus inicios y con el tiempo ha pasado de ser un mero vehículo para transmitir información a convertirse en un medio para trasmitir emociones. Cierto que lo que yo llamo emociones no es más que la interpretación que hace mi cerebro de un determinado estímulo provocado en este caso por un medio audiovisual llamado ordenador, el cual se limita a trasmitir información. Pero el punto es que la tecnología ha evolucionado los suficiente como para que esta información pueda transmitirse masivamente hasta el punto de comunicar el sentimiento de un determinado colectivo a cualquier persona en cualquier parte del planeta.

En mi caso he seguido la retransmisión del evento mediante el live feed de CNN (que han hecho un trabajo increíble emitiendo vídeo en tiempo real a millones de personas sin que se les hayan caído los servidores) e integraron la retransmisión con Facebook, permitiendo que la gente actualizara su status en función de lo que veían en pantalla. Algo así como un micro blogging tipo twitter pero con los status de facebook. (Mopx me apunta que la gente de current hizo algo similar con twitter y me imagino que el resto de las cadenas hicieran algo similar con cualquier otra red social popular)

Esto, que parece una tontería, para mí marca un antes y un después en la web. La retransmisión de este evento pasa de ser una comunicación unidireccional como puede ser una televisión o una radio a una comunicación bidireccional, es decir, me permite expresar mi reacción y compartirla con el resto del mundo de manera sencilla y prácticamente en tiempo real.

Seguir el feed de mis amigos o el feed general (o incluso saber que la retransmisión en Panamá murió estando en la otra punta del mundo) mientras todo el mundo sigue un evento de importancia mundial me parece super interesante, porque me transmite el sentimiento general de miles y miles de personas que están viendo lo mismo que yo al mismo tiempo. Y eso es algo grande.

Llamémoslo web 2.0, social networking o lo que sea, creo que es algo interesante, y que merece la pena desarrollar y fortalecer. Cierto que habrá quien utilice toda esta información personal para fines poco éticos, o que existan teorías conspiratorias sobre que si los servicios de inteligencia están detrás de todo esto para obtener información del ciudadano de a pie etc, etc…

Hoy no me importa, hoy es un día para el optimismo y para la historia.


Yes they could

Hoy es un buen día para ser programador web 🙂

Tequilog

Desde hace ya unas semanas comencé a colaborar en tequilog.com junto con algunos de los programadores, diseñadores y, en general, geeks de panamá que pululan por el entorno 😉

La idea detrás de este blog es compartir consejos, trucos, o pedazos de código que puedan ayudar, informar o, en general, de lo que apetezca hablar.

Era algo que me apetecía hacer desde hace bastante tiempo pero no tenía el lugar adecuado para hacerlo.
En este mundillo resulta que hay poca información publicada en español sobre ciertas tecnologías o lenguajes de programación, y lo que pretendemos con esta iniciativa, es ampliar la información técnica disponible en nuestro idioma, y si lo podemos hacer de manera amena, pues mucho mejor.

Animaros y pasaros por ahí!

Desarrollo Ágil: Preámbulo

Ágil es una palabra de moda en el mundo del desarrollo de software si bien, esta metodología como tal, no viene diciendo nada nuevo.

Varios evangelistas y gurús se han alzado como portadores de esta «nueva» manera de construir software y diversas técnicas han surgido al rededor de este movimiento (con certificaciones y todo), afirmando ser la solución para todos los males.
En mi humilde opinión todo esto es (o debiera ser) mucho más simple.

Este es el primero de una serie de posts que voy a escribir a cerca de cómo entiendo la metodología ágil para el desarrollo de software.

Quiero dejar claro que no me considero ningún evangelista, ni ningún gurú, pero considero que puede resultar interesante y que cojones, me gusta hablar del tema 😉

Todo este buzz de desarrollo ágil viene inspirado por este manifiesto:

  • Valorar más a los individuos y su interacción que a los procesos y las herramientas
  • Valorar más el software que funciona que la documentación exhaustiva
  • Valorar más la colaboración con el cliente que la negociación contractual
  • Valorar más la respuesta al cambio que el seguimiento de un plan

Lo cual fue tan revolucionario porque se da de lleno con las prácticas habituales en el desarrollo de software.

Recuerdo poco antes de salir de la universidad, cuando comencé a hacer prácticas para sacarme de encima esos créditos de libre configuración, que me llevé un severo desencanto en lo referente a mi futura profesión.
No había nada de planificación, todo se hacía deprisa y corriendo. A nosotros los becarios nos dejaban a nuestro libre albedrío, con poco más que un manual de actuación, unas pocas charlas sobre lo que necesitaban y una máquina para trabajar.
Ah!, y todo tenía que estar listo en 2 semanas.
No importaba como, no importaba la calidad y sobre todo no importaban las personas. Si te tenías que quedar haciendo horas extra (siendo becário!!!) pues te quedabas y punto.

A lo que voy es que generalmente, las llamadas «Empresas de Consultoría de Software», en la mayoría de los casos no entendían el Software. Eran expertos en hacer dinero con el software (habitualmente subcontratando personal) dando lugar al llamado «Mercado de Carne«, en donde no importa lo que hagas, ni si estás bien o no. Lo único que importa es la diferencia entre:

a) El dinero en el que podamos venderte
y
b) El dinero que te damos a ti.

Si a – b es lo suficientemente lucrativo, entonces te contrataban. Si no entonces es que no habías pasado las pruebas psicotécnicas y demás…

Podría contar mil historias relacionadas con el mercado de carne madrileño, pero no viene al cuento.

Lo importante es que la llamada «revolución ágil» hacía una llamada al cambio.

Las personas son más importantes que los procesos y las herramientas.

Hazle entender esto a cualquier jefe de proyecto de la consultora Fulanez…

Ágil significa que un equipo de desarrollo de software, es el principal activo y como tal, las personas que conforman dicho equipo son lo primero. Todo lo demás viene a consecuencia de dichas personas. Y eso creo que nunca será suficientemente matizado:

Los programadores programan!

Si tu compañía vende «código», ya sea en forma de servicios o de productos o de lo que sea… cuida de la gente que genera ese código.
Tiene sentido no?

Como ya escribí anteriormente, es difícil enseñarle trucos nuevos a un perro viejo, y es que como se suele decir «bad habits die hard»

En grandes compañías de software hay toda una serie de jerarquías, estándares y procedimientos establecidos que, en mi opinión, sólo sirven para mantener las cosas a raya.

Si nos abstraemos un poco y nos enfocamos en lo que es la estructura a nivel de corporación, es difícil percibir la diferencia entre una compañía que genera sofware y otra que vende lavadoras.
Y esto no sería grave si el software fuera como una lavadora, pero afortunadamente no lo es.

Según lo veo yo, el software es algo vivo. Algo que uno crea pero que, llegado el momento, cobra vida propia y comienza a demandar cosas en las que jamás habríamos pensado inicialmente. Y lo genial del Software es que podemos proveer soporte para esas necesidades de manera relativamente sencilla!
Una lavadora podrá tener más o menos programas, pero no dejará de ser una lavadora.

Esta diferencia fundamental radica que el software es, por así decirlo, un «producto» que reside más en el plano de las ideas, que en el plano físico, y tratar de controlar este tipo de productos usando viejas metodologías bien conocidas en otras industrias, en mi humilde opinión es un craso error.

Os diré qué es el infierno para mi:

  • Programar algo usando especificaciones escritas en piedra.
  • No poder mostrar tu trabajo al cliente a medida que lo desarrollas para saber si es eso lo que quiere.
  • Después de haber trabajado en algo durante meses, que el jefe de turno me diga que hay que tomar otra alternativa.
  • No poder avanzar en un proyecto porque «los jefes y el cliente» se encuentran discutiendo re-negociando los términos del contrato.
  • No poder programar algo chulo y que sé que le va a proporcionar valor agregado al cliente, porque no se encuentra en el documento de especificación.
  • Asistir a aburridas reuniones en las que los «los jefes y el cliente» se la pasan discutiendo quién tiene la culpa del retraso en el proyecto.
  • Que el manager de turno nos diga que tenemos que trabajar más horas porque «vamos» con retraso.
  • Tener que llevar traje y corbata al trabajo 🙂

Si alguno de vosotros ha trabajado en un proyecto de este estilo seguro que entiende a lo que me refiero, los que no… no importa como trate de explicarlo, nunca podré llegar a expresar con palabras el estrés y sobre todo la frustración que eso genera.

Por qué uso una metodología ágil?

  • Puedo participar en el diseño de manera directa, dando mi opinión y modelando las tareas que van a terminar dando forma al proyecto.
  • No más Proveedores vs Clientes. Prefiero Proveedores + Clientes, mucho mejor.
  • Puedo enseñar periódicamente lo que estoy haciendo al cliente, de manera que él puede decidir si vamos por el buen camino o no, y sobre todo, puede inspirarse y darse cuenta de lo que realmente quiere.
  • Si la cosa no funciona, si hemos escogido un camino que resulta no ser el bueno, es mejor caer cuanto antes (el principio «fail fast»). Si lo que estoy haciendo no es lo que el cliente quiere, prefiero haber gastado una semana a varios meses de trabajo.
  • Prefiero pactar un número de iteraciones con el cliente, que un contrato escrito en piedra y lleno de cláusulas. Si mi trabajo gusta a mi cliente, y si ve el avance en el proyecto, acordamos más iteraciones. Si no, es mejor buscar otro proyecto u otro cliente, que establecer una relación de «te odio pero te necesito».
  • Puedo colaborar con un cliente ofreciéndole ideas y opciones en las que él no había pensado y enseñárselas en un pequeño demo. Si le sirve y si le gusta, podemos pasar esas ideas a la lista de cosas que hacer en sucesivas iteraciones.
  • Mi cliente puede usar su producto, aquello por lo que está pagando, desde el primer momento! Y creo que esto, desde el punto de vista de alguien que está invirtiendo un montón de dinero en algo es fundamental.
    Ofrecer la posibilidad de «jugar» con el producto a mi cliente desde el final de la primera iteración y desde ese momento recibir su feedback, es algo impagable.

El desarrollo ágil ofrece diversas técnicas para llevar a cabo estas y muchas otras prácticas, generando unos resultados bastante menos estresantes, menos frustrantes y sobre todo más divertidos y con el tiempo iré contándoos las que yo uso para trabajar.

Gestión de proyectos y superstición

Why do we seek planning forecasts in the wake of continued failures and uncertainty? It is the authors’ contention «that management’s enchantment with the magical rites of long-range planning, forecasting, and several other future-oriented techniques is a manifestation of anxiety-relieving superstitious behavior, and that forecasting and planning have the same function that magical rites have.» In other words, our desire to predict the unpredictable is based on superstition. And yet, that superstitious behavior can have both negative and positive benefits. As John Kenneth Galbraith said, «In an uncertain subject matter such as economics or psychiatry, there is something wonderfully compelling about those who are sure» (this quote is also from the same book). As we all know, it’s okay to be sure, and wrong, but it’s not okay to be uncertain.

Visto en el blog de Stephan, vía

Enseñando trucos nuevos a un perro viejo

Hace algunos días, Miguel Rodríguez hacía esta pregunta en su twitter:

¿Está Rails listo para las empresas? la pregunta correcta es ¿Las Empresas estan lista para el desarrollo AGIL en Rails?

Esto es algo en lo que llevo pensando los últimos meses, no específicamente con Rails, pero sí con el desarrollo ágil en general.

Paradójicamente la industria del software, que debiera adaptarse mejor que cualquier otra industria a los cambios teniendo en cuenta el producto que manufactura, es en cierto modo reticente a los cambios drásticos.
Pero cuando hablo de industria de software me refiero tanto a proveedores como a clientes.

Parece mentira que a día de hoy, sigan existiendo empresas que utilicen el desarrollo en cascada para desarrollar sus proyectos.

Esto está empíricamente probado que no funciona!

Entonces la pregunta que yo me hago es:

¿Qué impulsa a las empresas y a los clientes a usar metodologías viejas y obsoletas, blindarse con contratos de desarrollo y entregas definidas en fechas a priori sin tener especificaciones detalladas o en ocasiones, sin conocer realmente el producto que se desea desarrollar ?
Este tipo de proyectos y contratos suelen acabar en frases como esta por parte del cliente:
«Esto es justo lo que te pedí, pero no es lo que quiero»

El software desde mi humilde punto de vista, es como la materialización digital de una idea.
Pero trabajar con algo tan abstracto como una idea requiere agilidad, adaptación, imaginación… algo que desde mi punto de vista choca frontalmente con reglas fijas, diseños «grabados en piedra», documentos de funcionalidad intocables, etc.

Cualquiera que sepa algo de tecnología, o haya tenido algo de experiencia, por poca que sea, en el desarrollo de software debe saber que el software jamás queda «escrito en piedra», está en su naturaleza mutar, evolucionar (si, algo así como los pokemons) y en general estar sujeto a todo tipo de cambios.

Poco a poco han surgido diferentes metodologías, y frameworks que, una vez comprobado que lo rígido no funciona, han desarrollado una tendencia ágil para desarrollar software.

En general estas metodologías y frameworks, se adaptan en mayor o menor medida al desarrollo en espiral el cual es mucho más flexible en cuanto a incorporar cambios a nuestro producto.


Imagen cortesía de la Wikipedia

En concreto Rails, es un framework ágil para Ruby, uno de los lenguajes que considero que tiene más potencial de cara al futuro (flame wars aparte)

Rails es uno de tantos frameworks (Grails, Spring, Tapestry…) que ayudan a incorporarse en esta nueva tendencia del desarrollo ágil, pero de nada sirve tener un buen framework si no modificamos nuestra mentalidad en cuanto al desarrollo de software.

Documentación sobre desarrollo ágil hay a patadas, Extreme Programming, Scrum son sólo algunos ejemplos de los muchos que se pueden encontrar.

Pero mi punto es que, de nada sirve (o al menos de muy poco) la revolución ágil, si la industria (aka. proveedores y clientes) no cambian hacia lo ágil, y en mi opinión esta es una asignatura pendiente para las grandes corporaciones y en los programadores.

Poco a poco se está demostrando que pequeños grupos de trabajo entregados al desarrollo ágil, con clientes que apuesten por éste y se involucren en el proyecto, resultan mucho más productivos y sus productos mucho más satisfactorios que aquellos gestionados/implementado con viejos estándares, cláusulas, y documentos de funcionalidad «escritos en piedra».

Pasará como con los dinosaurios y las grandes corporaciones de software estarán condenadas a la extinción?

Cambiar hacia lo ágil está lleno de retos, hay q cambiar de mentalidad, eliminar la pereza de modificar las cosas ya realizadas y probadas, adaptarse a los cambios del cliente, e incluso incentivar a éste para que participe, se involucre, pruebe, haga y deshaga…
No hay nada escrito en piedra, todo está sujeto al cambio, es más, el cambio es el motor del mismo desarrollo…

Es la revolución ágil, te apuntas?

Oferta de Microsoft para comprar Yahoo!

Segun leo esta mañana en Microsiervos, veo que Microsoft ha lanzado una oferta de 44.6 billones de dólares para hacerse con las acciones de la compañía.
Aguita…


Genial los chicos de Polonio210

En lo personal no uso mucho Yahoo! así que no puedo decir que la noticia en ese sentido me afecte.

Ahora, que no me toquen Flickr!!!

PanamaJUG

Conversando anoche con mi amigo Stephan me enteré de que en Panamá existe un JUG (Java User Group) que está trabajando en cosas bastante interesantes, como por ejemplo la traducción al español del NetBeans.

Así que me puse a curiosear por su página web y ví que tienen programadas una serie de conferencias en diciembre muy interesantes con gente de Estados Unidos, República Checa, Chile…

Creo que la conferencia será en Herrera, quién se apunta a asistir?

Update:
Más blogs que hablan sobre el PanamaJUG
Webmasters Panamá link
Blog de Chiriquí link