The Ray Tracer Challenge by Jamis Buck. It uses Cucumber tests to specify the behaviour of the code, without giving you the code. Not a single weekend project. I've been doing it in C++ to learn about the modern language, but any language can be used.
I wish more books did this. Mostly they just spoonfeed code. It kind of ruins any interaction you can have with the book.