I think I've probably had more formal teaching than a lot of people. At university they did make some attempts to teach us programming (albeit Scheme and Ada 95). In my first couple of years of work I went on a couple of C and C++ training courses. They were really useful -- I didn't learn much from the C one except some good practices, but learned quite a lot on the C++ one.

I don't think I would have found them so useful or interesting if I was actually there to try to learn the language -- as it was I had a reasonable grasp of both languages so I was able to pick up on the interesting bits and fill in some of the blanks in my knowledge.

I've definitely learned the most from my job. Half sheer experience -- you can't write code all day every day for years and not become reasonably fluent. As well as that though, I've learned a lot from the people I work with. They're (mostly) very rigourous in their approaches, and experienced in finding the right approach to solve the problem. I'd rate myself as a great C programmer, an average software engineer, and an average, possibly below average C++ programmer. I've heard people far more experienced than me agree with Stroustrup on "C++ is a not a language that is ever "fully learned".".

I don't know if I've met any innately talented software engineers. Some of the guys I work with did amazing software engineering things when they were just kids. But then, they're generally very clever and would probably have been great at anything.
I think some people are more suited to it than others. I think I'm well suited to it, but I'm not innately talented. At university, I studied maths and computer science (joint honours) and it didn't take me long to realise I'd completely hit the wall with maths. I got through it and got a good degree, but it was a struggle -- it wasn't just challenging, it was outright beyond my capabilities.
I've never had that feeling with computers and software. I've felt overwhelmed and out of my depth many times, but if I keep at it I'll eventually figure it out. I don't think that's true for everyone -- so I think there's something there. I also think that my tendency to imagine the worst in every situation makes me a good engineer, but a crap person