This is more specifically geared towards how to learn something new with computers, for me all of the time that actually means something that is open source.

Maybe it's a new server process that runs on Linux, maybe it's a new language, maybe it's a new framework for a language. I think the computer field more than any other field involves the most constant learning (okay i don't have a broad perspective here). If you don't like learning get out of computers now, the dot-com bomb is still happening, outsourcing will make American coders irrelevant, if BPM won't destroy your career 4th generation languages will.

Okay, if you're still with me you're a learner, that's cool. I'm sure you have your own process for picking up new stuff and i bet a lot of times it works. This is what works for me.

1. Decide if it's worth learning

How does something come up on your radar? Maybe you see something in a book store, in a magazine or co-workers talking. After that you have to figure out if it's something you want to get into. User groups can be great for exposure to something new. Magazine articles can give you some general exposure.

No software is free, even free software. Learning something new takes investment by you. you have to make sure that it's something worth learning. It's okay if you're doing it out of curiosity but you need to recognize that. Look up on job sites to see if there's demand for the skill, see how many developers are working on it, how active is it?

Volumes could be written on this, it's extremely important to pick the right skills. Read My Job Went to India 52 Ways to Save Your Job for some great perspective on this. In a nut-shell here's some strategy:

2. Environment variables

I don't mean setting your CLASSPATH or CATALINA_HOME I'm talking about eliminating distractions. Shut off the TV, I concentrate fine with music sometimes it's even beneficial but if it diverts your attention shut it off. Maybe turn off instant messenger software or at least set your status as busy.

Let your loved ones know that you're not 'playing' on the computer. You're fighting for your very existence protecting yourself from the scourge that is outsourcing. It's not that bad but really, you're in the field, you gotta learn new stuff.

3. Download the software

Usually open source projects will have a stable build, a development build and a bleeding edge build. Sometimes the bleeding edge build is only available via source control (cvs, svn).

It's a good idea, especially during the learning process, to stay away from unstable-stable code. When you hit a brick wall you'll go back and forth wondering if it's something stupid that you're doing or if it's the unstable-stable software. In this situation it might actually be the software. This is not a good thing.

You're probably learning something new to have a marketable skill in the future. Toward that goal playing with the stable build might be like learning Latin. So if possible get a developer milestone, usually these are stable enough to begin playing with. if you have trouble revert to the stable build.

4. Documentation

Get some good documentation. there's usually great stuff out there. for Java it's java docs, maybe a tutorial. Self-respecting projects will have it all included in the software download.

It's preferable to have the documentation local on your computer, this learning stuff is important. you want to be able to still learn even after the entire Internet as we know it collapses.

If you can't have the information local then bookmark it. better yet delicious it too, you'll want to find it later and when you're on a different computer.

The key to documentation is that you want it all there easily available. Imagine yourself on the brink of tears, eyes bleeding, not knowing why your slick software or framework won't do what you want. This moment of emotional weakness is not when you want to be hunting down java docs and downloading them. You want it at your fingertips before you get to desperation. If help isn't readily available you risk turning to the idiot box.

I can't imagine hacking at ant scripts without the core ant tasks 2 clicks away. Einstein didn't remember his phone number because it was in the phone book. Computer professionals today can't even afford to remember everything they need to know, they have to know where to find the information.

5. Get a book?

I actually like dead-tree books. I know other great learners that barely use them. I think the books are optional. I get all gushy with books, like computers, books have a magical power with me. Where computers mean endless possibilities books mean knowledge. Yeah, that and I like reading on the can.

6. Do the high-level flight

Before you start pounding at the keyboard do a high-level flight over what you are looking at here. You probably know the big idea with the software you're working with because you've evaluated whether or not it's a technology you want to learn.

The flight might involve skimming through a book, maybe it's browsing examples or reading an article on-line. Either way you're getting a better idea for what the major moving pieces are.

7. Sanity install check

If at all possible do a sanity check to see that the software you're using is working in any form. If it's ant see that you can type ant on the command line and get an error. if it's tomcat, see if you can get to the local tomcat welcome screen ( http://localhost:8080 ). besides that maybe see if you can run some examples included with your software.

This isn't the time to see what the technology can do or tinker. Save that for after you get it running in a basic sense. None of this, "what if I run tomcat behind Apache while tweaking with firewall rules." Save the craziness for later.

Here's a miscellaneous pearl of wisdom: if you're running on Windows install the new software at the root of your C drive if possible and make sure there are no spaces in any directory names.

8. Hello world

Dipping your toe in the pool of a new technology is a fun step, for me it's also a small step but that's fine. There's plenty of time to get cute.

The hello world will be along the lines of, when I flip this switch here does the light come on over there. Nothing fancy, no cute algorithms, just can i get this thing to do the minimal functionality possible while proving that it actually works. here are some examples:

9. Meatier problems

Okay, now you can move onto more meaty problems. We've proved that it's installed and we can sorta get it to do something. Now let's get it to do something more interesting. Sometimes i like to find an example. Examples can be good they show you how the conventions are in this new technology and are a great guide.

I find something simple but i don't do exactly the same thing. If it's a tutorial on Java inheritance and they're showing how an orange is a fruit is a plant. I'm gonna show how a monkey is a mammal is an animal. Now is the time to start firing up those brain cells. If you do the exact same example as you're seeing you will go on auto-pilot and you won't learn.

Here's when you might run into some more problems and you might not have enough momentum to get you through the brick wall. If you get stumped don't forget the old options.

At this point i think you can put something on your resume but you should feel guilty about it.

10. Do something useful

Now you really roll up your sleeves. We're not in candy land anymore. You need to think of something that you could use this for and apply it. If you're lucky, you can apply it at work and get paid to learn, heck maybe you've been paid all along to do this learning. If so consider yourself lucky, if not consider yourself pro-active.

Assuming it's not something for work think of some software that you'd like to use. Maybe you'll just use it or maybe it'll be software that you can open source. For me, I hadn't done CGI development in a while so I wrote an image gallery system in Python called pix. It also scratched an itch i had to be able to easily and simply post my digital pictures on-line.

It should be something real, something you'd really use or something you'd want others to use. You'll find some new warts in your chosen technology and have to get around some situations that might not even be covered in any books. After it all you'll have a good grasp of the new skill.

Maybe it's not a software product per se, of course if you're learning ant you'd just want to use ant with some real Java code and a real project. Doing different things like compiling, testing, jarring, etc...

Alright once you have this under your belt you can now put the new thing on your resume and not feel bad about it. As with anything complex this is only the beginning.