Learning by reading the source code of an open source application always seemed like a good idea, but every time I tried it, it was a futile effort. I think that's because there's three general types of open source apps, and none are good to read for learning's sake:
- The small projects. By small, I mean "almost not a project" small. For one reason or another, these never made it past the proof of concept phase. Either the ideas weren't interesting enough, or worse, the programmer(s) weren't good enough to translate it into a ready-for-prime-time app. Often, the ability of these programmers aren't significantly greater than your current level, so these aren't worth your time studying.
- The medium-small projects. These projects are big enough to be interesting and sophisticated, but the publicly-available technical documentation is severely lacking and you'll never make heads or tails of their architecture. You could email the contributors, but they're probably too busy dividing their time between a high-level paid day job and committing all their personal time to this pet project. Moving on...
- The big time projects. E.g. Firefox, Eclipse, etc. Software in this category is meticulously documented, but it doesn't matter, because the amount of time required to read and understand it all is prohibitive. You'd have to be mad to put yourself through that unless you're working on the project (and hopefully getting paid to do it!).
I don't mean to dissuade you, this is just my personal experience. If you want to become a better programmer, focus on finding a job. The pace of learning during my first year on the job was orders of magnitude greater than any work I did on my own.