When it comes to programming,learn to break things. In programming, it is easy. Put bad code on purpose and see how and why it breaks ? I remember one of our excellent CS professors who told us that the best way to learn pointers in C/C++ is to write pointers that don't work. Leak some memory. Create null references. I never understood that for a while but now I do.
Oh and the common advice: practice practice, practice. Do the same thing over and over again even if it is repetitive. Again to give you an example, I was really good at Math as a kid and I remember I got even better when one of the teachers gave me a book in which for every topic, there were 50+ questions that were very similar. he wanted me to do all 50 of them. I was like "why cannot I just do 3-4 of each type and move on to next". But again, after doing the 50, I mastered it.
Having said all this, I don't think I am exceptional at most of the things (certainly not programming) but I am so sure that these are some of the actions that makes one exceptional.