El 4º Poder en Red

Reinventando la rueda, ¿otra vez?

Daniel Lombraña González
Investigador y Desarrollador Senior del Citizen Cyberscience Centre, Fellow de la Fundación Shuttleworth

Está claro que reinventar la rueda en los tiempos actuales es algo a lo que nos hemos acostumbrado. Por ejemplo, con el reciente cambio en la tarifa eléctrica Española, hemos podido ver como las tiendas de aplicaciones para móviles eran invadidas por varias aplicaciones que hacen prácticamente lo mismo: informarnos del coste de la luz por horas para que así podamos "ahorrar". Aunque este pueda parecer un caso aislado, lo cierto es que existen cientos de aplicaciones que son muy similares o parecidas para los móviles (juegos, chat, etc.) o para la web (por ejemplo Youtube y Vimeo).

Como resultado de esta replicación de aplicaciones y esfuerzos, es bastante frecuente que entre los programadores se reprochen estar reinventando la rueda, y que además su rueda es la verdaderamente buena. Pero a mi parecer es raro que en un sector tan dinámico sea percibido por una parte de sus actores como una actividad tan mimética y poco innovadora, por lo que ¿es realmente malo reinventar la rueda?

Está claro que reinventar la rueda conlleva un gasto enorme de energía y recursos para producir más o menos el mismo producto con ligeras variaciones. Ahora bien, ¿es este un argumento suficiente para dejar de reinventar la rueda?

Tras pensar detenidamente sobre este problema, me he dado cuenta de que en muchos casos lo que estamos haciendo cuando discutimos sobre si estamos o no reinventando la rueda es en realidad una discusión sobre la evolución de las especies.

Veámoslo con un ejemplo. Imagina que queremos crear el juego más adictivo y entretenido de la historia para móviles. Imagina por un momento que ese juego existe, el juego definitivo. Sin embargo, no sabemos ni donde está, ni cómo es, por lo que tenemos ante nosotros la búsqueda del Santo Grial: desarrollar el mejor juego de la historia.

Como en cualquier viaje o búsqueda, comenzamos por el principio, y este inicio para el juego es una versión sencilla, modesta, pero al fin y al cabo jugable. Como cualquier recién nacido, la primera versión no es la mejor, le faltan algunas características, falla un montón y tiene una pequeñísima comunidad (la primera generación). Cuando este equipo está desarrollando su juego, otro grupo decide comenzar a desarrollar su propio juego, y casualidades de la vida ambos juegos son muy parecidos (juegos de carreras, de preguntas, puzzles, ¿os suena Flappy Bird y todos sus clones?).

flappy-detalle

Como vemos, ambos grupos están desarrollando una solución para un mismo objetivo, por lo que ambas soluciones van a compartir una serie de bloques básicos de construcción (puntuaciones, niveles, compartir los resultados en las redes sociales, etc).

Sin embargo, aunque ambas soluciones comparten ciertas características básicas, ambos juegos son diferentes. En otras palabras, cada juego tiene sus propias características: como se gestiona el proyecto, la tecnología utilizada, la comunidad que les rodea, etc.

Cuando ambos juegos son subidos a sus "play store", la supervivencia del más fuerte o mejor adaptado es patente. Empiezan a competir entre ellos. Luchan por sobrevivir en un mercado muy competitivo: el de los juegos y las aplicaciones móviles.

Tras unos meses de interacción con los usuarios, ambos juegos se renuevan sacando nuevas características, niveles, arreglo de errores, aprenden de errores, etc. En otras palabras, evolucionan para dar paso a una nueva generación mejor que la anterior.  Hasta ahora, todo este proceso podría describirse como un algoritmo genético el cual además se basa en la teoría de la evolución.

A groso modo, en un algoritmo genético las mejores soluciones candidatas a un problema se reproducen generando nuevos hijos gracias a unos operadores de mutación y cruce. Desde el punto de vista del software, el cruce y mutación entre soluciones candidatas es más complicado, sin embargo sí que se pueden observar estas operaciones.

Por ejemplo, desarrollar una característica que posee otro juego -añadir niveles en los que puedes ver por dónde van otros jugadores- puede considerarse la operación de cruce. Incluir una nueva característica que hace al juego único y diferente, es lo que podría considerarse una mutación.

Aunque no es exactamente lo mismo, creo que el paralelismo que estoy intentando mostrar es evidente, dado que todos los proyectos en algún momento de su vida compiten por sobrevivir, implementan características similares de otros proyectos y añaden sus propias y únicas características para diferenciarse del resto. Por lo tanto, todas estas características pueden tratarse como los genes que los definen.

Gracias a la teoría de la evolución sabemos que "sin la variación genética una población no puede evolucionar como respuesta a un cambio ambiental, y como resultado, esta puede enfrentarse a un aumento del riesgo de su extinción". Por lo que parece que es bueno que tengamos diversidad genética dentro de una misma especie, en nuestro caso, similares características dentro de un mismo tipo de juegos o software.

Si además tenemos en cuenta que la diversidad genética juega un importante rol en la supervivencia de las especies, entonces podemos asumir que tener distintos proyectos que intentan resolver un problema no es malo, sino todo lo contrario: es realmente bueno.

Entonces, si solo tenemos una solución para un tipo de problema, es decir, si no reinventamos la rueda, corremos el riesgo de que la única solución desaparezca dada su poca diversidad genética.

Por lo tanto, a mi parecer, reinventar la rueda es algo bueno, muy bueno, porque es una técnica que asegura la diversidad genética (diferentes características) para los distintos proyectos de forma que casi todos puedan sobrevivir.