Simplificando lo complejo

A lo largo de nuestra vida, mientras fuimos madurando, nos enfrentamos a un sin número de situaciones que han complicado cada uno de nuestros pasos por este mundo, de infantes, es posible que estuviera un adulto cerca que nos ayudó a sortear el obstáculo, algunos quizá lo han hecho solos desde el inicio. 

Los problemas son cosa de todos los días en nuestra vida diaria y, por supuesto, en el trabajo. En el desarrollo web, todos los días nos enfrentamos a situaciones que complican el avance de un proyecto, situaciones que debemos resolver en el menor tiempo posible para no afectar los tiempos pactados con el cliente.

Afortunadamente vivimos en una época donde el conocimiento se encuentra al alcance de nuestros dedos (siempre y cuando tengamos conexión a Internet), una búsqueda rápida en google o en stack overflow y listo, seguro que alguien ya ha pasado por esto, nos leemos su solución, tal vez adoptamos parte de ella y la integramos en nuestro desarrollo y ya fue, se llamaba, muchas gracias por leer, bonito día.

Pero… ¿y si a nadie le ha pasado lo que a nosotros? ¿y si no sabemos explicar lo que necesitamos o lo que está pasando? Al no haber un error claro, ¿cómo empezar a pedir ayuda?

Bueno, a decir verdad, esta es la clase de situaciones por la cual muchas personas siguen en la profesión, es un verdadero disfrute enfrentarse a un problema tan complejo y resolverlo de una forma tan práctica y sencilla (a criterio propio).

Algo que debemos tener presente es no detenernos ante un obstáculo, que si algo no es posible por alguna razón, entender el por qué no es posible y hacerlo lo posible para hacerlo posible, tal vez mientras descubrimos por qué no se puede nos demos cuenta de un camino que no se ha recorrido, a lo mejor no podemos resolver el problema como quisiéramos, pero existen opciones, alternativas, enfoques que nos pueden ayudar a obtener la solución.

Oye, oye, todo esto muy bien, pero ¿cómo llego a esa solución? ¿existe algún método, pasos a seguir?

Pues existen métodos, técnicas, y demás que nos pueden ayudar encontrar soluciones, dibujar o escribir el problema en el centro, a partir de ahí puedes ramificar soluciones y, si no se pueden, poner la razón. Tal vez teniendo una mejor perspectiva del problema podremos encontrar la solución, no más fácil, pero sí más clara.

Existe también el famoso “peloteo”, que consiste en platicar tu problema con alguien, cuando lo platicas te das cuenta lo entendido que tienes el problema, si aún no lo has comprendido bien, es muy difícil de explicar, cuando ya sabes en qué consiste, el peloteo te permite explorar diferentes alternativas para solucionar, además de aprovechar la perspectiva de alguien más sobre el mismo.

Esta técnica igual se puede hacer solo, aunque es muy raro ver en la oficina a alguien hablando solo, algo que puedes hacer es pedirle a alguien que sólo te escuche mientras “peloteas contigo mismo”, digo, cada quien. 

Al final de cuentas, el entender el problema es una parte fundamental para empezar a resolverlo, tener claro todo lo que involucra que sepamos las condiciones para resolverlo, qué actores participan, tener un panorama completo nos permitirá tomar una mejor decisión para resolver el problema, veamos un ejemplo:

El zorro, la gallina y el costal de maíz.

Este es un acertijo muy conocido, se trata de un problema con limitantes, es decir, para resolverlo hay que cumplir con ciertas condiciones lo que lo complica, el acertijo dice:

“Un granjero debe cruzar un río con una gallina, un costal de maíz y un zorro.

El granjero cuenta con una balsa que le ayudará a cruzar el río, el problema es que su balsa no parece tan resistente como para transportarlos a todos y sólo puede transportar a un pasajero a la vez.

El granjero no puede dejar sola a la gallina con el maíz porque se lo comería y el zorro no puede estar con la gallina porque la devoraría ¿qué debería de hacer el granjero para que todos lleguen sanos y salvos al otro lado del río?”

Muy bien, analicemos el problema, primero dibujemos el escenario para que nos sea más fácil visualizarlo:

Según la información dada, el granjero es el único actor que viajará entre la salida y el destino todo el tiempo pues él debe guiar la balsa, por esta cuestión podemos determinar lo siguiente:

  • Sólo podrán transportarse máximo dos actores a la vez, uno de ellos siempre debe ser el granjero
  • Para poder lograr la meta, deberá pasar al resto de los actores uno a uno

La siguiente parte del acertijo nos advierte de dos situaciones que no deben ocurrir:

  • La gallina no puede quedarse sola con el zorro
  • La gallina no puede quedarse sola con el maíz

Esto convierte a la gallina como el actor clave, el granjero debería cruzar primero con la gallina, al cruzar con la gallina estaremos creando una zona segura porque el zorro es indiferente al maíz, quedándonos algo así:

