Software programming needs understanding the problem and the programming language and tools and platform being used for solving the problem. Experienced programmers tend to solve the problem with old procedural methods where as for object oriented programming you need a different approach. Even if a person is having experience in objected oriented programming, it does not mean that he or she is well versed with new updates being delivered on that platform.
The easiest way to become a good programmer is to read help thoroughly for each and every control or statement, that you are going to use to solve the problem at hand. Another important aspect is code refactoring. Whenever you repeat any 2-3 lines of code in more than one method or form, just think that is it possible to create a class or inherit a class or create a new method and call that repeatedly. If you make this decision only second or third time while repeating code, it is easy to implement. Later on, you think that it is more work involved in changing old methods or classes as they have been used at many places and you tend to avoid the change. At some point later, you realize that it has become a headache to maintain so many repetitions of code, and you plan to launch a code refactoring project and need resources for the same. Whereas if you are aware about code refactoring at all times, it saves your time, energy and does not require you to take code refactoring as a separate job.
Just be aware of new versions/updates to the tools being used and read what the developers of these tools have written for you and you will start belonging to the class of just 1% good programmers out of the whole set of programmers getting bored with their job or blaming others for not getting enough rewards. To be really successful, you don't need to be only programmer or only UI designer or only system analyst. You must be all at the same time, aware of everything what you do and aware of every tool, statement and function you use.