lunes, septiembre 20, 2004

Odio los efectos colaterales en informática

Odio los efectos colaterales. Odiar es un sentimiento intenso de repugnancia, y es cierto, los odio. No me refiero a la película Collateral o la implicación de su protagonista con la iglesia de la cienciología. Me refiero al efecto más odiado por un informático (de carrera o hobbie), los efectos colaterales.

Consisten en que un sistema (programa, servicio, función) que debería de funcionar bien no lo hace. Y no funciona porque esté mal hecho, sino por implicaciones existentes, precondiciones, alteraciones no documentadas, interrupciones en tiempo de ejecución, etc. Algunos casos típicos son:
  • Algún registro en ensamblador (o bandera) ha sido modificado, sin ser guardado y tras llamar a una función, todo ha cambiado.
  • Se cambian variables globales de un programa, confundiéndolas con las locales, no se activan alertas, generan interrupciones, ...
  • Un servicio notifica que se está ejecutando, pero está fallando más que una escopeta de feria y por lo tanto no ofrece servicio.
  • Se cae un host de la red que ofrece un servicio parcial y nadie comprueba que tiene que estar operativo para seguir funcionando.
  • No hay conexión a Internet, aunque el router jure y perjure la conectividad.
  • No queda espacio en disco.
Bien. Para enfrentarse a estos problemas, el desdichado informático intenta de forma sistemática repasar toda la configuración, todo lo que ha creado, hacer una traza (seguir paso a paso la actuación del ordenador) y llegar a la conclusión de que es imposible de que suceda. Pero sucede... Y el misticismo no existe en informática... Aunque algunos tienen su religión.

Un buen profesor, K, en el primer año de carrera nos comentó que el 90% del tiempo se dedica al 10% de la programación. Esta regla 9-1 se aplica a otras cosas: tiempo de ejecución, memoria consumida, etc. Lo que no nos contó, y añado de cosecha propia es: "si estás más de quince minutos dándole vueltas a lo mismo y no encuentras el origen del problema, en el 90% de las ocasiones problema está en otra parte".

Pues me ha pasado algo parecido, horas y horas perdidas dándole vueltas a un servicio que estaba formado por cuatro subsistemas que interactuaban entre ellos, en tiempo real, 24/7, siguiendo una línea secuencial (por suerte no actuan de forma asíncrona o en paralelo). Unos cuantos ficheros de configuración a toquetear y diferentes niveles de depuración y ficheros de registro. Un caos en el que algunos que saben de esto tampoco me pudieron ayudar. Al final, el problema se generó al utilizar una función no habitual en uno de los subsistemas y otro subsistema no leía ese mismo idioma, por lo que había que configurarlo a "pelo".

En este caso, como era de esperar, el pequeño matiz que me ha hecho mucho más viejo se arreglaba con "sólo" añadir 12 caracteres a un fichero de configuración. ¿Qué puedo decir? También soy humano, ¿no? Aunque otro que yo me sé cree que estoy deshumanizado...