I don't really think I'm "great" per se, but there's several things that really "upped" my abilities beyond someone who was just comfortable with ifs, loops and arrays.<p>Now I should state that all these things are with respect to how to learn things, not with what makes the best employee/product.<p>1) Getting a job where I could program/learn full time. Once I picked up the skill that other people hadn't learnt, then I became "the SKILL guy", which means that you get more work based on that skill, which lets you learn even more.<p>2) To learn things, I would set myself the goal of trying to do every task in one language. And I mean every task, including tasks that it sucked at. Whereas other people just took the pre-written tool/software and used it, I wanted to see if i could do it from scratch. Its not the best way to do business, but its the best way to learn something inside and out.<p>3) Plain stubborn persistence and realizing there are no hard problems/theories/techniques, just ones you haven't spent enough time studying and getting familiar with. Its ok not to know or understand things. What's not ok is to run away from them because you don't know or understand them. There's a lot of fragile egos in programming/academics/business where people try to insinuate that because they don't understand something its "not worth knowing/is useless", or that you are stupid for not understanding what they understand. Forget all that and just keep bashing away at a topic, looking for different opinions and perspectives on how to pick it up, and when you understand something on your 8th go, you're now on equal footing with the person who understood it on the 1st go (if there ever was such a person, and there often isn't).<p>4) Always pushing my self into the things that I can't do. This is a bit weird, because most of our school systems condition one to do the things you score well at and avoiding the things you fail at. Screw that. You might get good grades and a job but you will never grow as a person that way. If you're only given projects you "can do" at work, try to mix it up by doing it in a way, or with a language, or with a perspective that you can't currently do.