La academia, las prácticas ágiles y el UML

La manera más fácil para aprobar una tesis de ingeniería es mentir. Llenar páginas y páginas, preferentemente con tablas y viñetas, de contenidos vacuos y tediosos que seguramente nadie, mucho menos los evaluadores, leerán. Sólo hay que prestar atención a que sean muchas páginas y lo más simétricas posibles.

El ejemplo paradigmático de esto son las especificaciones formales de casos de uso, pasión de burócratas que tienen cabida donde no hace falta demostrar mucho.

Pero también el UML, me atrevo a decir, en su mayor parte y nivel de detalle es secuaz de esta ignominia que pauperiza el nivel del software académico: en vez de saber programar y poder leer código, se presta atención a los dibujitos, poniendo el grito en el cielo si la flechita es negra en vez de blanca, como dice Sommerville que debe ser.

Como no me gusta mentir, la facilidad no me seduce de más (tampoco la dificultad) y estoy bastante conforme con lo que hice me animé a ser sensato en expresar cómo hice mi trabajo.

No me encerré 6 meses a hacer dibujitos que resultarían perfectos, inescrutables y luego harían la programación trivial. Eso, al menos en mi experiencia, no existe (sospecho que ellos todos lo saben, lo que exacerba la hipocresía). Sí, en cambio, hice algunos dibujitos que me ayudaran a entender (y dar a entender) cómo iba la cosa, mientras iba programando y evaluando si estaba bien encaminado.

Este espíritu es el que cobijan las prácticas ágiles, que es el marco conceptual (metodológico) que adopté.

La cuestión es que, para ganarle al unknow how de los hombres de corbata, hay que justificar con nombres que les suenen admirables. Hay que mencionar mucho IBM, Microsoft, C#, Intel. Esas son las voces que respetan, aunque sean pura falacia

System Message: WARNING/2 (<string>, line 45)

Explicit markup ends without a blank line; unexpected unindent.

Yo justifiqué así:

Según afirma Terry Quatrani, evangelizadora de las metodologías ágiles de IBM, en The Truth About Agile Modeling :

Aunque sigas un proceso ágil, estarás realizando cierto grado de modelado – sólo que no lo realizarás tanto como si utilizaras un proceso tradicional. La falta de formalidad en el modelado ágil no significa que no estás modelando, sino que te pones el foco en los beneficios de este sin las desventajas y confusiones de documentos extraños y burocráticos.

Por su parte, Robert Martin sostiene en *Agile Principles, Patterns, and Practices in C#* que el modelado basado en UML en el desarrollo ágil es útil como instrumento de comunicación, pero su detalle no aporta valor significativo:

No gastes mucho tiempo en esta tarea, no necesitas tanto detalle. Los modelos y los planos son necesarios en la arquitectura y la construcción civil porque es caro construir una casa para demostrar que su diseño funciona. El software no es así – puedes validar tu idea con sólo codificarla, en igual tiempo que el que insume hacer un modelo UML que nada prueba por sí mismo.

Aun más escéptico, Alans Stevens, reconocido ingeniero en software [1] y conferencista, opina en un artículo:

No uso UML y noto que ninguno de mis colegas lo usa. Tengo sensaciones mezcladas acerca de su necesidad. Parece perfectamente razonable que debamos acordar como industria un conjunto de símbolos comunes para representar la programación orientada a objetos, pero UML tiene la típica apariencia de "diseñado por un comité".

(...) El aspecto más crítico en un diseño inicial, en mi experiencia, es la interfaz entre la UI y el modelo de objetos. Lamentablemente UML no aborda este problema y en cambio parece obsesionado por las minucias en una parodia de distracción académica.

Apuntes del PyCamp 2011

Casi se hizo jueves y todavía no escribí nada sobre el PyCamp. Roberto Alsina se va a enojar.

La excusa, vaga como yo, es que la devolución de uno de mis directores de tesis fue más hinchapelotas minuciosa que lo esperado. Así que para cumplir el objetivo tuve un amansador refactoring de 5pm a 6am cuyo resultado me permitió conseguir un lacónico:

Recibido, pero recién lo puedo ver el viernes

Inmediatamente demostré que el lenguaje soez en arameo es un conocimiento latente.

