Skip to main content

Employing Your Subconscious

Someone[1] said “your subconscious is a better programmer than you are”. I agree.

We’ll leave the interesting topic of what a subconscious is to philosophers and psychologists, and concentrate on the practical aspects of using it to our advantage[2].

Most people know how muscle memory works. Take driving, for example. When you first learn to drive, every action — pressing the pedal with just enough force, turning the wheel the correct amount, switching on the blinkers at the appropriate time — it all requires a lot of concentration, and can feel overwhelming, especially with all the other cars around you. But as you practice, the amount of mental effort required for each action gradually decreases. Eventually you reach such a level that each action becomes automatic. You develop a feel for the steering wheel. Turning on the blinkers happens without you even being aware of it[3]. Your feet finds the brake pedal in an instant when the light in front of you turns red. No active thinking happens, the visual input triggers the muscles into action instinctively, bypassing the active parts of the brain.

The same thing happens with cognitive skills. Learners of foreign languages will recognize this — at first you need to make conscious effort to slowly build the sentences in your head before speaking them out, but eventually, with enough practice, words just start coming out on their own, you just “say”, instead of “thinking of saying and only then saying”.

So what happens with programming?

We mostly program in general-purpose languages, and one big drawback of such languages is that there are many ways of accomplishing the same thing. High quality code needs to satisfy a myriad of constraints, which implies that the majority of possible solutions are far from great, and are thus undesirable. A good subset of wrong ways of writing code follows patterns. Learning to recognize and avoid these patterns is necessary to write high quality code. The remaining subset has to be dealt with by ad hoc analysis, but even though it is ad hoc, there are common patterns and tools that come into play.

All these things that go into writing high quality code can be learned, and the end goal of this learning is to push each of these things down to the subconscious level. That way, you get the benefit of all the things, without exerting much active focus, and free up your cognitive resources to pay attention to new things that you’ve only started to learn.

There’s one common problem about having your subconscious do the work. It’s easy to tune it out, stop paying attention to its subtle voice.

This sort of thing varies highly person to person, but most people should be able to find some examples from their life that they can relate to. Have you ever been doing something — programming, or talking to a friend, or trying to figure out the best way to address a problem — and something made you feel like you’re missing something. Maybe it was an uncomfortable feeling. Maybe it was that thing that people describe as “the little voice in your head”. Maybe some vague uncomfortable memory? Perhaps anxiety, or some physiological reaction?

That was your subconscious raising a red flag. Without recognizing the sensation for what it is, it’s easy to ignore it, and overrule it with conscious thought, which at the time may not have noticed the problem at hand. Programmers tend to be logical folk, and being too bound by logic can make it difficult to listen to your subconscious, severely limiting your potential. Imagine you always had to drive while fully aware of each control in the car, making every decision consciously. I’d quickly tire yourself out, and in an emergency would not have the capacity to react in time. Driving works with reasonable safety specifically because we learn to let most of it happen subconsciously.

So, as you learn new things and push them down to the subconscious level, you also need to make sure that you’re listening to your subconscious, otherwise this won’t go anywhere. Or, rather, it will go somewhere, but you’ll hit your limits way earlier than is desirable. To a limit, you can expand your active processing power by sheer practice — just like lifting weights will grow you more muscles. But no amount of weight lifting will give you the ability to fly or teleport. Similarly, sheer practice will make you be able to actively focus on more things at the same time, but this will only make you incrementally better, whereas internalizing things on a subconscious level will make you orders of magnitude better.

Next: Cognitive Overhead ⇒

[1] I thought it was Rich Hickey (whose talks you should most definitely watch and internalize), but can’t find the quote attributed to him anywhere.

[2] Kind of like Benjamin Franklin could do useful things with electricity years before scientists discovered exactly what electricity is.

[3] I’ve been driving in Japan for almost a decade now, and still, in a high tension situation, I occasionally hit the wipers instead of the blinkers. The muscle memory I developed on the steering-wheel-on-the-left cars when learning to drive in Canada is very deeply rooted.

Comments