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.