Training Regime Day 11: Socratic Ducking

Introduction

As the story goes, there was once a programmer with a bug. They wanted help solving the bug, so they asked a colleague. In the process of explaining the bug to the college, they solved the bug.

The theory is that in the process of explaining the bug, the programmer was forced to unravel parts of their model for how their code worked. In the process of this unraveling, they discovered parts of their model that were false, which led to a solution.

The programmer realized that they could just use a rubber duck instead of a human.

(And they say that programmers are going to be among the last to be automated.)

Socratic ducking is a pair-debugging strategy that attempts to take advantage of this phenomenon.

Socratic Ducking

The virtue of socrates is the ability to ask questions.

The virtue of the rubber duck is the inability to speak.

The virtue of the socratic duck is the inability to speak except to ask clarifying questions.

The process of socratic ducking involves you, the protagonist, finding a partner to be your socratic duck, then talking to them about your bugs. The socratic duck remains mostly silent, except to ask clarifying questions.

Remember, the techniques are not the point, but the bugs are even less of the point than the techniques.

The point of socratic ducking is not to solve the protagonists problems. The point of socratic ducking is to have the protagonist practice their ability to solve their own problems. To this end, the socratic duck should nearly always be silent: a rough guide is asking one question at most every 5 minutes. Even if it what the protagonist doesn’t quite make sense to socratic duck, as long as the socratic duck thinks that what the protagonist is saying makes sense to them, then the duck should remain silent.

For instance, if you’re being someone’s socratic duck, they might say something like “it makes me feel like a spiky sheep”. Internally, you might be thinking “what the heck is a spiky sheep”, but externally you should nod and act like you know what they’re talking about (provided that you do think that “spiky sheep” makes sense to them).

It might be useful to notice the temptation to try and help them solve their bug for them. A way to placate these desires is to have “debrief” at the end of socratic ducking where you can give the protagonist all the object level advice you thought of.

Self-ducking

Epistemic status: highly experimental.

It’s possible for one person to play both the role of the protagonist and the role of the socratic duck. Since the socratic duck is mostly silent, this will not interrupt the flow of the process very much.

This self-ducking technique works by using a model of yourself/​your friend for either the protagonist or the duck. It might help to have an actual rubber duck to talk to and just pretend that the duck can ask you questions.

This technique relies on the ability to notice when you’re explanations of things don’t quite make sense. I find that it’s easier to notice this when you’re pretending that you’re explaining to someone else instead of just explaining to yourself, but you might find it helpful to pretend that someone else is explaining to you.

This differs from standard “rubber duck debugging” insofar as you’re trying to actively search for areas of your explanation that won’t make sense to your model of yourself/​your friend.

Exercise

If you can, find someone to be your socratic duck and try and debug one of your bugs. They don’t have to be a rationalist; I think that the culture lore of “rubber duck debugging” has become popular enough that your non-rationalist friends might be willing to listen to you talk for a while.

If you cannot find someone to be your socratic duck, I suggest trying to talk through one of your bugs to yourself. It is crucial that you talk out loud. Recording yourself can create pressure to explain in more detail than if you’re just talking to yourself. Pretending that you intend to give the recording to one of your friends to listen to might make it easier to realize when you need to explain something in greater detail.