Analogy problems

28 Feb 2017

Analogy problems

Analogy problems are things like "foo is to bar as baz is to... what?". They're often written using colons, like this: "square : triangle :: cube : tetrahedron" The idea is to infer a relationship between the first two ideas, that can be transported to form a similar relationship between the third idea and the solution.

Douglas Hofstadter has written a lot about analogy problems, arguing that they are the heart of cognition.

HipBone games

Herman Hesse's "The Glass Bead Game" is a book about a board game, which is described only vaguely in the book. Some board game designers have attempted to create particular games, inspired by the novel. In particular, HipBone games are versions of the Glass Bead Game, where the players take turns labeling nodes in a particular graph with concepts, such that the links between nodes form relationships, eventually creating a complicated network of analogies.

"HipBone Games 'Circuit' board"


Venkatesh Rao has a collection of so-called "2x2s", which are four concepts put into the four corners of a square, where each side forms a relationship.


The Business Model Canvas is a collection of labeled boxes, which is suggested to structure thinking about business models. The Lean Canvas is an adapted collection of labeled boxes, intended specifically for startups. By filling in the abstract boxes with personal and concrete particulars, you are forming an analogy between your situation and other businesses/startups. This practice of analogy making, together with the weirdly compressed world of venture capital pitching, leads directly to goofy startup idea descriptions.

Tarot readings

A Tarot deck has some standard meanings associated with each card. For example (and very crudely) the High Priestess card means, among other things, "Knowledge". A Tarot spread also associates a meaning to each position. For example, the first position in the basic Celtic Cross means "The heart of the matter". A Tarot reading stochastically fills each position with a card, and invites you to personalize the combined meaning. Someone anticipating asking their significant other to marry them might personalize "the knowledge at the heart of the matter" as "what will their answer be?".

This is similar to playing HipBone games with an opponent whose moves are controlled by the shuffle of the deck.

How does this relate to programming?

Design patterns (and design methods such as SIT, TRIZ, and Jackson Structured Programming) are essentially collections of small diagrams of ideas in relation to one another. To use design patterns, you personalize them, figuring out corresponding concrete personal meanings for the abstract elements in the pattern description. Then you use those meanings to translate the abstract and impersonal language of the design pattern's advice into concrete and personal meanings via those correspondences, and follow it.

A Programming Tarot would have cards and spread positions that have software-specific meanings. You would alternate between following the rules of the spread, and personalizing the meanings to your particular problem.

We humans often get trapped in particular ways of thinking, and a structured technique like this might produce more creative ideas than "free form" thinking in a featureless room with only a whiteboard for company.