I believe I was 15 when my friend started really getting into software development. I watched him grow into owning his own business, and managing some lucrative contracts while becoming a autodidact computer wizard. I always felt I was too dumb, or the complexity so significant that I would never be able to grasp programming. I was 22 when I finally sat down and created my first 'HelloWorld' program in C#. I piddled and attempted to "get-it" it for about a year. I can honestly say it was frustrating, probably THE most frustrating thing I've ever done. I banged my head against walls for days trying to meagerly grasp the concepts I was using and most of the time I'd lose.
I worked with him for about a year afterwards, digging through his designs in within his WPF application; expanding things and creating new features where I could, and inevitably breaking things where I couldn't. I noticed my little side projects growing in complexity and sophistication while I slowly believed I was figuring out what was going on... Fast forward to today: I'm above a junior level dev now, for sure. While it will be many, many years before I can remotely call myself a senior, I managed to land a job at small but great company doing work for the oil and gas industry (a very big company). I remember six months ago, I was retarded. Six months before that I was an infant. Every six months the cycle continues and I get better.
I still have no idea whats going on (but at least I'm getting paid for it now!).