Thinking practices

Doing programming work, it helps to have a little mental toolbox that you build up over time. Just like there are patterns for coding, or for playing a musical instrument that you commit to muscle memory, there are mental patterns for helping yourself think and learn.

Freewriting to get unstuck

Whenever I am stuck on an implementation problem, or sensing some unexplored complexity, or even just finding myself hesitating on something, I take that as a mental trigger to open a new text file and just start writing down my thoughts, stream-of-consciousness style.

I do this in a very unstructured way, like having a conversation with myself or ranting (maybe swearing if I’m cranky). The point is, at first, just to get writing, using the frustration as an on-ramp. Once it’s out of my system, I veer into possible approaches for the problem, whatever I can think of, listing pros and cons and counterarguing with myself, and I keep going until I’ve explored maybe three different ways to do it.

This always, always gets me moving forward again. I think it works for a couple of reasons:

First, the file serves to expand your short-term memory. It’s very hard to fit three approaches to the same problem in your head at once. Much easier to have them written out in front of you, so you’re not at risk of forgetting one. It sheds a huge amount of cognitive load, making you somewhat superhuman.

The second reason is it forces me to come up with multiple approaches. Usually, my first idea will not have been my best. Even if it’s what I ultimately choose, I’ll feel on firmer ground to have explored the alternatives at all and reasoned my way to a different choice.

The medium may not be that important. Do pen and paper if it works for you, but I think it’s easier to type—I can type faster than I can write, and I can go back and edit and intend and restructure things as I go.

Mind-mapping / topic-mapping

My preferred method for learning a new domain is the paper mind map, or topic map, or whatever you like to call it. I grab a sheet of printer paper, and start drawing out a little taxonomy or picture of the concepts and how they relate, as I come across them. The format is informal. Mostly I do text blurbs connected by straight lines, but you can draw little glyphs and icons, label your edges, whatever you need.

This is surely already familiar, and I’m sure a lot of people have covered it better than me. I’ll just stay that the reasons I think it works are, first, that it takes advantage of your visual system, which has a lot more bandwidth than reading. Plus, you’re engaging with the material, manipulating it and organizing it and repeating it in your own language, as you read it or watch it, and that makes the concepts stick better. Often, it’s the making of the map that really solidifies things, and you don’t need to refer back to it later.

But last, you can keep it, too! Grab a three-hole punch and pop it into a binder, and you start building up a little grimoire of maps.

Generating multiple ideas

Quantity begets quality: if you churn through a lot of ideas, you’re more likely to find the good ones. (It works with photography, too.)

Whenever you’re faced with a non-trivial engineering task, make sure that you’re thinking through multiple ways to solve it up front. You’ll be likelier to find a better way than if you go with the first thing that comes to mind. This goes hand in hand with the freewriting technique above, which is my favorite way of doing this.