The Parable of the Crow
Hey y'all! Still hard at work on the new learntla version. It's currently about a third of the length of original learntla, which is pretty impressive, given I'm estimating I'm like... 10% done with the first draft? At most. I've also written many of the tools I'll need to manage the complexity of the larger docs, and specced out many of the examples and exercises I want to do.
By the way, we now have a TLA+ survey available! Please fill out the survey if you can, we really want to understand the community better, and this is a great way to give back! Click me click me click me
This is the third time I'm writing a TLA+ resource: the original learntla, Practical TLA+, and now this. Plus I've also done Alloy documentation and several workshops, so in all I've spent a lot of time in the past five years thinking about how to explain shit better. There's a lot of stuff I didn't know before that now feels so obvious! So obvious that it almost feels not worth talking about, but then again I didn't know it before, so I'm guessing some of you don't know it now. So I wanna share a short education concept I call "The Parable of the Crow".
Specifically, this crow!
For those of you too cool for youtube, here's the tldr: a crow, "007", wants to get food out of a container. But because humans are assholes, the only way to get it out of the box is to:
- Get a short stick tied to a string, by landing on a branch and pulling the string up with its beak
- Use the short stick to get two rocks out of cages
- Use the two rocks to weigh down a lever, releasing a long stick
- Use the long stick to get the food out of the container.
007 had been trained on doing each of the steps in isolation, but this was the first time he was presented all four at once. He was able to do the tasks in sequence, showcasing avian intelligence in general and his exceptionalism in particular.
We can think of the puzzle as taking four "moves", where each move is something 007 already knows. Each move provides an intermediate clue that the move has made progress towards the ultimate goal. With all of these, a four-move puzzle is at the upper limit of crow cognition. We can assume that if the moves were new to 007, or there's no intermediate feedback, the puzzle would need to be simpler to be solvable. I'm not an expert on avian intelligence but I'd speculate that the upper limit would be two moves— solvable by some crows but not many.
Getting past the two move limit (or reaching it, for many crows) then requires two things. First, a repertoire of practiced moves, which can be done with little cognitive overhead. Second, the means to sense whether or not a move actually makes progress, or if it's just a dead end.
People are much smarter than crows [citation needed], and moving sticks is "easy" for us, so the same logic doesn't apply. But there are also "hard" subjects for us, like software engineering. Then we're back in the same place: if you don't have a set of moves and a way of measuring progress, you can only solve problems that are one, maybe two moves long.
(Something important about measuring progress: not having feedback causes two kinds of problems. First, it causes you to waste time on false leads, because you don't know they're unhelpful. Second, you also risk starting on the right path and then abandoning it, because you don't realize it's the right path. I think that's the bigger of the two problems.)
Tying this all back to teaching! Experts have both skills, a set of moves and a sense of progress. Beginners have neither. So in explaining things, the most you can ask of people is to follow one step. This doesn't mean that everybody will always be able to follow a single step— most subjects are still hard! But you have control over how difficult, while a two step explanation is going to be exceptionally difficult no matter what.
Of course most interesting "real world" problems are multistep. When teaching people how to solve them, you need to decompose the problem into "multiple single-steps", where the student knows when they've made useful progress. The easiest way to do that in exercises is to break it into multiple subexercises that build on each other. For examples, I like presenting a simplified model and then moving through variations of it, where each variation is itself something insightful.
(Riffing on this: We teach a lot of syntax and semantics, sometimes technique and idioms. Is that all moves are, or are there additional classes of moves we can be teaching? Also, can we directly teach "knowing if you've made progress?" I think so. I believe that any skill humans develop can also be "taught", though for many skills the teaching doesn't look like conventional educator instruction. But we can still create a curriculum that accelerates learning said skill.)
I know this isn't a real parable. I just like crows ¯\_(ツ)_/¯
If you're reading this on the web, you can subscribe here. Updates are once a week. My main website is here.
My new book, Logic for Programmers, is now in early access! Get it here.