While working as a web developer, I have seen four levels of competence. Those levels I will try to explain below with brief explanations for each. See if you can place yourself in one of these groupings with each skill you have.
If you fall into the first two levels of competence, you really need to work on improving those skills. I see a lot of programmers who fall into the first two and are totally unaware of it. They think they are senior or master level programmers, but are completely incompetent and are creating total crap.
If you want to be in the programming field you really need to be on a constant learning plan. If you think you can just get that expensive piece of paper and be a master of the trade you are on the road to failure. What you learn in school is totally different than what is in the real world.
You do not understand or know how to do something, and do not necessarily recognize the deficit. You may deny the usefulness of the skill. You must recognize your own incompetence and the value of the new skill before moving on to the next stage of competence. The length of time an individual spends in this stage depends on the willingness to learn the skill.
Though you do not understand or know how to do something you recognize the deficit, as well as the value of a new skill in addressing the deficit. The making of mistakes can be integral to the learning process at this stage.
You understand or know how to do something. However, demonstrating the skill or knowledge requires concentration. It may be broken down into steps, and there is heavy conscious involvement in executing the new skill.
You had so much practice with a skill that it has become "second nature" and can be performed easily. As a result, the skill can be performed while executing another task. You may be able to teach it to others, depending upon how and when it was learned.