Programación declarativa: el superbuscador (I)

Programación declarativa: el superbuscador (I)
Sin comentarios Facebook Twitter Flipboard E-mail

A muchas personas les gustan los puzzles, los hay de todo tipo y para todos los gustos. Como programador, uno tiene una cantidad ingente de puzzles con los que entretenerse: cuestiones de diseño, de estructura de datos, de arquitectura, redes, protocolos, ... pero, si el puzzle nos supera, si empieza a ser un puzzle antipático y desagradable, en esos casos, nos suele gustar poder dejarlo, ignorarlo. Pero, ¿y si no podemos?, ¿y si se trata de una funcionalidad que debe cubrir nuestro sistema?, ¡ay!, entonces es cuando tenemos un problema... y gordo.

Es por eso que a muchos programadores nos gusta alparcear con todo tipo de tecnologías, buscamos constantemente formas de simplificar las soluciones a nuestros problemas y ver, cual es la forma más simple, robusta y mantenible.

La programación declarativa busca precisamente ¡que no tengamos que resolver el problema!, tan sólo declarar qué queremos obtener, y obtenerlo. ¡Vaya!, justo lo contrario de resolver un puzzle. En la siguiente serie, veremos en detalle una de las mejores formas de resolver problemas muy complejos ¡sin resolverlos!. ¿Te animas?.

Programación declarativa

La programación declarativa no significa que no haya que hacer *nada* para resolver un problema. Ya hacen casi dos años que en la serie Programación imperativa vs declarativa indicábamos que un lenguaje de programación es declarativo respecto de los problemas que él resuelve por nosotros, abstrayendo (en mayor o menor medida) las técnicas y estrategias que subyacen en su resolución.

En esta serie, pretendo mostrar un lenguaje de programación que permite abstraer *completamente* la búsqueda de las soluciones a nuestros problemas y que, lógicamente, podemos aplicar a una gran cantidad de situaciones.

Además, como es un lenguaje "profundamente" declarativo (nos aisla de las estrategias usadas), sólo debemos refactorizar las declaraciones del problema planteado para que, sin tener que ir más allá, obtengamos de nuevo las soluciones a nuestro problema.

El puzzle

Para que nos podamos hacer una buena idea de la enorme potencia que tiene este lenguaje, voy a plantear un problema bastante complejo, un problema que sin dicho lenguaje muy pocas personas sabrían resolver (y desde luego, yo no sabría), pero que gracias a este fabuloso lenguaje, la mayoría de las personas podemos solucionarlo ¡muy fácilmente! (porque realmente no lo solucionamos).

Aunque el problema va a ser bastante complejo, por obvias razones prácticas no lo voy a plantear tooooodo lo complejo que podría plantearse, de todos modos, sí apuntaré estrategias y enfoques a ciertas cuestiones aunque no queden finalmente implementadas.

El superbuscador

Una de las cosas que uno echa en falta cuando prepara un viaje, es una especie de superasistente que te afrezca las mejores opciones, basadas en tus preferencias y que además, puedas refinarlas con nuevas preferencias.

Por ejemplo, a muchas personas no nos importaría salir unos días antes o después de viaje si con ello obtenemos algo (mejores servicios, mejor precio, comodidad, ...). Tampoco tenemos ni idea del tipo de cosas que queremos ver o visitar, algo de cultura quizás, un poco de espectáculos, playa, etc... pero uno se suele guiar por comentarios como "pues dicen que en esa zona se come bien" o "las playas por ahí están saturadas" y otras por el estilo. Además, cuando uno intenta fijar algunas cosas en las que está interesado, debe empezar a mirar alojamiento, carreteras, empezamos a golpear la calculadora cuadrando los kilómetros que vamos a hacer con los sitios a los que queremos ir "no ahí no que los hoteles son muy malos, mira a ver allí" u otros como "espera, que ahí no abren hasta las 11:00 ¿que hacemos hasta entonces?" o al final otros como "¡cáspita! justo ese día el hotel está cerrado". Total, para después no hacer ni la mitad de lo propuesto, uno con el tiempo se da cuenta, que lo mejor es elegir un sitio a ojo "y ya veremos allí que hacemos".

Eso no quita, que *sepamos* que "ahí fuera", existen soluciones mucho mejores, existe *esa ruta* fantástica que me habría salido un 20% más barata, en mejores hoteles y en cuyas zonas están esas actividades en las que realmente yo estoy interesado.

¿Y si como Michael Knight, tuviéramos un coche fantástico que nos sugiriera las mejores alternativas?, ¿no sería genial que él me calculara automáticamente los hitos de mi viaje para que coincidan además con esas actividades (conciertos, fiestas populares, ...) en los sitios en los que justo voy a pasar cuando ocurran?, ¿verdad que estaría bien decirle que no quiero recorrer más de 100km al día para que no se nos haga pesado el viaje?, ¿decirle que por esa ciudad que me ha sugerido no quiero pasar porque ya la visité y él automáticamente tenga en cuenta mi preferencia?, ¿que como mínimo quiero estar de viaje 5 días y como mucho me puedo permitir 10?, ¿que en cierta ciudad quiero estar varios días porque visitaré a mi abuelita?, etc...

Dedica unos pocos minutos a pensar cómo resolverías tamaño problema.

Dedica unos pocos minutos a pensar cómo resolverías...

Dedica unos pocos minutos a pensar...

Dedica unos pocos...

Dedica...

¿Te parece que resolvamos tamaño problema en unas pocas líneas de código declarativo (unas 100 de código real)?

Pues si te parece, en el próximo post empezaremos a resolver tan fantástico problema...

Comentarios cerrados
Inicio