Meerkat is a method to get people to learn at the right speed by putting together a Mentor and an Learner. It is inspired in how meerkats teach their puppies to eat scorpions. The mentor picks a project that is challenging gives it to the learner, and waits till the learner declares defeat. Then the mentor slightly simplifies the project, and gives it back to the learner; This happens a few more iterations, till the learner can solve the task. Meerkat method skips ‘exercises’ (that is, problems that are simple enough for anyone to solve) because it forces the learner to be at their stretch zone all the time.
To learn optimally you need to pick a project that is right for your skill level: not too hard, not too easy.
To teach yourself anything, you pick a sequence of tasks. Common sense tells us you should do tasks of increasing complexity.
Common sense is wrong in two ways:
(1) It assumes that we (as novices) make good estimations about task complexity. You need tax complexity (or a proxy) to order the tasks. But I have yet to see a domain where beginners make good estimations! Imagine you know no math whatsoever. How easy is it to solve a particular system of equations? Tough call.
(2) It assumes that going from easy to complex is better for learning the skill. But following this ramp guarantees that you will spend quite a bit of time on simple tasks. Time that you could spend on stuff that challenges you just about right. You want to stay always at the border of your capabilities.
You may choke on a task that is too difficult, or improve slowly because you pick a too-easy task. You just don't know in advance, because you need skill to rate task's difficulty. So we are in a predicament. What can you do as a learner?
You just borrow that difficulty-estimation skill. From a more advanced programmer than you.
You walk pass that advanced coder and ask him to pick a just-right task for you, right? While this might work occasionally, it’d be hard for a random better coder to get a feeling of your level without some knowing you. And let be honest, unless he’s invested in you getting better (example: your boss), the incentives aren’t there for him to spend hours thinking about that just-right task for you. You need a mentor.
Turns out that animals have similar problems training their descendants as coders have. Let's have a look at what the Meerkats do.
Meerkats eat scorpions. Baby meerkats need to learn to eat them too; but scorpions are tough! Parent Meerkats bring a live scorpion to their puppies, and when it's clear they cannot eat it, they maim the scorpion a bit and offer it again. If the puppy makes progress, but still struggles, more maiming ensues. A few iterations and the puppy eats the scorpion. Yummy!
For a puppy, eating a scorpion is not an easy task. This is not a problem where the solution is in front of you and you just have to walk towards it. A programmer swimming in web tutorials has only a vague idea on how the end result looks: he’ll be competent on that technology. Vague. Hard.
The puppy didn’t start eating say beetles to ‘train’. He could have spent weeks on beetles and not being better at actually eating scorpions. Which is the whole point, as scorpions is what’s around to eat!
How did the adult meerkats go about the problem? They started with something that was challenging even for them, and made it less challenging little by little. If they simplify too much, say with a dead scorpion, no learning happens.
In the Meerkat method we have three basic concepts. We have a Mentor, who is a person who can lead others. The name doesn't mean they are superhuman: you can be a so-so programmer and still lead a person who knows less than you. Both of you will come out the better for it. One can be a mentor on a particular topic, and a learner on (many!) others. The person being a learner with you today could be mentoring you on a skill they are better than you at.
We have a Learner: A person who wants to follow a Mentor. You can be incredibly skillful in many technologies, and still play the Learner role for a new one you are learning. That is: no stigma in being a learner!
And we have a Scorpion: that is, a task at the limit of the Learner's capability. The Mentor will observe carefully how the learner goes about things; at the beginning he has little to use to prepare a first task. This doesn’t matter: the first task is something that you (mentor) find demanding and interesting for yourself.
Learner: If you are learning a new technology, finding a Mentor is the fastest way to improve. Anybody can be a Mentor and at Learner at different times. On some technologies you can lead, and in others you can follow. Situations in which you can sit with a willing Mentor are far in between.
Learner: You need to find a project you like and a Mentor that you trust. Once you both agree you want to work together, the Mentor will give you a scorpion (see below for an example)
Mentor: You need to find a scorpion. A scorpion is a task you will give to the Learner, that is valuable/demanding for you (and more so, to the Learner). You will gauge the difficulty of the task, and the skill of the Learner. The goal is to first give a task that is at the very end of his capabilities.
Learner: You try to do the task to the best of your capability. No need to pair, you can go on your own for a while. If the task feels impossibly hard, get back to the Mentor.
Mentor: Reduce scope, give a hint, or solve a bit of the task in front of the student. This is called 'maiming the scorpion' The result is a simpler task. Be careful not to simplify too much, you want the student to still be at the border of his capability. Make a mental note on what he found to be an unsurmountable obstacle, because this will help you prepare the next task.
Both: Iterate till the task is solved.
Epsilon Camp, a children's math bootcamp, makes a clear distinction between problems and exercises:
What makes the difference between an “exercise” and a “problem” is how readily a learner can figure out how to begin when faced with the question. All learners need some exercises at all stages of learning, but it is possible to go wrong by having too few problems in the learning process. Basically one can never solve too many problems.
A project is a task that has no clear solution yet, where finding the right questions is a prerequisite to completing the task.
A lot of exercises is what you get when you attend an university course or a MOOC. You don't do problems often, and full projects are even rarer. It could be that you only get to do a project at the very end of the degree, after five years of exercises.
The Meerkat method goes against more established methods, where you go bottom-up (from simple tasks to complex ones) by starting with a project. In Meerkat, you start with the most complex task that a Mentor thinks you can complete. He'll start with something that is challenging maybe even for himself. You are helping him, like the Learners in middle-ages guilds helped the Mentors.
As a learner in the Meerkat method you have fewer choices to make, and this is a good thing. You piggy-back on the Mentor’s experience to call for the best path. Even if the mentor is not very good at introspection and doesn’t know how to adjust the difficulty level at first, the meerkat method will auto-calibrate with iterations.
Mentor: Predict telecom customer churn based on information about their account. The data consist of 200 predictors related to the customer account, such as the number of customer service calls, the area code, and the number of minutes, etc. We have data from 2008-2015, and want to predict 2015.
Learner: "Before, I need to make a decision that is not trivial: how do I split the data into holdout, test, and training?" (proposes two options)
Mentor: Two options: (1) Take all the available data from 2008-2015, reserve some data for a test set, and use resampling with the remainder of the samples for tuning the various models. (2) create models using the data before 2015, but tune them based on how well they fit the 2015 data. This strategy may produce overfitting. What if 2015 is very different from 2008-2014?
Learner: (Finds a compromise over the two methods on his own): "Tried a regression model with the 200 variables, didn't work great. Also tried a random forest, slightly better, not ideal. I'm stuck. Are there more specific techniques I should be using?"
Mentor: Are the predictors good for this task? Maybe this dataset doesn't contain predictors that are good enough. try dropping predictors with zero variance. Run a PCA on the remaining continuous predictors. Rerun existing models. If that fails to improve results, try to find better predictors outside the data you have (web APIs). You can try model X, Y and Z.
Learner: (Goes off for two days and does that, finds some improvements by transforming features;also gets 20 more from web apis). "It could be that the way I'm looking at model fit is not ideal (percentage correct). What other methods are there? And I cannot find an implementation of model Z that converges..."
Mentor: We can use ROC curves. If you need a good implementation of model Z, check this paper:"Implementing model Z the way God intended". You can try these two python libraries: Zmod, blahmod, and argmod.