If you want to get better at programming:
Take any existing program(or write a simple one) and start optimizing it for speed/size.
You'll uncover deep problems(e.g. fast sorting) and algorithms you never knew before, then you move to the next toy program.
If you want to become a code monkey: Pick any program source and add more features. Repeat until your program is much larger and supports more features than commercial programs.
After you're completed it, sell to Microsoft or someone willing to maintain it.