El siguiente paso puede ser el que confunda y el que nos haga pensar que deberíamos volver a empezar, si el granjero transporta a cualquiera, zorro o maíz, al llegar con la gallina existirá una zona de riesgo, ¿cómo lo resolvemos? ¿cómo seguimos adelante?

Es en esta parte en la que podemos utilizar algún método que nos ayude a imaginar la solución, en este caso, creo que con una segunda revisión del problema lo podemos resolver, primero que nada, ¿tenemos a todos los actores? Tenemos a la gallina, al zorro y al maíz…  nos falta el granjero, este también es un actor, inconscientemente lo ignoramos porque se mueve a través del inicio y el destino, como si estuviera en ambos lados del río a la vez y no, el granjero se mueve junto con otro actor, por lo que se deduce que existe una tercera zona o un tercer estado en donde pueden estar los actores: la balsa.

Permítanme hacer unos dibujos para aclarar mejor mi idea:

A partir de este dibujo y junto a las reglas que definimos anteriormente, podemos agregar algunas más que habíamos ignorado, las reglas que teníamos hasta ahora eran:

  • Sólo podrán transportarse máximo dos actores a la vez, uno de ellos siempre debe ser el granjero
  • Para poder lograr la meta, deberá pasar al resto de los actores uno a uno
  • La gallina no puede quedarse sola con el zorro
  • La gallina no puede quedarse sola con el maíz

Una nueva regla que podemos definir es la que resulta de las condiciones que impiden a la gallina estar con el zorro o el maíz, es decir, la gallina no puede estar con ninguno de esos actores sola pero sí puede estar con ellos si el granjero los acompaña, por lo que podemos definir que las zonas de riesgo desaparecen cuando el granjero está presente, lo que significa:

  • La gallina puede estar sola o con cualquier actor siempre y cuando esté acompañada del granjero.
  • El zorro y el maíz pueden quedarse solos

Esto nos permite pasar al maíz o al zorro con la gallina sin ningún problema siempre y cuando el granjero también esté con ellos, si el granjero pasa al zorro, y luego va por el maíz, dejaría sola a la gallina y eso no es posible.

El primer paso sería que el granjero se suba a la balsa con la gallina, esto es válido porque: 

  • El zorro y el maíz pueden quedarse solos.
  • La gallina está junto al granjero y por lo tanto está segura.
  • En la balsa hay dos actores: el granjero y la gallina, cumple con el máximo y el granjero está presente.

El siguiente paso sería pasar de la balsa al destino, y de igual manera, las condiciones se cumplen pues el granjero está con la gallina  y no existe un punto de riesgo:

El siguiente paso sería el regreso del granjero a la Salida, esto significa que pasará del Destino, a la Balsa y posteriormente a la Salida, esto es válido ya que:

  • La gallina puede estar sola en el Destino
  • En la balsa sólo pueden estar máximo dos actores, uno está bien, siempre y cuando ese sea el granjero, por tanto cumplimos con la regla.

Aquí podemos tomar a cualquier actor, pues cualquier cambio en la isla es un cambio válido, tomemos el maíz:

Estamos en el punto crucial de hace un momento, la gallina no puede quedarse sola con el maíz, pero definitivamente no podemos dejar al zorro en la salida, hace un momento, pudimos darnos cuenta que el granjero regresó a la isla solo, pero, ¿y si se regresa con la gallina? Claro, claro, la idea es pasar a todos los actores, pero para garantizar que el maíz esté a salvo, es necesario que movamos a la gallina a la balsa y luego a la Salida, todo nos dice que cuando los actores están en el Destino, ya están en el lugar deseado, que regresar a la Salida es dar un paso atrás en la solución, pero, para resolver este problema, es necesario dar ese paso atrás, a veces las soluciones son esas que creíamos que no se podían por alguna razón, nadie nos dijo que no era posible, sólo lo asumimos porque no estaba claro, a veces la solución es dar una vuelta de más, un paso extra que nos hace creer que está mal, que es hacer trampa, que no podría ser tan obvia, que debe haber otra forma y quizás sí, pero si ya tienes esta solución que funciona, cumple con las reglas, ¿por qué no usarla? ¿por qué aferrarnos a la solución más complicada a la que se ve más “pro” cuando ya tenemos una igual de ingeniosa y creativa?

Estás atrapado en un calabozo y hay tres puertas frente a ti, cualquiera de ellas te lleva a la salida pero todas tienen un obstáculo

  • La primera tiene un pozo profundo y en el fondo hay pinchos afilados
  • La segunda puerta está llena de leones que no han comido hace semanas por lo que están de malas y muy hambrientos
  • La tercera libera un gas venenoso al detectar movimiento, el gas te mataría en sólo un par de milisegundos una vez que entre en contacto con el cuerpo, es decir, ni siquiera hace falta respirar para que sea mortal

