It’s tempting to generalize: If programming is best learned in this playful, bottom-up way, why not everything else? Could there be a Project Euler for English or Biology? Maybe. But I think it helps to recognize that programming is actually a very unusual activity. Two features in particular stick out. The first is that it’s naturally addictive. Computers are really fast; even in the ‘80s they were really fast. What that means is there is almost no time between changing your program and seeing the results. That short feedback loop is mentally very powerful. Every few minutes you get a little payoff – perhaps a small hit of dopamine – as you hack and tweak, hack and tweak, and see that your program is a little bit better, a little bit closer to what you had in mind. It’s important because learning is all about solving hard problems, and solving hard problems is all about not giving up. So a machine that triggers hours-long bouts of frantic obsessive excitement is a pretty nifty learning tool. The second feature, by contrast, is something that at first glance looks totally immaterial. It’s the simple fact that code is text. Let’s say that your sink is broken, maybe clogged, and you’re feeling bold – instead of calling a plumber you decide to fix it yourself. It would be nice if you could take a picture of your pipes, plug it into Google, and instantly find a page where five or six other people explained in detail how they dealt with the same problem. It would be especially nice if once you found a solution you liked, you could somehow immediately apply it to your sink. Unfortunately that’s not going to happen. You can’t just copy and paste a Bob Villa video to fix your garage door. But the really crazy thing is that this is what programmers do all day, and the reason they can do it is because code is text. I think that goes a long way toward explaining why so many programmers are self-taught. Sharing solutions to programming problems is easy, perhaps easier than sharing solutions to anything else, because the medium of information exchange – text – is the medium of action. Code is its own description. There’s no translation involved in making it go. Programmers take advantage of that fact every day. The Web is teeming with code because code is text and text is cheap, portable and searchable. Copying is encouraged, not frowned upon. The neophyte programmer never has to learn alone.