Si. Considero que el código de espagueti es un caso específico del antipatrón más amplio de no pensar sistémicamente. Cuando diseña pensando en todo el sistema, organiza su código en módulos o clases o subrutinas o cualquier paradigma que permita su lenguaje. La incapacidad de comprender todo el sistema y, por lo tanto, imponer algunos resultados de estructura en el código de espagueti.
Algunos ejemplos análogos de ingeniería mecánica o industrial:
Se le dijo a un ingeniero de herramientas que construyera un conjunto de punzones para hacer un patrón de agujeros X en un producto. Las variaciones comunes a ese producto requieren patrones de agujeros Y y Z que son similares, pero diferentes. Darse cuenta de este diseño común / diferencia por adelantado le permitiría tomar una decisión informada sobre si es más rentable (inicialmente y en curso) construir tres herramientas separadas o una herramienta que tenga componentes que pueda intercambiar para crear los diferentes patrones. Al igual que el software, cualquiera de las decisiones podría ser correcta en diferentes situaciones dependiendo de variables como el costo de la herramienta, la tasa de trabajo por hora en el taller, la velocidad de producción y la velocidad del cambio de herramienta. Si el diseñador de la herramienta construyó una herramienta para X a ciegas porque le dijeron que lo hiciera sin pensar sistemáticamente, el taller más tarde requerirá construir una herramienta separada para Y y Z o desechar la herramienta X y reemplazarla con una herramienta modular para implementar las tres variaciones . De cualquier manera, este es un “proceso de espagueti” que quema tiempo y dinero que podría haberse implementado mejor con un pensamiento sistémico inicial.
- ¿Qué es una estructura de datos?
- ¿Cómo es la transición de Stanford a la ingeniería de software en South Bay?
- ¿Te fue fácil la programación de software o tuviste que luchar con algunos de los conceptos al principio?
- ¿Qué hace un ingeniero a diario?
- Cómo obtener inversión para mi software
Una compañía ha invertido en formadores de rollos alimentados con bobinas para producir un canal de chapa de metal de tamaño y grosor específico en cualquier longitud requerida. Este canal es bastante barato de producir y, como resultado, se reutiliza en muchos lugares de la línea de productos de la compañía. Después de varios años, surge una oportunidad de negocio para hacer un producto similar, que es el doble del tamaño total del producto convencional. La compañía quiere seguir reutilizando la forma estándar del canal, pero sus propiedades de sección, que antes eran adecuadas, ahora no son suficientes para resistir las cargas resultantes del producto más grande. Responden agregando refuerzos y miembros adicionales para reforzar la estructura inadecuada. Esta solución “parcheada” debe implementarse correctamente porque la soldadura de estas abrazaderas en algunos casos cambia las cargas distribuidas en cargas puntuales, lo que hace que la estructura falle de formas nuevas e inesperadas. La mejor solución general sería elegir no usar la forma de canal estándar, reemplazándola por un canal con bridas adicionales para mayor rigidez. ¿Se darán cuenta de esto o seguirán intentando diseñar este producto utilizando el canal estándar? Veo esto como análogo a tener una API que funcione bien en una situación, luego intentas aplicarla a otra y tienes que llamarla “solo así” estableciendo propiedades en un orden particular y asegurándote de no llamar a ese método porque Todo estallará. . . en lugar de simplemente importar en una biblioteca diferente optimizada para su nueva situación.