Reinventa la rueda - Reinvent the Wheel
(endler.dev)- El consejo de "no reinventes la rueda" puede tener un efecto negativo al reprimir la creatividad y la curiosidad exploratoria
- En el proceso de crear una rueda nueva, es decir, recrear herramientas o tecnologías existentes, se obtiene comprensión profunda y aprendizaje
- Incluso los componentes básicos que parecen simples o familiares en realidad incluyen complejidad y múltiples trade-offs
- Al intentar inventar tu propia rueda, se fortalecen las capacidades de crecimiento, resolución de problemas y experimentación
- Se enfatiza la necesidad de elegir con equilibrio, según el propósito, entre usar resultados existentes y reinventarlos
Reinvent the Wheel
- La frase "no reinventes la rueda" tiene buena intención, pero suele venir de dos tipos de personas
- Quienes intentaron construir una rueda por sí mismos y vivieron su dificultad
- Quienes nunca lo intentaron y solo siguen ciegamente el consejo establecido
- Cuando este consejo se repite, termina creando un ambiente que desalienta la curiosidad y el espíritu de exploración
- Se subraya que, si todo el mundo hubiera seguido ese consejo, no habríamos logrado muchas de las comodidades y avances modernos
- De hecho, la rueda ha sido reinventada muchas veces desde su invención inicial y ha seguido evolucionando
Nota: aquí, "rueda" puede entenderse como cualquier herramienta, protocolo, servicio, tecnología u otra creación
Inventar la rueda uno mismo es aprender
"Lo que no puedo crear, no puedo decir que lo entiendo"
— Richard Feynman
- Para entender algo de verdad y en profundidad, hace falta la experiencia de implementarlo uno mismo, aunque sea en una versión pequeña
- Aunque el resultado no sea perfecto, e incluso si luego no se usa, el proceso mismo de implementarlo es lo importante
- Muchos conceptos de ciencias de la computación —protocolos, criptografía, servidores web, etc.— pueden parecer difíciles, pero en realidad cualquiera puede intentar construirlos
- Si más personas se animan a crear estas cosas por sí mismas, tendrán la oportunidad de comprender la estructura y la esencia de las tecnologías existentes
Todo es un proceso de exploración sin fin (Rabbit Hole)
- Los bloques básicos que damos por sentados —por ejemplo, cadenas de texto, rutas de archivo, etc.— en realidad son muy complejos
- Intentar implementar tu propia librería de cadenas o de rutas puede convertirse en una gran oportunidad de aprendizaje
- A través de este proceso se descubren cosas como
- Incluso en lo cotidiano existe una complejidad casi infinita
- Crear algo útil para otras personas es una oportunidad para aprender humildad
- Toda abstracción fue creada por seres humanos, no es perfecta y también podría tener otros trade-offs propios
- Durante la implementación uno se enfrenta a innumerables decisiones y problemas relacionados con precisión, simplicidad, rendimiento, escalabilidad y portabilidad
- La solución que uno construye puede sobresalir en algunas áreas, pero no encajar con todos los usuarios o situaciones
- Las soluciones existentes también tienen límites y pueden no ajustarse a mi problema
- La experiencia de profundizar hasta el final en un solo problema forma parte del crecimiento como ingeniero
- Si uno solo va saltando de proyecto en proyecto, no obtiene un aprendizaje significativo
Por qué hay que reinventar la rueda
- Porque se busca crear una rueda mejor que la existente (y “mejor” puede significar muchas cosas)
- Porque el objetivo es aprender cómo se construye una rueda
- Por el propósito educativo de enseñar a otras personas el principio de la rueda
- Porque al explorar el proceso de inventar la rueda se obtienen nuevas revelaciones
- Porque se desarrolla la capacidad de repararla o mejorarla por cuenta propia cuando falla
- Porque se adquieren diversas herramientas y técnicas necesarias para construir una rueda
- Porque ayuda a entender el papel de la rueda como parte de sistemas compuestos (por ejemplo, un automóvil)
- Porque se intenta crear una rueda muy especial para una necesidad específica (por ejemplo, una silla de ruedas, una patineta o un torno de alfarero)
- Porque la rueda que uno creó puede terminar usándose mejor para algo completamente distinto de su propósito original
- Porque en el mundo las ideas nuevas fuera de lo convencional pueden cumplir un papel importante
Reuse vs Reinvent
- No se debe ignorar el trabajo de otras personas; es necesario estudiarlo y aprovecharlo adecuadamente
- Hay que tener cuidado de no desechar lo existente y construir algo nuevo simplemente por desconfianza o ignorancia
- Pero, si no se implementa o experimenta por cuenta propia, es difícil lograr una comprensión central y un avance real en ese campo
- En ingeniería de software, los pequeños experimentos y la creación de prototipos son fáciles y rápidos, así que resultan eficaces para resolver problemas personales
- Se recomienda empezar en pequeño, implementar de forma simple e iterar
- Así que mi consejo final es
- Si quieres insight, atrévete a reinventar
- Si quieres impacto, reutiliza soluciones ya comprobadas
"Reinvent for insight. Reuse for impact."
"Reinventa para obtener insight. Reutiliza para generar impacto."
8 comentarios
Cuando intenté convertir una rueda cuadrada en una redonda, recordé las palabras del jefe de que no reinventáramos la rueda. Todavía hay muchos por ahí poseídos por el fantasma del “no reinventes la rueda”.
Así como "después de ahogado el niño, tapan el pozo" no significa que no debamos prepararnos para el futuro,
creo que "no reinventes la rueda" tampoco significa que no debamos invertir tiempo en obtener comprensión.
Si se recorta el contexto en el que surgieron esas palabras, se distorsiona su verdadero significado.
Es una experiencia reciente, pero hace poco hice mi propia rueda muy especial.
Construir una app de 1000 páginas en Nuxt tomaba 7 minutos,
pero al renunciar a algunas automatizaciones y reescribirla, logré una compilación de 20 segundos.
Es difícil tomar la decisión de hasta dónde reinventar y hasta dónde apoyarse en dependencias externas.
En cualquier caso, elegir esa dependencia para ahorrar tiempo aunque podría construir esto por mi cuenta, y quedar atado a la dependencia porque sin ella no puedo crear el servicio, son historias completamente distintas.
Quizá no sea posible para todo el código (como un sistema operativo), pero incluso así, esforzarse por ir lo más posible hacia lo primero ayudará a entender mejor el sistema.
Los refranes tienen un significado implícito, pero cada vez hay más gente que los interpreta solo de forma literal.
Si ese tipo de ideas se pone de moda, otra vez la sala de reuniones se vuelve un caos como si nada.
Los adictos al papeleo se emocionan y se desatan, y el mismo fracaso se repite otra vez cada año.
Opinión de Hacker News
Tengo experiencia reinventando la rueda por mi cuenta en un campo específico. No fue algo que intentara hacer desde el principio, sino porque pensaba que la tecnología existente estaba mal. Normalmente abordo problemas que suelen considerarse imposibles con una estrategia de divide y vencerás. Tuve suerte y fui terco, así que al final lo logré. Mi rueda mostró un rendimiento abrumadoramente superior en ese campo. Al experimentar, cosas que antes se creían imposibles se volvieron muy fáciles de hacer. Con el tiempo, otras personas de ese campo también empezaron a usar mi rueda. Al principio todos se quedan desconcertados, pero una vez que la aprenden ya no vuelven atrás. Recibo reportes de bugs y solicitudes de funciones sobre casos de uso y flujos de trabajo extraños de todo el mundo. Tengo conversaciones técnicas profundas con personas inteligentes que jamás habría conocido en persona. Veo a otros lograr resultados que nadie había imaginado con la rueda que hice. Hago nuevos descubrimientos que me quitan el sueño. También es divertido ver a mis colegas quedarse con la mente en blanco cuando les explican las capacidades de mi rueda. No hay que tener miedo de reinventar la rueda. Nadie sabe por qué camino loco puede rodar
Creo que falta una razón realmente importante, aparte de hacer mejor una rueda existente. Es que puedes crear una rueda que te quede perfectamente a ti y seguir usándola tal cual. A menudo veo que la gente, con eso de “no reinventes la misma rueda”, intenta meter a la fuerza una rueda de auto en una bicicleta. Si construyes tú mismo cada parte de tu sistema para que todo encaje bien, puedes obtener beneficios mayores de lo que uno pensaría
Una razón importante para volver a hacer la rueda es evitar que se agregue complejidad innecesaria por dependencias inútiles
Totalmente de acuerdo con esto. Las bibliotecas famosas resuelven problemas en muchos contextos distintos, y por eso muchas veces incluyen un montón de código innecesario. Lo importante es que, si puedo construir en poco tiempo la función que necesito, hacerlo yo mismo mejora la usabilidad y mantiene las dependencias al mínimo. Eso sí, jamás recomendaría hacer tu propia biblioteca de criptografía
Esta es la mayor razón por la que vuelvo a hacer la rueda. Las dependencias traen consigo varias funciones que no quiero. Yo solo necesito algo que sirva para ir a la tienda de la esquina. Y en lo personal no confío en código opaco. Incluso si uso una dependencia, tiene que ser algo que yo mismo podría hacer invirtiendo un día, y que además pueda revisar. No uso binarios cuyo código fuente no pueda ver, a menos que los compre. Si es gratis, el código fuente debe estar publicado sí o sí
Yo hice mi propia biblioteca de task runner basada en DAG (grafo acíclico dirigido). Hice que las tareas pudieran pertenecer a colas. Quería ejecutar demos en el navegador web, así que implementé un backend con IndexedDB; para apps de Electron, uno con SQLite; y para entornos de servidor multiusuario, uno con Postgres. Además le agregué un limiter para control de velocidad. También tuve que crear por mi cuenta varias otras ruedas, como procesamiento de grafos y manejo de tareas. Si quieres hacerlo totalmente sin dependencias, de verdad hay muchísimo por hacer. Pero tengo una rama aparte donde uso TypeBox para crear y validar esquemas de entrada y salida de tareas. Al final, parece que podría terminar agregándose otra dependencia al núcleo
Otra razón es que puedes entrenar, mediante la práctica, tu capacidad de inventar o investigar cosas nuevas. Incluso con problemas ya resueltos puedes practicar de sobra
A veces reinvento la rueda para evitar complejidades como abstracciones o modularización innecesarias
Fue un buen ensayo para reflexionar. Yo tuve una experiencia parecida: construí desde cero una biblioteca de machine learning estilo PyTorch (ml-by-hand) usando solo Python y NumPy. Empecé con un pequeño motor de autograd y fui implementando gradualmente capas, optimizadores, dataloaders y demás por mi cuenta. Lo empecé puramente porque quería aprender los principios fundamentales. Con esta biblioteca hecha por mí repliqué desde una red neuronal convolucional clásica (cnn example) hasta un GPT-2 simple (gpt2 example). Llegué a entender mucho mejor cómo funciona internamente el machine learning sin las abstracciones de PyTorch o TensorFlow. En cierto sentido, con la rueda que reinventé terminé construyendo también el auto por mi cuenta
Sumando a la idea de que quienes suelen decir “no reinventes la rueda” son dos tipos de personas, creo que en realidad hay un tercer tipo, mucho más común. Es la gente que realmente conoce las dificultades de reinventarla y que, incluso después de pasar por ese proceso, concluye que no vale la pena hacerlo por cuenta propia. Sea por motivos educativos o por cualquier otro, consideran que no lo vale
Reinventar la rueda es la mejor forma de aprender. Pero creo que eso solo es cierto en un contexto de aprendizaje. A mí también me gusta profundizar mucho en algo, pero en el trabajo a menudo no puedo explorar libremente porque hay que cumplir plazos y otras restricciones. Si la rueda que hiciste se va a usar realmente en producción, tendría que ser de verdad muy superior a la existente para justificar su uso
El 99% de quienes reinventan la rueda en el trabajo ni siquiera entienden bien cómo está hecha la rueda existente ni por qué tiene esa estructura de compromisos
Hacerlo tú mismo no necesariamente es la mejor manera de aprender. Requiere mucho tiempo y costo. Con buena documentación y un entorno de experimentación bien armado se puede aprender lo suficiente. La claridad con la que se transmite el conocimiento ya es una tarea aparte. No hace falta volver a construir todo desde cero
Estoy haciendo un experimento de reimplementación global de sistemas gubernamentales. No es un gobierno real. Por ejemplo, están ua.gov-ai.co, ua.ai-gov.co, ng.gov-ai.co y ng.ai-gov.co. Hasta ahora, los avances más grandes han sido en CBER y DDP. Ya voy por 422 instituciones. Quiero terminar para Juneteenth. Rehacer estas bases me está ayudando a entender los principios fundamentales. Sé que en la práctica no va a salir ningún producto concreto de esto, pero me resulta útil para replantear mis ideas cada vez que cambia la esencia del problema. Creo que los experimentos de reinventar la rueda siempre tienen valor
Si trabajas en una startup, creo que conviene ignorar este consejo en la medida de lo posible. (Claro, salvo que la rueda que vas a hacer desde cero sea el rendimiento central de tu servicio). Si no es así, lo más probable es que solo desperdicies recursos limitados y que el negocio termine antes de siquiera arrancar
Aun así, creo que en una startup es importante trabajar con gente que ya haya hecho ruedas por su cuenta, es decir, personas que realmente sepan construirlas bien. Aunque sea en open source o proyectos personales, deberían tener esa experiencia
Me parece que este consejo no apunta a lo profesional, sino a experimentos personales de ruedas con fines de aprendizaje
Me acordé de una gran frase que me dijo un amigo: “La razón para reinventar la rueda no es que necesitemos más ruedas, sino que necesitamos más inventores”. Muchas veces sentí calma mental y emocional al aprender un concepto nuevo a través del proceso de construirlo yo mismo. Cuando conocí la famosa frase de Feynman, “Lo que no puedo crear, no lo entiendo”, esta experiencia y esa convicción se hicieron todavía más fuertes. Cada vez que reinvento una rueda, mi intuición sobre el concepto original se fortalece más y además aprendo cosas totalmente nuevas que antes no conocía
Creo que la aversión excesiva a la duplicación es un problema de nuestra época. Todo se vuelve igual: todos comen lo mismo, trabajan en oficios parecidos y se mueven por necesidades similares. Si llevas al extremo mensajes como “prohibido reinventar la rueda”, quizá el objetivo final termine siendo convertirte en alguien que no sabe hacer nada y que solo satisface las necesidades especializadas de unos pocos ricos. Una vida en la que ya no aprendes a cocinar, a cultivar ni siquiera a amar
¿La empresa es un lugar al que uno va a aprender? ¿O es un lugar donde se recrea valor usando la rueda que otros hicieron?
Crear es solo el comienzo, y si operas un servicio durante unos 10 años, en el camino van a pasar todo tipo de cosas; para aguantar ahí, necesitas una base... hay que aprender.