consultoria400.jpg

Cuando escribí el post “Consultoría Tecnológica: visión personal” estuve buscando un ejemplo para argumentar mi texto pero no se me ocurrió nada. Casualmente el sábado estuve tomando algo con el jefe de sistemas de unos conocidos grandes almacenes. Me comentaba que harto “de los de desarrollo”. Que gracias a malas prácticas en el desarrollo ellos tenían el doble de trabajo. Os paso a explicar el ejemplo concreto.

Pongamos que estos conocidos grandes almacenes utilizan el body shopping de una manera normal, como cualquier empresa. La conocida consultora que subcontratan proporcionan unos supuestos expertos en desarrollo de aplicaciones Java. La aplicación en cuestión tiene que realizar una query pesada sobre tablas de millones de registros. Se finaliza la aplicación y mi amigo y su grupo analizan la complejidad de los algoritmos utilizados para la consulta. Parece que existe un problema: se estima en algo más de tres años el tiempo de respuesta :-). Estando el desarrollo entregado el jefe de proyecto de la famosa consultora comenta que hay que habría que cambiar el algoritmo, que no está del todo acabado… Inaudito. No obstante se les da otra “oportunidad”. Cuando empiezan realmente a analizar el problema no hacen más que pedir el aumento del tiempo de timeout del servidor de aplicaciones y más memoria. En este punto me acuerdo de los diversos hilos escritos sobre si faltan programadores (2). ¿Es que no es posible encontrar un buen programador? Consiguen rebajar el tiempo de respuesta a unos veinticinco minutos y piden unos 3GIGAS¡¡ de memoria. Inaceptable.

Mi amigo y su equipo un poco cansados de que les llamen a horas intempesitvas porque se cae el servidor deciden ponerse con el problema y reducir el tiempo de respuesta a tres minutos. Moraleja: ha intervenido un buen programador y ha utilizado nuevos algoritmos. Incluso van más allá. Consiguen localizar un patrón en el servidor de tal manera que son capaces de detectar cuando el servidor se va a caer debido a otras querys. Con lo que cuando detectan el patrón son capaces de lanzar un pequeño script que pueda reiniciar el servidor de manera automática y sin intervención alguna.

Este es un caso típico que no es tan raro y que me sirve para explicar lo que debería de hacer un buen consultor tecnológico o lo que debería ser un buen programador. También es un caso típico para explicar en lo que se ha convertido la consultoría que no ofrece profesionales con alta cualificación y experiencia. Creo que no es necesario sacar conclusiones porque el caso es por sí mismo bastante esclarecedor. Gracias a Miguel A. por servirme de inspiración.

P.D.: Mañana comienca FICOD e intentaré ir contando las cosas que por allí vea si es que puedo sacar tiempo.


Technorati Tags: , , , ,
Site Search Tags: , , , ,

Si te ha gustado lo que has leído te invito a suscribirte al Feed RSS | ¿Qué es el Feed RSS?

Suscríbete para: Google Reader, Bloglines, My Yahoo o My MSN

El lobo, la cabra y la col

August 24th, 2007

cabralobocol.gifLeyendo el otro día la entrada en Microsiervos que citaba la magnífica explicación de Jesús León del problema de Los puentes de Königsberg vino, no sé por qué extraña razón a mi mente, un viejo problema de mi época de estudiante. En concreto era un problema de Inteligencia Artificial sobre resolución de problemas y espacios de búsqueda: El lobo, la cabra y la col. Os transcribo el enunciado del mismo:

Un granjero se encuentra en la orilla de un río junto con un lobo, una cabra y una col. Ademśa dispone de un bote en el que sólo puede transportar una única cosa cada vez. El granjero pretende transportar al lobo, la cabra y la col al otro lado del río utilizando el bote. Sin embargo, debe tener cuidado y no dejar solos en una orilla al lobo y a la cabra porque el lobo se comería a la cabra. Tampoco puede dejar la cabra y la col porque la cabra se comería la col. ¿Cómo conseguiría el granjero trasladar todo a la margen derecha del río?

Este problema que se resuelve fácilmente invirtiendo un ratillo de pensada, nos sirve para explicar métodos de representación de espacios de búsqueda. Para ello utilizaremos el paradigma del espacio de estados que consiste en representar la situación actual de problema en estados.

Sobre el ejemplo presentado, fijaremos primeramente un operador de transición del estado. Representaremos con un tupla los elementos que se transportan en el bote en cada viaje (ida, vuelta). Denominaremos al Lobo con una L, a la cabra con una C y a la col con una X. Debemos de fijar también un estado inicial que en nuestro problema será el listado de los elementos que tengamos en la margen derecha del río (). Y el estado final al que queremos llegar que será (L,C,X), Resumiendo:

Operador: (ida, vuelta) elementos que se transportan en el bote
Estado inicial: () -vacío-
Estado final: (L,C,X)

Asumimos como premisa inicial que si el granjero está en medio de los tres elementos estos no interactúan entre sí, es decir el lobo no se come a la cabra si el pastor está en esa orilla y lo mismo con la cabra y la col.

A continuación se dibuja el espacio de búsqueda de soluciones (perdón por la precariedad):

espaciodebusqueda.png

Los nodos del árbol del espacio de soluciones representan diversos estados del problema. Las líneas que unen los nodos representan los operadores, es decir el viaje del bote.

Como vemos la solución viene dada por 4 viajes (ida y vuelta), hasta llegar al estado final (L,C,X). Por supuesto un ordenador o un procesador no llega directamente a esa solución sino que irá construyendo el espacio de búsqueda según el algoritmo que elijamos. El método que elijamos será el que determine la eficiencia en encontrar la solución. Por ejemplo, no es lo mismo ir construyendo el espacio de búsqueda en profundidad que en anchura… pero los algoritmos ya son otro cantar…

Os dejo un enlace por si queréis probar de manera interactiva a resolverlo.


Technorati Tags: , , ,
Site Search Tags: , , ,

Si te ha gustado lo que has leído te invito a suscribirte al Feed RSS | ¿Qué es el Feed RSS?

Suscríbete para: Google Reader, Bloglines, My Yahoo o My MSN