Tinselcity

Los programadores tienen una especie de fijación con la idea de “reinventar la rueda”. Hace unos días, leyendo el enésimo artículo sobre el asunto, me di cuenta de dónde está el problema de fondo detrás de todo esto. Una vez más es un asunto de metáfora traicionera.

Reinventar el Rodamiento

Los programadores son bastante de reinventar cosas. A la vez, y sin que eso sirva de impedimento, son también muy de decirle a los demás que no reinventen cosas. Ellos reinventan algo porque les parece interesante, es un problema que les gusta o sobre el que quieren tener más control que utilizando el código1) de otros. Pero cuando ven a otra persona reinventando algo que no les parece interesante, tienden a recomendarle que use tal librería o herramienta, que ya hace eso muy bien.

Más allá de la prevalencia de esa parcialidad, casi siempre inconsciente, ocurre que la discusión de “reinventar sí - reinventar no” que se genera sobre esto, se presenta siempre con la metáfora de “reinventar la rueda”. También se han introducido algunas otras expresiones, como NIHS (Not Invented Here Syndrome), que reflejan lo agotadas que están ya las posiciones de uno u otro lado.

Sin embargo, parece que nadie se ha parado a observar que la metáfora usada sobre la rueda ha producido una discusión equivocada, igual que sucediera cuando se comparaba la programación con la construcción de edificios.

La Rueda

Lo primero para poder hablar es entender qué es cada cosa de la que se habla. Si no sabemos lo que es algo -o si ambas partes de la conversación entendemos cosas diferentes- difícilmente podremos discutir sobre sus detalles.

La rueda, cuando hablamos de reinventar la rueda, no es una estructura metálica redonda con un neumático que la cubre y que se pone en los coches o las motos u otros muchos vehículos. La rueda de la que hablamos es una máquina simple. Es decir, es esencialmente un concepto. También es, por supuesto, algo real, tangible, pero es más la abstracción de esa realidad que esta misma. La rueda, de hecho, tiene múltiples aplicaciones como máquina fundamental y por tanto múltiples implementaciones del mismo principio físico.

Por otra parte, cuando hablamos de esa otra rueda, de la que vemos en los coches o bicis, nos encontramos con un problema adicional importante: Ha sido reinventada múltiples veces y con enormes mejoras técnicas a lo largo de la historia. No sólo en las múltiples aplicaciones y variaciones de la máquina simple, sino que incluso restringiéndonos a la aplicación concreta de la “rueda de carro”, ésta ha pasado por numerosas variaciones tecnológicas que han cambiado su naturaleza por completo. Así, fijarnos en que la rueda no deba reinventarse parece un camino envenenado desde su punto de partida.

El Rodamiento

Lo que ocurre es que todo el mundo conoce la rueda, o eso nos decimos, pensando que nos referimos a un tipo específico de rueda que asumimos como universal. Y así es tentador comenzar la discusión ahí porque es fácil, porque aparentemente es una metáfora que todos conocen bien.

Por otro lado tenemos el rodamiento. El rodamiento es más complejo, más delicado. En el fondo, el rodamiento es en cierto modo el “secreto del éxito” de la propia rueda. El rodamiento es la implementación práctica de la articulación cilíndrica, es decir, es lo que nos permite a la vez sujetar un eje en su lugar, a la vez que le permitimos girar sobre si mismo2).

El rodamiento normalmente no se ve. Todos lo conocemos, pero no es algo tan visible y presente como la rueda. Está ahí, pero dentro. Utilizarlo como metáfora o ejemplo en una discusión no es, claramente, ni tan inmediato ni tan sencillo. Porque además, como decía el rodamiento es más complejo.

Un rodamiento es “una cosa seria”. Inventarlo o reinventarlo no es algo que se haga en cinco minutos. Más que nada porque no es una única cosa, sino una familia de ellas. Es decir, hay un problema original, que es el de implementar una articulación cilíndrica, y hay numerosos parámetros y variantes que terminan dando como resultado soluciones similares pero con características mecánicas suficientemente diferentes como para que no podamos reducirlas a una sola.

Al diseñar un rodamiento necesitamos saber cuáles de esos parámetros nos importan más y cuáles podemos sacrificar, cuáles aplican y cuáles no, en resumen cuál de las variantes debemos elegir. Para hacernos una idea más clara: Una cierta articulación puede requerir soportar cargas (fuerzas) muy altas pero hacerlo a velocidades relativamente bajas. Otra articulación diferente puede soportar menos carga pero deber funcionar a velocidades más altas. Podemos tener un rodamiento que permita cierta desalineación entre el eje y la rueda, o uno que también deba soportar cargas paralelas al eje (no solo perpendiculares). Todas estas variaciones en los requerimientos nos lleva a variaciones en la solución.

