Treesort, or how I learned to keep trying and avoid Google
Nicolás Siplis

I enjoyed this. It reminded me of a couple paragraphs from the Feynman Lectures on Computation:

Throughout the book, I will suggest some problems for you to play with…. You might skip them thinking that, well, they’ve probably already been done by somebody else; so what’s the point? Well, of course they’ve been done! But so what? Do them for the fun of it. That’s how to learn the knack of doing things when you have to do them….
What one fool can do, so can another, and the fact that some other fool beat you to it shouldn’t disturb you: you should get a kick out of having discovered something.
Most of the problems I give you in this book have been worked over many times, and many ingenious solutions have been devised for them. But if you keep proving stuff that others have done, getting confidence, increasing the complexities of your solutions for the fun of it — then one day you’ll turn around and discover that nobody actually did that one! And that’s the way to become a computer scientist.