¿Qué puerta tomas?

Pues la de los leones que no han comido en semanas, ¿no?, si no han comido en semanas significa que están muertos, por lo que cruzar por ahí sólo sería algo incómodo de ver y bastante fétido.

El problema es bastante lineal, sólo es cuestión de poner atención y daremos con la respuesta, muchos problemas son así, es cuestión de enfocarse en el problema y la solución aparece, otros, como en el que estamos atorados, es un problema que requiere de pruebas, de intentos, de hacer combinaciones.

¿Para qué darle más vueltas? ¿qué tiene que apliquemos una solución tan fácil a un problema que nosotros mismos consideramos “difícil”? Por eso es necesario que entendamos el problema, al hacerlo, lo estamos aterrizando a una realidad que nos permite ver su verdadera naturaleza, a veces no se trata del método que usemos sino del resultado. 

En una ocasión un profesor, en un examen, preguntó: ¿qué entiendes por compuertas lógicas?, sin importar la respuesta, todos los que contestamos algo, tuvimos correcta la pregunta. ¿Sin importar la respuesta? Sí, no nos preguntó la definición exacta de las compuertas lógicas, ni ejemplos, ni cómo funcionan, nos preguntó lo que entendíamos del tema, qué tan lejos o cercanos estemos de la definición ya es otra cosa, aquí se pidió una opinión propia, muchos compañeros no respondieron porque pensaron que había una especie de trampa, que si ponían lo que entendían y no estaba correcto se las marcaría como un fallo. 

Un problema es tan complejo como nosotros lo entendamos, si lo entendemos bien, este deja de ser complejo, difícil, tal vez, depende de lo que se necesite para resolverlo, pero al simplificarlo, al separarlo, al tener claro el punto al que se quiere llegar y las condiciones que lo impiden, entonces podemos llegar a imaginar las soluciones.

Ajá, sí, todo muy bien, ¿y el granjero? Claro, vamos al problema planteado, nos quedamos entonces en que para evitar que la gallina se coma el maíz, el granjero la debe de llevar de vuelta al estado de Salida, por lo que gráficamente nos quedaría así:

Todo ese paso es válido porque:

  • En la balsa sólo van la gallina y el granjero
  • El maíz puede estar solo
  • El lobo y la gallina pueden estar juntos siempre y cuando el granjero los acompañe

Para el siguiente paso, el granjero ahora se llevará al zorro, con esto deja sola a la gallina en la Salida, esto está bien porque la gallina se puede quedar sola y el granjero, después de dejar al zorro, puede volver por la gallina sin ningún problema pues el zorro y el maíz pueden estar solos.

Creo que para este punto sabemos que el movimiento es válido. Ya para terminar el granjero regresa por la gallina y luego se la lleva al Destino.

Sabemos que este paso es válido porque el zorro y el maíz pueden quedarse solos. Ya para el último paso el granjero se mueve de la salida junto a la gallina al destino y terminamos con este problema.

Listo, logramos que el granjero y los demás animales cruzaran el río, logramos resolver este acertijo, esto se vive todos los días en el desarrollo web, hay condiciones que cumplir, hay limitaciones tanto de experiencia, conocimientos, alcances, tiempo, de hardware, de software, etc. 

Los desarrolladores web no solo poseen los conocimientos para llevar a cabo los proyectos, también crean soluciones para los mismos, de modo que puedan entregar el mejor producto posible para el alcance definido.

Es una tarea de todos los días que mantiene nuestros cerebros ocupados en encontrar la forma de resolver una situación que se nos complica, y si ya se ha resuelto, igual y podemos buscar una forma de simplificarlo más, pulir la manera en que se llega, sin complicarlo de más, podemos partir justo desde la solución, esto mantiene nuestra mente afilada, preparada para sobrepasar cualquier obstáculo, si nos llega una fácil, perfecto, que sea fácil no significa que sabe menos o tiene menor valor, y si nos costó trabajo, también qué bueno, en ambos casos tratemos de analizar el camino que tomamos para llegar a la solución, esto nos ayudará para próximas ocasiones, nos puede facilitar mucho tener un mapa mental que nos ayude a encontrar esos detalles o chispas que nos hagan decir: “Ahhh ya sé cómo hacerle”, como dije, es trabajo de todos los días, no sólo disfrutemos el destino, también el viaje.


Eduardo Fierros
Eduardo Fierros

Eduardo

Frontend Developer

Melómano de nacimiento, cinéfilo de corazón, sarcástico por decisión, Maestro Pokémon, Bárbaro nivel 99 con oscilación doble como ataque principal. Amante de los festivales y por supuesto la cerveza oscura + alitas, tirando líneas de código al ritmo de guitarrazos y percusiones a doble bombo desde los 90's.

__

"Paciencia, prudencia, verbal continencia, dominio de ciencia. Presencia ¿o ausencia?, según conveniencia"