Como la gente suele señalar muy rápido, uno de los beneficios del software es que se supone que es fácil y relativamente barato cambiarlo en comparación con el hardware. Esto es especialmente importante cuando te das cuenta tarde de que tienes algo fundamentalmente incorrecto. Haga lo mismo con el hardware y perderá un millón de dólares, por lo que, como ha dicho, usa sus simuladores, etc., y prueba el bazinga. Creo que es aquí donde el paradigma falla un poco cuando cambias al software.
Métete en la cabeza del desarrollador de software promedio, y lo que tienes es una persona muy ocupada con un plazo increíblemente ajustado. Su gerente le dice que está bien dejar algunos errores porque siempre puede solucionarlo más tarde. Las pruebas son a menudo una idea de último momento, pero incluso en un escenario basado en pruebas, las pruebas se mantienen mínimas y el código se escribe al mínimo de las pruebas, y a menudo se toman atajos para que muchos de los casos límite puedan perderse. El sistema puede someterse a una prueba exhaustiva de la unidad, pero rara vez se prueba rigurosamente en su conjunto, y tan raramente se somete a prueba de esfuerzo en gran medida. Agregue a esto que usted escribe software desde cero, y hay pocas oportunidades para simular el software antes de comprometerse a escribirlo, principalmente porque raramente escribimos software del mismo tipo de bloques de construcción fina que encontraría en el hardware.
De vuelta a la pregunta del OP. ¿Podría definir un sistema de bloques de construcción del cual derivar todo su software? Posiblemente. ¿Sería muy rentable? Probablemente no, porque para cuando llegue el momento de desarrollar un sistema lo suficientemente robusto de componentes, pruebas y otra parafernalia para apoyar este idealEn el sistema de programación, descubriría que su competencia ya lo habría ganado al mercado y, lo que es peor, desde la perspectiva del programador promedio, probablemente encontraría que un estilo de sistema de programación "cortador de galletas" es muy limitante y muy probablemente muy aburrido. Personalmente, trabajo en una API, donde la mayor parte del código del módulo se ha refinado y estandarizado tan completamente, que todo lo que hago ahora es generar una plantilla de código y completar los espacios en blanco. La mayor parte de mi tiempo se puede dedicar a escribir código de conector simple y sacar los módulos de la puerta lo más rápido posible. Es realmente aturdidor. Hay muy pocas oportunidades para hacer algo más que codificar el mismo tipo de cosas una y otra vez, por lo que cuando aparece otra oportunidad de proyecto, aprovecho la oportunidad de poder hacer NADA más.
Entonces, ¿cómo puede llegar a ofrecer software de alta calidad y bien factorizado, y al mismo tiempo disfrutarlo haciéndolo? Creo que esto se reduce a su elección de herramientas y metodología. Para mí, la respuesta ha sido emplear el uso de una buena API BDD, porque me ha permitido crear un código muy fácil de leer, pero muy granular. Puedo construir un conjunto de pruebas a partir de un número mínimo de métodos reutilizables y describir mis pruebas en el idioma de las especificaciones. De esta manera, me acerco a un enfoque de desarrollo más componente, excepto por el hecho de que soy responsable de diseñar y verificar los componentes básicos. Además, la salida de la prueba señala la parte exacta de la prueba donde ocurre la falla, de modo que no tengo que adivinar si las fallas están en la configuración o en la afirmación.
Ajustar su metodología también ayuda. Soy un gran defensor de la aplicación de principios de desarrollo lean y de combinarlos con muchas de las otras técnicas y principios sobre los que el movimiento Agile ha estado trabajando durante muchos años. La eliminación de la mayoría de las prácticas derrochadoras que solía encontrar tan frustrantes ha ayudado mucho a hacer del desarrollo una actividad más agradable. Todavía me queda el problema de que a veces, pero con suerte no con demasiada frecuencia, aparecerán errores en mi código, sin embargo, ahora me encuentro con más tiempo e incluso más incentivos para pasar más tiempo escribiendo pruebas más sólidas y con el objetivo de 100 % de cobertura de prueba. Aún mejor, se siente realmente genial ver todas esas luces verdes aparecer al final de mi día,