Learning Well

April 20, 2014 Onsi Fakhouri

One of the benefits of pairing that we emphasize at Pivotal is the learning environment that it provides. We find that one of the best ways to teach a new technology or codebase is to pair up novices with experts. It’s important to understand however that effective learning doesn’t happen automatically – even when pairing; it takes intentional thoughtful effort from both the teacher and the student (or master/apprentice if you prefer) to transform a mediocre learning experience into an effective one.

Two things can help here: (1) understanding what effective learning actually does, and – with that in mind – (2) uncovering and engaging the student’s preferred learning style.

Let’s start with the first.

What is effective learning?

There are two distinct, but related, things that happen when we comprehend a new domain of knowledge: we build an intuition for the domain, and we construct a comprehensive mental model of the domain. Both are crucial.

Intuition allows us to move seemingly effortlessly as we interact with the domain of knowledge. We don’t have to pause and think for very long when solving problems but, instead, have an intuitive sense of where we are and where we are going. We may not be able to articulate exactly why, but things just feel right or wrong as we work in the domain; there is a flow of rhythm and harmony and we know, deep in our bones, what consonance and dissonance sound like.

Mental models give us the words and mental frameworks to reason about the domain of knowledge rationally. With an accurate mental model we have a grasp of the formal rules governing the domain and can articulate precisely why certain things work and why other things don’t. We can reason about new, heretofore unseen areas of the domain and can analyze and critique existing artifacts within the domain.

To make effective progress in learning a domain is to hone an ever deeper intuition and an ever finer and more nuanced mental model. Both are necessary: intuition allows us to move quickly and effortlessly while mental models allow us to communicate effectively and reason through new classes of problems.

An example

Let’s take a concrete example from the domain of introductory (as in, middle school!) algebra. Solve for x:

x + 3 = 7

A student who has spent some time working through similar exercises will likely have built up an intuition around problems of this class. She might immediately think “I should move the 3 to the other side” and does so, remembering that she needs to give the 3 a minus sign:

x = 7 – 3

“And that’s just 4!”

x = 4

With enough practice, the student may not spend any time at all thinking through these steps but will instinctively know to move the 3 over and slap on a minus sign.

Now, consider what this student might do given a slight variation on this problem:

3 = 7 – x

If her knowledge of this domain is limited to a handful of memorized rules and a narrowly scoped intuition she will likely struggle with questions like: “Can I move x around?” and “How do I get rid of the minus in front of x?”

What’s lacking here is the correct mental model – a grasping of the deeper truth about the structure of the domain.

In this case, what the student needs to understand is the notion of equality. She needs to understand that in solving these problems she isn’t following arbitrarily rules about “moving” things around and slapping on minus signs. Rather, she is modifying both sides of the equation in identical ways so as to maintain equality. In so doing she is able to isolate x at which point the entity on the other side of the = sign represents the value of x. To take our first algebra problem – the student isn’t moving the 3 from one side to the other. She is subtracting 3 from both sides, thereby maintaining equality, in order to isolate x.

Having this accurate mental model opens the doors to tackling new aspects of algebra (like the second algebra problem outlined above). This, combined with practice (slow and tentative at first!), will allow the student to expand her intuition to cover more varied classes of algebra problems.

Two learning styles

With the twin goals of intuition and mental models in mind, I’d like to present two different learning styles that I’ve seen come up time and again at Pivotal. Of course, this is a huge simplification but I believe that even this naive classification can prove fruitful – so, on with the broad brushstrokes!

Broadly speaking there are two kinds of learners: top-down learners and bottom-up learners.

Top-down learners (I am one of theses) are the kinds of people most comfortable with the academic setting: lectures, readings, and homework. They are students-at-heart and their preferred approach to learning a domain involves first receiving a formal rendition of a mental model (from a lecturer or textbook), followed by practice (homework) to internalize that mental model and – ultimately – build an intuition.

