Practice, practice, practice of course is part of it, but that can only take you so far if you keep making the same mistakes you don't realise you're making.
What else can one do to improve their skills in programming? What are some key resources that everyone in this field should be exposed to?
Things like this are a great source of concepts: http://programmer.97things.oreilly.com/wiki/index.php/Contributions_Appearing_in_the_Book
But what are some ways to improve the practical skills of programming, to efficiently and effectively put together the nuts and bolts of software?