When I first started programming, I assumed that I would one day get to the point where I would start a project by sitting down and sketching a UML diagram of all the classes, then pretty much stick to that. I have now been programming for a couple years and it is not turning out that way. As I go through a project, I am often saying
- "Hey, I need a class to do __. I didn't think of that before."
- "Wait, this function should really be in that class instead of this one. I'll move it over."
- "This should actually be two classes instead of one. I'll split it up."
- "I should make these three stand-alone classes all inherit from one abstract class."
- Etcetera, etcetera.
Is it a bad sign that I am often redesigning like this as I go along? Does this mean I'm a poor programmer or is this normal?