There's a common belief that you need a special kind of mind to understand computer science. I think it persists because it reassures two kinds of people: 1) programmers and 2) non-programmers.
A story about computer science
and other improbable things.
Ask any programmer and they will probably tell a story like this: "My {father, boyfriend, wife} is a very smart {lawyer, writer, geologist} and I tried to teach them programming, and it was a disaster. Most people just don't get it."
If you happen to get programming, you can glory in the feeling that you have a gift for understanding complexity. Otherwise, you can tell yourself that you just don't have the gift. It's no one's fault. It's how things are. You'll never be a musician or a ballerina either.
I don't buy that. It's like saying that anyone can learn to read but most people just don't get writing. There are too many useful ideas stuffed into the grab-bag we call "computer science" to keep locked away. More to the point: if so many smart, motivated people can't seem to wrap their heads around computer science, you have to wonder whether there is a problem with computer science.
Programming is hard. Logic is hard. And that's fine. But if it remains hard, if we leave this world just as complex as we found it, have we made real progress?
To the Romans, multiplying MCMIIX and LXI was a job for experts. Exponents were literally unthinkable. Today we expect better of six-year-olds. It's not that we're so much smarter. We discovered a better way to think about numbers. Is there a better way to think about programming?
To find out, a couple of years ago I started writing a children's story about programming. The goal was to find the bits I understood well enough to teach to a nine-year-old. After a few months I realized that I didn't want to teach programming as such. Learning how to program is a terribly frustrating experience.
When I was nine my school had a room full of donated Apple IIs. I remember a few things about it: the seemingly pointless exercise of "formatting" our disks, a boring lecture about search and replace, a silly song about the home row keys. Most of all I remember playing with Logo. Once the incomprehensible rituals of setting up the computer were satisfied, we got to play with a little turtle that could do anything --- provided you could figure out how to teach it.
I now know why all those rituals were necessary. What galls me is that, twenty-plus years later, pointless rituals haven't gone away. Most of what I've stuffed my brain with since then are the random things that must be done before real work begins.
The rest... the rest is the good stuff. They are both facts and habits of mind, and the best way to learn them is through play and discovery. The idea that most of what we call programming is just paperwork is not at all original to me. Alan Kay has been pounding this drum for longer than I've been alive. Seymour Papert invented Logo for precisely this reason.
Writing Lauren Ipsum has become a kind of Logo game: learning through learning how to teach. I've had to go back to the basics, to try to understand the why and how of things. I've learned that all integers are just zero and one in disguise. I finally learned that zero is an even number, and how to get perfectly fair flips out of any biased coin. Lewis Carroll's work is more subtle and profound than I ever imagined: "What the Tortoise Said To Achilles" is actually a proof of infinite regress buried in the foundations of logic itself.
In the coming months I will post more about the book and the ideas behind it as we get ready to publish. I hope you like it.