A modo de intro

El PyCamp es un encuentro de la comunidad Python Argentina. Monos (y pronto monas) con laptops afiladas se juntan en el algun rincón del país con internet, preferentemente lejos de las grandes urbes (para darle énfasis a eso de camp) a programar software libre, hackear de lo lindo, jugar jueguitos electrónicos y de los otros, tomar y beber en bucle continuo y hacer cuanto le plazca a cada uno, en un ambiente totalmente inclusivo, distendido y buena onda.

/images/5575373677_34553-e5833.jpg

Python Argentina abarca el amplio espectro que va desde programadores reconocidos internacionalmente (gran parte de ese Ubuntu que seguro estas usando — o deberías — lo hacen pythonistas argentinos) hasta "newbies" que se anotaron en la lista con el único y nada despreciable objetivo de callar al amigo que ya sabe un poco más y no para de hincharle para que use Python (resulta que a los pocos dias, el (ex)newbie ya está molestando a un tercero).

Esa población tiene fiel reflejo en el PyCamp, pero grosos y finitos tienen las mismas posibilidades de proponer, opinar y divertirse. Por supuesto, es impagable lo que se aprende y son increíbles las cosas que hacen los geeks cuando están divertidos.

De estos encuentro salieron proyectos como Cocos2d, la CDPedia y lalita.

Mi experiencia

El PyCamp 2011, el cuarto consecutivo, se realizó en La Falda y fue el primero en el que participo. Sabía, por referencias, fotos y repositorios, de qué se trataba, pero como dice el adagio... del dicho al hecho ....

/images/5575974174_116c8-4028d.jpg

Nati tenía un congreso de germanística en Buenos Aires y después se iba a La Plata a visitar a una amiga, así que las opciones eran ir a la marcha el jueves (24 de marzo) y cuevanear el resto del finde o sumarme a la movida. Perrito ofreció movilidad así que lo tuve servido.

Salimos el jueves a la mañana y con nosotros venía Malev y el organizador del evento, de pie señores, Nueces.

A lo largo de los 4 días de PyCamp, participé en la CDpedia (mejoré la funcionalidad de "artículo al azar" y estuve haciendo unos benchmarks de optimización en el peso de las imágenes), amagué con un filtro para Pep8fy que dejé medio inconcluso, comí al menos el doble de lo que venía comiendo (bien la comida, che!), jugué mi primer sesión de rol guiado por el señor ordenador (Alecu, un maestro!), malabareé con las bolas (las de malabares) de Humitos, presencié en vivo la gestación de un delirio mágico de Roberto Alsina, me metí a la pileta y tomé sombra, perdí 0-5 0-5 los dos partidos de metegol y me cagué de risa igual con mi coequiper (¡fiesta!), escribí "puto" (con onda, Lipe) desde un android con un librería para multitouching que estos bestias hicieron en una tarde, quedé pasmado con el vuelo de la discusión sobre los motivos (y posibles acciones correctoras) de la baja participación femenina en Python y el Software Libre en general, bebí vino, fernet, cerveza y mistela (me colé en un contingente más adelantado que el nuestro en la excursión del Hotel Edén, y después me volví con Flecox a ver el partido de Argentina), jugué con Tato (el pythonista más peque del encuentro, hijo de Roberto Alsina) y me enternecí viendo a otros geeks (Huguito — Pilas rulez! —, John, Achuni, todos) jugar como niños.

/images/5575353897_b47ee-6529e.jpg

Detalles faltan pero estos someros recuerdos sobran para afirmar que el balance es positivísimo.

Una reflexión final

PyCamp contrasta totalmente con los grises, aburridos y mediocres congresos académicos que en el ámbito universitario se difunden y en los que alguna vez he participado, donde los papelitos cuentan y donde (casi) todo se vuelve una ficción impulsada por la inercia y la necesidad de "publicar" (no importa mucho que), para mantener la beca, el statu quo y el viático.

En PyCamp no se piden papeles ni se aplauden corbatas, la gente se llama por el sobrenombre y no por el título, se admira el conocimiento pero más se festeja su colectivización, y eso lo saben (y lo disfrutan) los picantes y los tiernitos.

Cuanta falta le hace a la universidad visiones y experiencias como esta.

