Data analysis, I think, implies the wrong connotation. I'd prefer to use the term problem solving. Programming is a series of problem solving challenges. Languages and algorithms are just tools that the programmer uses to problem solve.
A book can teach you about lists and trees and hashes, but only experience will teach you what are the appropriate tools to use for a given problem. Perl has the advantage and disadvantage of being a very prowerful, flexible and robust tool. It can be used well or very badly. I've seen perl code that will turn you white. But then again I've seen perl code so beautiful it wil make you cry.
I'm usually the fastest coder and best architect on a job. Why? Am I smarter than the rest of the coders? Probably not. But I have been coding for over 20 years now. More importantly, I have been coding a lot of different things for those years; databases, GUIs, web pages, compilers, palm, reporting, etc. The reason I code faster than my peers is that I have a really big toolkit and the knowledge to use it. Chance are that I've solved the problem, or a similar problem, before. Probably more than once.
Solving the same problem multiple times allows you to refine your approach to it; to learn from you past mistakes. The tenth shopping cart app comes out a lot better and cleaner than the first.
Programming is a craft. Not art, not science. If it were art than the results could never be objectively determined. If it were science we would have written a program to do it long ago. It is more like cabinetry or blacksmithing. It requires the discipline and rigor of the scientist and the inspiration and passion of the artist. Qute frankly, if you don't love programming, love it enough that you would do it without pay, then you will probably never be a great coder. But, if you are unwilling to apply structure and rigor and scientific method to your coding then you will never be a great coder either.
Well, I am good at rambling on and bad at concluding so I will just shut up now.