viernes, 25 de junio de 2010

Cargo cult programming

El término Cargo Cult se refiere a ciertas religiones que surgieron en algunas tribus del Pacífico después de la segunda guerra mundial. Estas tribus vivían muy primitivamente hasta que, por la construcción de bases militares, se vieron expuestas repentinamente a la civilización occidental del siglo XX. Por este contacto, generalmente por via aérea, recibieron muchos productos inexplicables para ellos. Cuando la guerra terminó las bases fueron desmanteladas y los nativos se vieron privados de los bienes a los que se habían acostumbrado. Entonces para seguir recibiendo estos "regalos caidos del cielo" crearon unos rituales en los que imitaban los movimientos que habían visto hacer a los militares: Armaban "torres de control" con madera, limpiaban y preparaban pistas de aterrizaje, hasta usaban audifonos hechos de bambu, con la esperanza de que esto atrajera a los aviones... pero los aviones no llegaban.

¿Qué pasó? ¿Nos transformamos en un blog de antropología? ¿Que tiene esto que ver con desarrollo de software? Paciencia, todo tiene que ver con todo.

Miremos un poco estos ejemplos de código, tomados de código real posteado en The Daily WTF, pero que seguro se parecen a cosas que todos hemos visto en nuestra práctica profesional:



Ejemplo 1: alguien que no tiene idea como funciona un Garbage Collector

public class Destruction {
  public static void delete(Object object){
     object = null;
  }
}

Ejemplo 2: un método para reemplazar el operador !

/// 
/// Turns true into false and false into true
/// -- similar to the church of scientology.
/// True of false
/// False or true
private bool trueandorfalse(bool _booInpt)
{
  // I'm quite sure though there is a very
  // clever C# standard command doing this,
 // I just can't find it right now ...
 if (_booInpt == true)
  return false;
 return true;
}

Ejemplo 3: está más allá de mis posibilidades explicar el razonamiento detrás de este código

public override bool IsActive() {
 return true && true && true;
}

¿Como puede ser que haya programadores que escriben estas bestialidades? Básicamente, porque son gente que no entiende lo que están haciendo y trabajan realizando pruebas más o menos al azar, y mucho buscar codigo en google/copy/paste hasta que consiguen hacer que su aplicación parezca funcionar.

La relación entre este estilo de programación y Cargo Cult la propuso Steve McConnell en su artículo Cargo Cult Programming : se trata de programadores que repiten acciones que les han dado resultado en el pasado o que han visto hacer a otros programadores, sin saber que sentido tienen estas acciones ni porque funcionan.

La metáfora es maravillosa, uno se imagina a este tipo de programadores frente al monitor, con un hueso en la cabeza, haciendo ruidos guturales y asustándose cuando las luces cambian de color.

Ahora, ¿De que nos sirve esto a nosotros, los Programadores-menos-Bestias? Digo, además de para reirnos un rato. Nos sirve para recordarnos que siempre tenemos que entender como funciona todo lo que hacemos. Está bien tirarnos lances para ver si solucionamos algo, esta bien, si el tiempo apreta, buscar algun código que no terminamos de entender del todo y usarlo, pero una vez que lo logramos no debemos dar por terminada la tarea hasta que no aprendamos exactamente que fue lo que hicimos y porque funciono. Si no lo hacemos....el dia menos pensado nos vamos a encontrar usando audifonos hechos de bambu y esperando que baje un milagro del cielo.

2 comentarios:

  1. JAJAJA!! Muy bueno! No tenia idea del Cargo Cult original, pero la metáfora con Desa está bárbara... jejeje

    ResponderEliminar
  2. Creo que concordamos plenamente Ariel, jeje, la metafora aplica muy bien con el Desarrollo de software. Tambien se ajusta muy adecuadamente a lo que sucede cuando se trata de aplicar practicas de nuevas metodologias de desarrollo a proyectos sin entender realmente cuales son los principios que la hacen funcionar o el contexto para el que fueron definidas.

    ResponderEliminar