The only way that I can really learn something is by doing it. I have a habit of starting a project to learn something new, working on it until I feel I have a decent grasp of it conceptually, and then walking away. I use to view this as a character flaw, but its a behavior that seems to be pretty prevalent with people that develop software.. so either we're all flawed, or we're all deeply curious and love to learn. I prefer to think the latter.
A lot of things I've done can be found on my github, and most recently I've been working on this project called Nabla. Its a 64-bit RISC virtual machine that has a non-typical layout described in the previous link. I've been using it to explore the design and development of virtual machines and compilers, something that I find immensely interesting. Also described in that previous link is where I'm at now and what I'm doing there.
Some cool projects that I've also done are :
Bosley's Software Library (BSL)
Reusable libraries for Computer Vision, basic Neural Networks, and TCP/UDP networking.
A QT/C++ Application where I demonstrate Active Deformable Models, a subject that I have a lot of interest in and ended up doing some research involving their use in controlling autonomous drones.
I've done a lot more than this, but these three projects are the one I'm most proud of.