jueves, febrero 09, 2012

Mejorar como programadores - El Comienzo

La Idea

Inspirados en el artículo Kicking ass together: How to improve coding skills as a group, Luis y yo escribimos este artículo como un preámbulo a una etapa de trabajo en la que pretendemos implementar algunas de las ideas ahí planteadas.
El martes 10 de enero concertamos una reunión personal en el café de la nueva plaza de Los Palos Grandes. Muy buen lugar para el esparcimiento y reunirse. Tres copias impresas del artículo que se procesaron exageradamente con Readability (digo exageradamente porque pare ser sincero, no era necesario) sirvieron de guía durante la reunión, en la cuál principalmente hablamos de dicho artículo y de cómo llevar a cabo esas ideas aplicándolas en nuestro contexto.
El artículo es de gran interés para nosotros porque llevamos tiempo realizando reuniones que seguían más o menos esas ideas; pero al verlas condensadas en un solo texto, integradas, y ejecutadas inteligentemente, reconocimos su gran valor.
Otro artículo que nos motivó bastante fue 12 resolutions for programmers que apunta básicamente a las mismas motivaciones del primer artículo: Ser mejor persona para ser mejor programador (sustituye programador con lo que quieras y sirve igual). Queremos mejorar nuestras habilidades, de eso no hay duda, y sabemos que en Buen equipo lo haremos de mejor manera: más rápido, más amplio, más seguro (más probable).
La gente de Jelly hizo algo similar. El enfoque que le dieron es el de "vamos a llevar el ambiente de oficina a otra parte".
Al finalizar el año, haremos un análisis de lo logrado con este meta-proyecto.

El Grupo

Todas las ideas planteadas en los artículos mencionados (a excepción del de las doce resoluciones), o en las reuniones que hemos tenido, giran alrededor del concepto de un grupo. Sería entonces el medio más importante para lograr el objetivo de mejorar personalmente. Así que uno de los primeros objetivos a corto plazo sería la consolidación del mismo.
Siguiendo las recomendaciones de los textos, y la experiencia propia, planteamos al grupo como un ente orgánico, en el sentido de que su evolución sea lo más natural posible, es decir, no forzaremos su crecimiento, las iniciativas deben venir de las bases y los objetivos y actividades serían planteadas en función de la madurez del grupo, es decir, ya tendremos tiempo para un BigDeepShitCON, pero por ahora, proyectos concretos y tangibles en corto plazo son nuestros objetivos.
Como ejemplo de estos proyectos:
Hack 7 Languagess in 7 weeks
El libro Seven Languagess in Seven Weeks pretende explicarle a entendidos en la programación, siete lenguajes representativos de los más diferentes paradigmas de programación. Entonces, como actividad de grupo nos hemos planteado leer este libro y comentarlo entre nosotros, hacer los ejercicios y comparar las soluciones y/o simplemente apoyarnos mutuamente en el seguimiento del mismo.
Track le blogs
Una de las resoluciones asumidas fue la de mantener un blog. Entonces, en el grupo nos apoyaremos leyendo los blogs de los compañeros y generando feedback.
Maratonear
Para mantener a punta nuestras habilidades esenciales de la programación, haremos ejercicios concertados de programación clásicos de los maratones. Como ejemplo, los problemas de spoj, luego de solucionarlos, compararemos las soluciones, y también discutiremos ideas durante el desarrollo de las soluciones.
Desarrollo de aplicaciones
Siempre surgen ideas de aplicaciones útiles durante las reuniones. Podemos ejercitar el trabajo en un buen equipo de desarrollo de software implementando estas ideas en el marco del meta-proyecto.
Para materializar los resultados esperados, el trabajo se realizaría en sesiones presenciales y no presenciales.

Sesiones de trabajo presenciales

Con el objetivo claro de mejorar y tomando el artículo como guía, nos propusimos realizar un conjunto de sesiones periódicas de trabajo. Éstas consistirán en una hora de trabajo y una hora de socialización. Entendemos que, para mejorar, ambas actividades son igual de importantes.
Las sesiones de trabajo deben incorporar actividades que mejoren las habilidades de cada uno de los participantes. Algunas de las actividades que identificamos que cumplen con este requisito son solucionar problemas de programación, hacer code reviews, etc.
En estas sesiones de trabajo, también se podrán realizar charlas de interés para los participantes del grupo.
Las sesiones de trabajo y socialización están abiertas a cualquiera que quiera asistir a ellas, y la única condición es participar y aportar desde el primer momento. Cualquier comentario dentro de contexto se considera participación.

Sesiones de trabajo en linea

Siguiendo el ejemplo de numerosos proyectos de Software Libre, resulta sencillo ejecutar de manera remota casi la totalidad de las actividades que nos hemos planteado. Nos referimos a las herramientas clásicas de las que se valen estos proyectos para coordinar el trabajo de tantos participantes localizados en lugares remotos del globo, a saber: Sistemas de Control de Versiones Descentralizados, documentación en línea, IRC, wikis, blogs, etc.

El Comienzo

Puede interpretarse como una nueva disciplina. Tal vez como un simple programa de ejercicios rutinarios. Tal vez un hobby. En cualquier caso, se trata de algo positivo.
Pero lo que sí es cierto, es que lo que hemos escrito, es los planes de su primera etapa (sea lo que sea).