-
Percepción del efecto Makefile
- El efecto Makefile se refiere al fenómeno de no escribir desde cero herramientas complejas o poco familiares, sino copiar y modificar ejemplos anteriores que ya habían funcionado bien.
- Este efecto aparece con frecuencia cuando distintos ingenieros usan herramientas como Make.
- Si en el pasado se realizó una tarea similar, el ingeniero copia el Makefile anterior y lo ajusta a la nueva situación.
-
Problemas e impacto
- Problemas en la etapa de diseño: la herramienta es demasiado compleja o resulta engorroso usarla desde cero.
- Configuración de CI/CD: a menudo se copian y modifican configuraciones YAML en GitHub Actions o GitLab CI/CD.
- Configuración de linters y formateadores: se copian conjuntos de reglas base entre proyectos y se endurecen o flexibilizan según sea necesario.
- Sistemas de build: todo lo que no sea trivial termina pareciéndose a un sistema de build anterior.
-
Por qué este fenómeno es importante
- Falta de soporte para diagnóstico y depuración: hay que ejecutar la herramienta repetidamente y ofrece poca información.
- Dificulta el aprendizaje: solo algunos expertos conocen bien la herramienta, mientras que los demás copian y modifican con conocimientos mínimos.
- Problemas de seguridad: el trabajo de seguridad requiere conocimiento profundo, y los sistemas con efecto Makefile pueden generar confusión entre código y datos.
-
Qué considerar al diseñar herramientas
- Si la herramienta debe ser configurable.
- Si necesita una sintaxis propia.
- Si puede reutilizar sintaxis existentes o modismos ya conocidos.
- Si el copiar y pegar ocurre con frecuencia.
-
Fenómenos similares al efecto Makefile
- Es parecido al cargo cult o a la normalización de la desviación, pero el efecto Makefile trata sobre las consecuencias de un diseño específico.
- El efecto Makefile no es, en esencia, algo ineficiente o malo. Es algo que debe reconocerse al diseñar herramientas y sistemas.
1 comentarios
Opiniones de Hacker News
Los sistemas complejos muchas veces evolucionan a partir de sistemas simples. Un sistema diseñado como complejo desde el inicio no suele funcionar bien; hay que empezar con un sistema simple
Make y los Makefiles son muy simples, a menos que sean generados automáticamente por autoconf. Si fueron generados por autoconf, no los modifiques y, si es posible, conviene no usar autoconf. Es mejor escribir o copiar un poco de código para usarlo en el proyecto e ir mejorándolo según sea necesario. Después, copiar ese código a otro proyecto y adaptarlo, y reflejar los cambios en el proyecto original. A través de varios proyectos, se puede extraer como biblioteca y publicarlo como open source
Aproximadamente el 10% de los desarrolladores tiene la capacidad de empezar algo desde cero. El 40% trabaja copiando y pegando código, y el 50% no sabe mucho más allá de los acertijos de LeetCode. Muchos Makefiles están hechos a base de copiar y pegar
Cargo Cult Development se refiere a una forma de desarrollo en la que se imita solo la superficie de una tecnología sin entender sus principios. Es un enfoque de copiar, pegar, probar y ajustar esperando que funcione
Makefile puede ser una mala analogía. Mucho código se copia de la web y contiene muchas partes que no se usan. Eliminar lo innecesario es un buen hábito
Las herramientas o sistemas con los que los desarrolladores deben interactuar se perciben como algo de poco valor para aprender en el día a día. Configuraciones como CI se ven como "configúralo y olvídalo", y las partes complejas las maneja otro equipo. Hay que ofrecer herramientas y documentación adecuadas para que los desarrolladores puedan acercarse fácilmente
Herramientas como LaTeX suelen usarse con poca frecuencia, así que muchas veces se empieza copiando y pegando. Las herramientas de uso poco frecuente son difíciles de recordar
Make está bien documentado y, si el usuario lee la documentación, puede entenderlo con facilidad. Pero muchas herramientas están mal documentadas, lo que dificulta que el usuario las comprenda
Las herramientas complejas son necesarias, pero si en una aplicación simple aparece el efecto Makefile, eso significa que la herramienta es demasiado compleja. Para proyectos pequeños, un Makefile puede ser adecuado
"Copy-Pasta Driven Development" señala los problemas que surgen por copiar y pegar código. Herramientas como Copilot pueden empeorar estos problemas