I think I am looking to hear about SUCCESS STORIES.....
Further to my earlier general response, I remember a few specific
anecdotes that helped me improve as a programmer:
- Read books. Be careful to read only top quality books. Especially avoid books with titles like "Learning Perl in 24 minutes Unleashed, in a Nutshell for Dummies". Reading those can do more harm than good. When I learnt C, I chose K&R; for Perl, The Camel; for C++, anything by Stroustrup. I deliberately chose books written by the creator of each of these languages so as to get the most out of my limited time. The creator of a language usually has greater insights, especially into the why of a particular language feature. Another book that changed me as a programmer is The Pragmatic Programmer and I still heartily recommend it.
- Study a large body of high quality code. Learn from the masters. For C, I remember how studying the source code to Andrew Tanenbaum's Minix operating system was an eye opener for me. It taught me how to structure a large body of C code.
- For Perl, writing a CPAN module taught me a lot. After all the reading and the theory you've got to practice. Doesn't matter that I wrote a frivolous module. I learnt a lot about the CPAN, pause, CPAN testers, dependencies, Kwalitee, module naming, how to design a module's interface, how to test a module, POD and how to document a module, and various tools (e.g. Devel::Cover, Test::Pod::Coverage) that I could never have learnt as well without actually doing it. Researching how others wrote CPAN modules, browsing many CPAN modules looking for a good model for mine was also a great learning experience.
- My final anecdote is that posting code for review to a public forum (such as Perl Monks) is a great way to improve as a programmer. To get the most out of this, you must develop a thick skin and not be overly sensitive to criticism ... or even being flamed. Goes with the territory. But if you can develop a thick hide, it's a great way to improve as a programmer.
These are just a few things I remember that worked for me. You'll need to tailor your learning program based on your own personal likes, dislikes, strengths and weaknesses.