Not sure how good a programmer you can become without being inherently excited about the whole thing.
In a way I believe everything can be learned the same way. I suck at design, but in theory I could see how I could learn it. The problem is I would have to be constantly absorbing new things. While talking a walk I would have to notice the typography on shop signs, when browsing the web I would make mental notes of designs I like, and so on. Totally doable, yet I am not doing it. On the other hand I read about programming all the time, even about topics I don't really work with atm like scalability, 3d programming, machine learning and so on.
Perhaps a course can be a good start, but I suppose it only gets you 1% of the way...