Cuando comencé a programar por primera vez, asumí que algún día llegaría al punto en que comenzaría un proyecto sentándome y dibujando un diagrama UML de todas las clases, y luego me apegaría a eso. He estado programando durante un par de años y no está resultando así. A medida que avanzo en un proyecto, a menudo digo
- "Oye, necesito una clase para hacer _ _. No había pensado en eso antes".
- "Espera, esta función realmente debería estar en esa clase en lugar de esta. Lo moveré".
- "Esto debería ser en realidad dos clases en lugar de una. Lo dividiré".
- "Debería hacer que estas tres clases independientes hereden todas de una clase abstracta".
- Etcetera, etcétera.
¿Es una mala señal de que a menudo estoy rediseñando así a medida que avanzo? ¿Esto significa que soy un mal programador o es esto normal?
fuente
Lo que estás haciendo se conoce popularmente como "refactorización". Si alguna vez dejas de hacerlo, entonces estás en problemas.
El hecho es que la mayoría del código es complejo y los humanos, incluso los bastante inteligentes, no pueden resolverlo de una vez.
fuente
No, parece que estás siguiendo YAGNI y refactorizando los ejemplos dados. ¿No crees que es mejor tener esta mejor solución y poder hacerlo que nunca pensar en algo otra vez?
El desarrollo de software ágil generalmente tiene prácticas para acomodar esto que es bastante diferente del modelo en cascada.
fuente
Eso está perfectamente bien (a menos que estos rediseños sean siempre revisiones importantes o reconstrucciones desde cero). No te preocupes Puede ser bueno comenzar con un diagrama UML al comienzo del proyecto, pero no lo grabe en piedra, ya que casi siempre descubrirá que las cosas cambian a medida que trabaja. Es posible que aprenda nuevas técnicas que no conocía al principio, es posible que desee mejorar algunas características de formas que no había pensado durante el diseño inicial, los requisitos comerciales cambian, a veces hay incógnitas durante el diseño inicial que solo pueden se contabilizará más tarde, etc.
Lo que es importante es ir y actualizar los documentos iniciales UML para que reflejen los cambios significativos en el diseño, desarrolladores futuros demás (incluido usted mismo) podría terminar muy confundido. Esto puede ser difícil y, a menudo, requiere una buena diciplina (y tiempo).
Es muy, muy raro comenzar con un diseño y cumplirlo al 100% hasta la implementación. Personalmente, nunca he visto algo así, excepto por programas muy pequeños y triviales.
fuente
Lo que estás haciendo es perfectamente normal (siempre que no estés comenzando desde cero desde el principio). He estado en esto durante más de veinte años, y todavía es un proceso iterativo.
La única vez que podrá diseñar todo por adelantado y cumplirlo es si está resolviendo exactamente el mismo problema que resolvió la última vez, e incluso entonces probablemente pueda encontrar margen de mejora.
fuente
De ninguna manera soy un desarrollador altamente experimentado, pero también hago esto. En los últimos años, mi capacidad para construir mentalmente la arquitectura necesaria ha mejorado enormemente. Sin embargo, mientras escribo una pieza de software, no importa cuánto planifique, siempre hay lugares que necesitan un poco de rediseño. Manchas de las que no me di cuenta que me repetiría hasta que el código se esté escribiendo.
Mi punto de esta publicación es decir que hago todo en su lista y no siento que esas cosas sean necesariamente malas a menos que estén sucediendo constantemente y tengan un efecto negativo real en su productividad.
fuente
Eso se llama proceso iterativo y es un concepto básico en todas las técnicas modernas de desarrollo de software.
fuente