Reutilización de código como problema
Estaba pensando en esta pregunta sobre la entrega de software, y seguí volviendo al tema de la repetibilidad y / o reproducibilidad . Importan, porque si no repites un proyecto, entonces se vuelve más difícil mejorar el proceso que usaste para construir el proyecto. La ingeniería implica mejorar constantemente los procesos relacionados con el diseño y la construcción para producir proyectos de mayor calidad.
El software puede depender en gran medida de la reutilización debido a su forma digital. En lugar de reescribir un módulo, simplemente lo llamamos nuevamente o lo copiamos al otro sistema. Algunos ejemplos son autenticación / inicio de sesión o quizás una función de registro. Hay muchos ejemplos bien conocidos para esas categorías, y la sabiduría convencional es reutilizar lo que existe en lugar de crear uno propio.
Algunas comparaciones con otras disciplinas
Construcción
En contraste, la construcción de sistemas físicos (edificios, puentes) no es tan reutilizable. Es cierto que el plano de una casa se puede reutilizar muchas veces para construir la misma copia de la casa, pero la construcción debe realizarse cada vez. Cortar y pegar no funciona así en el mundo analógico. Los planos del puente son menos reutilizables que las casas porque las condiciones del sitio variarán.
Los maestros constructores son expertos reconocidos por haber diseñado y / o construido decenas, cientos o miles de cosas en su área. Por ejemplo, Frank Lloyd Wright , un arquitecto y diseñador de renombre mundial designed more than 1,000 structures and completed 532 works
. Compare eso con Anders Hejlsberg, quien ha diseñado "solo" cinco idiomas (Turbo Pascal; Delphi; J ++; C #; Typecript). En muchos sentidos, es una comparación injusta porque los dominios son diferentes. Pero en un nivel amplio, la producción cuantificable de dos personas muy inteligentes es muy diferente.
Artes marciales
Los artistas marciales dirán que el dominio de un movimiento proviene solo de miles de repeticiones. Después de que una buena parte de esas repeticiones se han realizado, muchos artistas marciales se sorprenden de cómo un kata o forma compleja previamente percibida se ha vuelto simple. Los instructores de esos estudiantes también notarán cómo el movimiento se vuelve más fluido y decidido, además de tener una economía de movimiento. Del mismo modo, los artistas marciales experimentados pueden recoger katas más complejas más rápidamente que los estudiantes menos experimentados. La experiencia de la repetición les ha dado un marco o proceso que les permite aprender más rápidamente.
Carpintería
Los trabajadores de la madera experimentan una transformación similar. Los carpinteros aficionados siempre se refieren a su primer proyecto que requería muchos cajones. Si completan el proyecto, obtienen una nueva apreciación de las eficiencias que producen las líneas de ensamblaje. Hay otros beneficios, como una mejor comprensión de cómo colocar las piezas de los cajones en el material de la lámina para maximizar el uso de la madera. En comparación con los aficionados, los carpinteros profesionales pueden diseñar, comenzar y construir más rápidamente artículos que han hecho muchas veces antes. También obtienen la capacidad de ver problemas inherentes dentro del diseño de otra persona después de haber cometido ese error en su trabajo.
Entonces, ¿la reutilización del software impide que los desarrolladores de software se vuelvan más competentes?
En muchos sentidos, el diseño y la construcción del software siempre son nuevos. No repetimos trabajos pasados, porque si podemos reutilizar un módulo, biblioteca o sistema, entonces lo hacemos. Preferiblemente extenderemos un sistema existente antes de reescribir todo desde cero. Pero la repetición es lo que nos permite encontrar eficiencia en el diseño y la construcción. Cualquiera que haya practicado un deporte o actividad física le dirá que la repetición es la clave para convertirse en un buen practicante.
Mi pregunta: ¿la capacidad del software para ser reutilizado impide la mejora y eficiencia del proceso necesarias que se obtienen al repetir un proyecto?