An Average Programmer
A lot of programmers I've seen start out with a great start, errors and sloppiness are to be expected with a new language. However, when the individual finally gets comfortable doing something a certain way that works for them, it seems some stop excelling. In my opinion, it's better to go in depth with fewer subjects than broad on many topics which causes a lack of depth.
In an Object-Based language, here is a chart that I see among much code:
If you excel beyond the halfway point there, you will potentially become a very good programmer. The picture below shows the phases you may go through in the simplest of steps with a visual example of a code structure. One thing that could be easily overlooked below is that an OOP/OOD developer may have a lot of Spaghetti code mixed in with Phase 2 and Phase 3, that's not good!
Something like this may take several years to get to efficient at, but it's worth it! Programming should be thought of as architecture more than "lines of code", or "just so it works".