Hi Wayne: My advice would be to find a real, do-able, and hopefully exciting problem where you work (or elsewhere) that can be solved with a bit of automation. Once you've found something to work on, fish around for the right tools(s) to solve the problem. You can use your peers in here or elsewhere on the Intarwebs to determine what 'right tool' could mean. There are very active communities around the most popular software development tools that are easy to tap into via email, irc, twitter, blogs, etc. When looking for a problem to solve, don't worry about re-inventing the wheel. Some wheels needs to be re-invented, and the process of re-invention can be great learning experiences. I think finding something local to work on as an individual rather than diving into an opensource project can prove to be more productive -- at least initially. It lets you experiment without being afraid of doing things "right". It's more important I think to find people (aka stakeholders) that need something done, and who will be pleased if you can help them do it. It's kind of a rewarding feeling, and one that can keep you going as a software developer during bleak moments :-) My personal favorite book about programming is The Pragmatic Programmer [1]. I like it for the same reason that Mike suggested Programming Pearls: it helps you think like a programmer. I like it also because it helped me realize that software development isn't something that happens in a theoretical, ivory tower full of books -- it's a craft that is learned by doing: making mistakes, and learning from them ; following the advice of others, and consciously diverging from them. //Ed [1] http://www.pragprog.com/titles/tpp/the-pragmatic-programmer