Actually, you will come to realize that knowing programming languages is the least important skill a programmer must master.
-The most important quality of a programmer is abstract thinking. More often than not, programs use abstract concepts rather than concrete ones. Being able to think in an abstract way is the thing you have to practice the most.
-Divide and conquer: instead of trying to solve a huge and difficult problem, a skillful programmer would find a way to divide said problem into smaller and (hopefully) easier ones and solve those.
-Pattern recognition. This is mainly based on experience, but recognizing problems and associating them with ones that were solved already is a very good way of programming. This is much more important than knowing how to solve every type of problems.
At an interview, a programmer is asked what he would do if the microwave would catch fire. He says he would throw it out the window. Baffled, the interviewer asks "okay, what if the coffee brewer catches fire?" And the programmer replies "Put it in the microwave and throw it out the window, as we already have a solution for that problem."
So, if you are able to transform problems into already solved ones it will be a lot easier.
-The ability to find efficient code without getting caught in a perfectionist loop. We all want that perfectly elegant solution, however, the time invested in finding it is not always worth it.
-Experience. Practice, practice and practice.
-Chief Administrative Officer.