El Quijote del Software Libre

Durante los ultimos años de facultad me he ganado ciertos apodos, algunos más buena leche que otros, relacionados con mi postura y militancia respecto al Software Libre.

Esta postura se mezcla (se complementa) con otras posiciones políticas que he manifestado y defendido reiteradamente con profesores y compañeros, que son intrínsecas a la formación y el perfil de ingenier@s que se forma en la universidad pública, con la que suelo disentir. Muchas de esas discusiones, están publicadas en mi otro blog

La semana pasada una amiga comentó un mensaje que dejé en Facebook avisando que había terminado la tésis.

/images/2011-03-21-123747_498x351_scrot.png

Inspirado en ese comentario de Lu, Nati (mi novia) me pintó esta remera como regalo de cumpleaños (que es mañana).

/images/193004_10150430921700058_879055057_17417662_1519731_o.jpg

Claro que yo no salgo muy favorecido (cansancio y flash no hacen buen equipo). Pero la remera está buenísima. Acá el detalle:

/images/191578_10150430923120058_879055057_17417703_2608242_o.jpg

En la espalda podría ir esta cita :

"La libertad, Sancho, es uno de los más preciosos dones que a los hombres dieron los cielos; con ella no pueden igualarse los tesoros que encierra la tierra ni el mar encubre; por la libertad, así como por la honra, se puede y debe aventurar la vida, y, por el contrario, el cautiverio es el mayor mal que puede venir a los hombres."

Don Quijote, capítulo LVIII, segunda parte

Referenciar figuras por número en Sphinx / Latex

El viernes presenté el draft para la revisión final de mi proyecto integrador (a.k.a. tesis). Tentativamente (¡a esta altura y todavía no es seguro!) se titula "Software para graficación de digramas termodinámicos" y se puede chusmear acá.

Como verán, lo hice con Sphinx, generando LaTeX y compilando luego a PDF. Estoy más que satisfecho del resultado.

Sin embargo, un problema de Sphinx/Docsutils (y esto viene a ser el verdadero tema de este post) es es que si bien están llenos de pulentez y se la bancan mil, no están "pensados" para escribir tesis sino documentación/manuales de software. Esto se nota, sobre todo, en la subutilización de recursos de LaTeX a los que "no se accede" desde restructuredText.

El caso paradigmático es la referenciación de figuras. En las versiones "imprimibles" que se generan con LaTeX suele pasar que una figura no quepa en una página y el compilador, al medir y darse cuenta, la manda a una página siguiente. Esto hace indispensable ser preciso en la referencia ya que un mensaje como "en la siguiente figura" puede estar seguido de toda una página sin figuras.

Para hacer una referenciar una figura en Sphinx hay que declarar un target

.. _ok:

.. figure:: ok.png

   Una imágen

y luego usar el rol :ref:. Por ejemplo:

Referenciando la figura :ref:`ok` se evidencia el problema.

El problema es que el LaTeX generado por Sphinx no hace exáctamente una referencia a la figura, sino un hipervínculo (hyperref). Como texto de ese hipevinculo usa el epígrafe de la figura, lo cual es horrible e inútil para textos cientificos/académicos. El issue, está reportado hace más de 2 años.

Con el estilo gronchohacker que se me está volviendo costumbre, hice unos cambiecitos para que funcaran las referencias como tienen que ser, por número. La directiva es particularmente fácil en LaTeX: ~\ref{}. En concreto, el "gronchohackeo" se trata de cambiar {\hyperref[label]{\emph{epigrafe}}} por ~\ref{label}.

Para garantizar compatibilidad con los que les gusta que el título de la referencia sea el epígrafe y no el número, lo hice opcional: toda referencia a un destino con sufijo -num usa una referencia númerica en vez de un hipervinculo con texto.

Acá el patch

Y acá un ejemplo del problema y la gronchosolución

El código del ejemplo es este:

Ejemplo
*******

Referenciando la figura :ref:`ok` se evidencia el problema. Aplicando mi
rústico parche en cambio, se puede referenciar a la Figura :ref:`ok-num`.

.. _ok:

.. figure:: ok.png

   Una imágen

.. _ok-num:

.. figure:: ok.png