|Think about Loose Coupling|
While I was mentioned directly, I don't know what I can realistically add that hasn't been said.
Like merlyn I don't have a lot of the usual time-wasters.
Like Dominus I like being engaged in whatever I am doing.
Unlike both I don't have decades of programming experience. It still is under 4 years, and I have a lot of gaps. (That I am trying to fill in as I go, but by the time I hit some of the big ones, I am sure that progress will create others.)
Now for my weird advice, read Re (tilly) 1: Discipline, then RE (tilly) 3: On elegant coding... and you should get a good insight into what my basic learning strategy is. I have direct evidence that the first works for other people. I have no evidence that the second is how others work. I know that neither is something that most people would consider trying.
And finally a controversial question. Talent or effort? I don't know. I have seen plenty of stories of people who demonstrate that it is supposedly talent. I am positive that there are plenty of people who would add me as yet another example. Yet after I look around from reading yet another book, considering another opinion, writing more code, it sure feels like effort. And sure I have only been programming a short time. But I started with years of experience in math. I didn't have to learn the basics of efficiency, recursion, breaking problems up or paying attention to detail. I started programming with those skills more highly developed than most veterans of programming.
If I thought that anything real was known about nature vs nurture and talent, I would probably go out and do some research on this question. But the fragments that I saw the last time I got curious did not inspire confidence. Perhaps after they have a while to analyze the human genome, I will take a peek to see what the orthodoxy turns out to be...