Top-down learners might approach a new programming language or API by reading a book, or studying the spec/documentation, before sitting down to work out some examples or hack on a side project. Top-down learners can be quite uncomfortable groping around blindly with an existing codebase, preferring, instead, to sit down and read – taking it all in – to arrive at the beginnings of a coherent mental model first.

By contrast, bottom-up learners are the apprentices of the world. They learn their craft best by sifting through examples, pattern matching and tinkering and tweaking along the way to understand how the system responds to their changes. They might tag along and watch a master craftsman then practice, practice, practice. Slowly but surely they build an intuition for how the domain works by learning from failures and successes.

Only once they’ve built this intuition will bottom-up learners turn to the question of building mental models. Often times this happens when someone asks them to articulate exactly how and why the system works the way it does.

Of course, both learning styles are valid. And both have complementary strengths and weaknesses. The top-down learner may furnish their minds with a precise mental model, but without much prolonged practice they’ll never manage to build that crucial intuition that enables them to work in the domain effortlessly. The bottom-up learner may have a strong working intuition, but unless they perform the reflective work necessary to articulate a mental model – they will struggle when faced with new situations or when asked to explain something.

Unsurprisingly, the two learning styles begin at opposite poles and meet halfway!

Pairing and Learning

Knowing the twin goals of effective learning, and understanding at least these two broad categories of learners, can be very helpful when pairing in a teacher/student master/apprentice setting.

What kind of learner is your pair? Often times, if I’m working with a top-down student, I’ll invite us to step away from the keyboard and head to the whiteboard where we can diagram out the mental model of the system we’re working on. If a top-down learner asks me a question, I try to express the underlying rules and quirks of the system at hand and then ask them to answer their own question.

If I’m working with a bottom-up apprentice, I find the best thing to do is to relinquish control and give them an opportunity to explore and fail/succeed. This takes patience (something I often lack!) but can be far more beneficial than a mini-lecture. Often times, the apprentice will ask me to drive. As I do, I attempt to articulate why my intuition is taking me from one place to the next and leading me to the solution. When a bottom-up learner asks me a question, I try to point them to an example in the code that provides the answer so that they can see the answer in context.

In either case, for effective learning to occur, I try to encourage both the construction of a mental model and the building up of an intuition:

To help students and apprentices build their own mental models there’s little that works better than the socratic method. Yes, I might try to draw out diagrams and present mini-lectures on how things work but, ultimately, asking a student a question that forces them to articulate why or how something works is one of the best way to encourage them to build a mental model. This also enables the teacher to poke holes in their mental model and set their understanding straight.

More: the best teachers can infer the errors in a student’s mental model simply by observing their problem solving process. Here, again, asking a question is better than providing the answer. Instead of “you should type this instead” it might be better to ask: “What are the reasons that didn’t work? How might we find a better way to do this? How will this line of code here interact with that object over there?”

The best way to build intuition, of course, is to encourage practice. The master must let the apprentice struggle and fail from time to time. This is where ping-pong test-driven development can be so beneficial: the master may write the test and allow the apprentice to struggle through the code (and vice-versa). This gives the apprentice a well-defined problem to work through. Sometimes when I do this I struggle to let go of the keyboard and let my pair take their time to work through the “pong” of my “ping”. The best solution for me? Stepping away for a few minutes to get some coffee!

All of this takes intentionality, patience, and practice. Even when pairing: learning well is hard and teaching well is hard. Both teacher and student, master and apprentice, must strive towards the twin goals of building deep intuition and articulating robust mental models.

About the Author

Onsi Fakhouri

Onsi Fakhouri is the Senior Vice President, Cloud R&D of Pivotal.

How to interview for a PM position
How to interview for a PM position

How to interview for a PM position Product manager roles vary by company. But when you’re interviewing for ...

Your Server has "participated in a very large-scale attack"
Your Server has "participated in a very large-scale attack"

In this blog post we configure an NTP (network time protocol) server on a FreeBSD-based Hetzner virtual mac...