It's now late June and, for many people (not me, yet), summer holidays are here. If you don't know what to do, or want an idea, here is it: join a free software project.
You'd ask: "Why?". I'd answer: "Why not?". There are many reasons. To mention some of them: to return something to the free software community; to learn and improve your general (coding) skills; to do something useful (depending on your POV); or simply put, to have fun!
So, start by choosing a project you would like to help. If nothing comes to mind, one of those you use daily are good candidates. Or one you'd like to be more mature but is fairly new (or abandoned!) and doesn't fit your needs. Think, think, think. It may take a while. (I may give you some ideas in further posts.)
Ok, project chosen. Now I listen: "But I'm not a coder...". Who said you must help by coding stuff? Of course code is (maybe) the most important part of a software project, but it's not all about it. A project needs documentation (in some cases, it's a must to have it in order to use some software), support (by helping other people in mailing lists), extensive testing (reporting any bugs you find), translation to other languages and, depending on the type of project, it may require artwork, audio samples, etc. You can surely fit in some of these groups, specially testing, which is very important (more on this on a further post).
OTOH, if you are a coder you can try to do other stuff. For example, implement that functionality the program is missing, debug and provide a patch for that annoying problem you often hit, or become the new maintainer of an obsoleted project (this last thing is a very good idea, instead of starting a new one from scratch).
Believe me when I said "to learn". Your knowledge about the project you choose will grow a lot, as you will see how it's organized internally, some design decisions taken in the past, help in future decisions... Furthermore, you will probably develop more generic techniques (useful in any project), like debugging programs, cooperating with other developers, improving your code quality, etc.
BTW, when the project accepts your first contribution... you'll be extremely happy, I'm sure. And that will make you want to contribute more. It's like an endless loop, so be sure to start it ;)
And at last, if you are wondering if all I've said is based on experiences or not, of course it is! For example, I became a NetBSD developer after helping during several months (and still contribute regularly). I submit many bug reports to the GNOME project. And I also drive my own projects, like Buildtool. I wish days were longer...