"I imagined myself working montage-like through the book, smoothly accruing expertise one chapter at a time," Somers wrote. "What happened instead is that I burned out after a week." Somers writes that he repeated this process over and over again. He thought for a while that he just didn't have the right kind of brain for programming.
Eventually, though, he discovered Project Euler and his relationship to programming changed.
Project Euler is a series of computational problems, each building on the last. Each problem would be difficult and time consuming to solve by hand, so you need to write computer programs to solve them. It's structured like a game - you answer one problem, and you level up to the next.
You're only given a problem, and a text box to plug in an answer. Once you provide the correct answer to a problem, you are given access to a discussion forum based around that problem, but you're on your own to figure out how to solve them. You can use pretty much any programming language to solve the problem. The point is just to get an answer and learn the process.
"Those books that dragged me through a series of structured principles were just bad books. I should have ignored them," Somers wrote. "I should have just played."
Project Euler gave Somers a set of questions, and he was able to work on solving them on his own. It's an approach to learning math and programming that I've heard a lot about, and it's a good one. Here are some other good tips for teaching yourself new skills (not necessarily programming).
I like Project Euler and its approach to teaching computer science. But I the problems solved aren't immediately practical. Tools like Scratch (and its offspring Waterbear) make it possible to build games in only a few hours. With Google App Inventor you can make your own mobile applications. And you can quickly learn to make generative art with Processing. Project Euler is better than these at teaching computer science, but each of those projects makes the programming more immediately useful.
Has anyone seen anything that blends these approaches?