No sólo esto. Las ecuaciones a resolver a la hora de diseñar el rodamiento y sus partes, tampoco son sencillas. Debemos hacer ciertas simplificaciones, tener en cuenta múltiples efectos e interacciones, etc.

Usar Ruedas y Usar Rodamientos

Hay una serie de hechos interesantes a considerar cuando hablamos de hacer y de usar rodamientos:

  1. Los rodamientos no son todos iguales. Tendemos discutir la idea de reinventar la rueda bajo la premisa de que la rueda “es lo que es”, que todos sabemos cómo es una rueda y que no hay mucho más de dónde sacar. La realidad es muy diferente. También existe una gran variedad de ruedas3), pero no pensamos en ellas y asumimos que más allá de ser de un material o de otro, son todas más o menos equivalentes.
  2. Pensamos también que “si necesito que aguante más, pues pongo una rueda más gorda” o “más dura” porque son asociaciones simples. Con los rodamientos no podemos hacer tan fácilmente estas asociaciones. Usar un rodamiento de un tipo o de otro necesita un conocimiento bastante específico de nuestra circunstancia y también un conocimiento razonable del propio rodamiento, y no usar el apropiado es una forma fácil de destruir por completo nuestra máquina.
  3. Es un problema resuelto y sobre todo cerrado. Sí, tiene muchas variantes y cálculos asociados pero más allá de eso el problema está mayormente resuelto y así es como lo considera la mayoría de la ingeniería. Esto no quiere decir que no se creen nuevas modalidades o variaciones. Lo que quiere decir es que para la enorme mayoría de casos, existe una solución cerrada ya disponible. Hay fabricantes de rodamientos que se dedican exclusivamente a crear rodamientos. Ellos conocen el problema a fondo; es -digámoslo así- su problema. Sin duda dedican un esfuerzo importante a la investigación del problema a buscar mejores soluciones, pero las variaciones que puedan surgir seguirán siendo soluciones cerradas. Es decir, que no necesitan que quien usa esa solución conozca las interioridades más específicas del problema, solo cómo se comporta hacia afuera.
  4. La solución estándar es, incluso cuando la circunstancia es peculiar, la solución inicial. Esto quiere decir que, por defecto, lo primero que hace un ingeniero que necesita poner un rodamiento en su máquina es coger los requerimientos que ha calculado e irse a un catálogo de rodamientos y buscar ahí el que mejor aplica. Solo cuando no existe un rodamiento estándar que encaje en su circunstancia, es cuando se plantea la opción de diseñar un rodamiento específico y especial. ¡Incluso más! Cuando no encuentra un rodamiento estándar lo que en realidad hace muy rara vez es “hacérselo él mismo”. Lo que hace es acudir a un fabricante de rodamientos, uno de esos que ha hecho del rodamiento su problema, y buscar la solución con él.

La mayor parte de lo comentado sobre los rodamientos, es lo mismo que hace -aunque más limitadamente por haber menos variación- un ingeniero con la rueda. Ni Ferrari ni Volvo hacen ruedas. Y hacer una rueda nueva a veces tiene interés y es necesario, pero no es algo que haga cualquiera por capricho.

Pero entonces, ¿qué? ¿Sí o no?

Ahí está el tema. No se trata de “sí o no”. De lo que se trata es de lo mismo que se trata siempre: de hacer lo que tenga sentido hacer. En unos casos será que sí, en otros que no.

La mayoría de las veces no tiene ni sentido, ni interés, ni justificación reinventar el rodamiento. Usaremos un rodamiento estándar, que elegiremos conociendo bien nuestro problema y sabiendo cuál entre los varios rodamientos se adapta a este, y será a la vez mejor y más barato que lo que pudiéramos hacer nosotros mismos. En ocasiones, pocas pero algunas, un rodamiento estándar no encajará. Entonces acudimos al fabricante de rodamientos, que no solo conoce los entresijos del rodamiento con muchísimo más detalle que nosotros, sino que además probable que aunque no sea “de catálogo” pueda proporcionarnos un rodamiento especial que sí encaje con nuestra necesidad.

Solo en algunos casos muy contados con circunstancias muy especiales, si somos fabricantes de rodamientos, o si tenemos otro tipo de motivación más allá de su uso, nos preocuparemos por reinventar el rodamiento.

Sea como sea, la conclusión fundamental de todo esto no es ni siquiera esta, sino el hecho de que el uso de la reinvención de la rueda como metáfora empaña y oculta aspectos que terminan haciendo que la discusión sea inútil y estéril como la mayoría de las discusiones entre programadores.

1)
y, por tanto, la forma de pensar
2)
es decir, ser un eje
3)
más aún si ampliamos el conjunto al concepto más general de rueda y no sólo a nuestra inmediata imagen de una rueda de bici o de coche