featured image

Leyendo la Bonilista me encontré una distinción entre genios de la programación y la generación de desperdicio que me hizo pensar, ¿no debería ser un genio de la programación lo suficiente bueno para no dejar un desastre a su paso? ¿estamos confundiendo ser un genio con un tornado táctico?

En el libro de A Philosophy of Software Design, John Ousterhout menciona el término tactical tornado. En una traducción libre de su texto podemos decir que un tornado táctico es:

Casi toda organización de desarrollo de software tiene al menos un desarrollador que lleva la programación táctica al extremo: un tornado táctico. El tornado táctico es un programador prolífico que escribe código mucho más rápido que otros pero trabaja de una forma muy táctica. Cuando se necesita implementar una característica rápida, nadie lo hace más rápido que el tornado táctico. En algunas organizaciones, la dirección trata a los tornados tácticos como héroes. Sin embargo, los tornados tácticos dejan detrás de sí una ola de destrucción. Son rara vez considerados héroes por los ingenieros con los que trabajan quienes deben trabajar con sus códigos en el futuro. Por lo general, otros ingenieros deben limpiar los desastres dejados por el tornado táctico, lo que hace que parezca que esos ingenieros (que son los verdaderos héroes) están progresando más lentamente que el tornado táctico.

Tal y como menciona Ousterhout, si en tu equipo hay programadores no muy bien considerados por sus compañeros pero que consiguen sacar características adelante, quizás estés ante un tornado táctico que consigue en corto plazo solventar los problemas pero acumulando tal cantidad de deuda técnica y dejando el nivel de calidad interna del código tan baja que el ritmo de desarrollo será cada vez más bajo y las ganas de otros de seguir trabajando cada vez menores (puedes echar un vistazo a un artículo anterior que publiqué sobre El Coste de la Calidad).

¿Qué es ser un genio?

Cuando estuve documentándome sobre John von Neumann para el libro Historia de los Lenguajes de Programación (años 1940-1959) definían la figura de von Neumann como un genio por ver los problemas difíciles como simples y hacer la solución tan simple que cualquiera pueda entenderla. Dicho de otra forma: hacer fácil lo difícil.

No obstante, en programación y en el mundo de la ciencia en general, siempre hemos tenido la idea de un genio como alguien que trabaja a niveles incomprensibles, en problemas demasiado complejos y con soluciones igualmente complejas. Sinceramente, estos no son genios, son elitistas.

Un genio en programación es aquél que facilita una implementación difícil, alguien que consigue ver el problema y llevarlo a un nivel comprensible y genera una solución obvia cuando quien lee el código lo revisa. Es quien mantiene un nivel de coherencia entre el código original y la nueva característica implementada, quien es capaz de modificar y refactorizar el código existente para si un concepto es modificado todo el código se amolde y no se creen ambigüedades, es quien facilita la comprensión del código a sus compañeros.

Lo que la gente cree que es un genio es quien proporciona optimizaciones tempranas, sistemas complejos para soluciones triviales, expresiones difíciles de leer pero que funcionan, códigos de una sola línea aprovechando interpretaciones ambiguas de la expresión del lenguaje empleado y quien considera que su buen código no necesita comentarios porque no eres lo suficiente bueno si al leerlo no lo entiendes. No. Estos no son genios. Como dije anteriormente, quien piensa así normalmente se cree por encima de los demás creando en su mente un estrato de elitistas creyendo incluso que concursos de ofuscación de código son en realidad concursos para buenos programadores.

Conclusiones

En mi opinión, un genio es una persona que comparte que hace fácil lo difícil y mantiene todo organizado y ordenado. Decir que un código tiene deuda técnica cuando han estado trabajando genios en él sin presiones y sin haber asumido esa deuda técnica adrede me resulta extraño.

Sin embargo, un elitista que considera su nivel de programación por encima del resto, que intenta hacer difícil lo fácil solo para intentar levantar los elogios a modo de frustración de sus compañeros no me parecen sino tornados tácticos que consiguen, sin saberlo, elevar el nivel de deuda técnica a través del uso de malas prácticas.

Si diriges un equipo de programación, tener un tornado táctico puede no ser malo en momentos de necesidad. Eso sí, trátalo como lo que es, una persona que generará deuda técnica que habrá que amortizar en algún momento y seguramente por los verdaderos genios del equipo.