1) Coding, Coding and Coding
Why I have coding at top of this list? because it's difficult and same 
time it's central piece of programming. By doing coding, you also 
realize your mistakes in 
designing, 
error handling, 
threading and
 then go back to those respective skill to improve. You just can not 
work in designing only, coding produce output, which is important to 
learn and act as success. By the way, do not stop just after solving the
 problem, it's always better to throw away your first solution, that is 
just a prototype, your next solution should address issues, missing 
requirements which you have found building prototype.