Patience.
Read a couple of posts by beginners (like you?) on this forum. All of them want to just "make an iPad app and earn $$$". They expect to be told "the" expert trick to be able to program, and assume they can learn by assimilation of screen radiance, just like Charlemagne thought he could learn to read by keeping his books under his pillow while sleeping.
English.
Being able to phrase a question clearly and then understand the answer takes some skills. Do not use "ur" or other l33tsp33k.
Dedication.
I just finished reading a 1236 page manual, almost literally cover to cover. As it didn't explain the topic I was exploring in sufficient detail, I went off to the almighty Web and looked up ISO and CCITT documents until I got it. (I think I'm almost there. I got a splitting headache over it, so it won't be tonight or even tomorrow, but I'm getting there, in my own time.)
Languages. (Well, other than English, obviously.)
It's useful to know a lot of different programming languages. Some of my projects start off in something as lowly as Javascript, 'cause that allows you to take shortcuts other languages don't. When I got the output I wanted, I rebuilt it as a command line program in C/C++. When, eventually, that works, I'm going to rebuild it in Objective C or C#; possibly for Windows, possibly for Mac. Maybe both.
Intelligence? Nah, personally I'm doing just fine with tenaciousness and stubbornness.