Everybody should try implementing a ray tracer at least once in their programming career. The math is well-documented, and the wow factor is pretty great.<p>It also is a rabbit-hole of optimizations and modularity; you can always add on yet-another-cool-thing, and so never become bored. :)