Programmers often have to solve a variety of problems that range from something simple like fixing a bug to something more complex like writing a search algorithm for a parking locator app. Different scenarios require different methods of approaching and fixing the problem. That means that a programmer has to have a tool set of mental models to help get them through challenges that arise. For an extremely complex problem, those who are skilled at using first principles won’t be trapped by complexity and will immediately start whittling away the problem into its essential parts. The other parts that are fuzzy can always be researched, or can be handled by someone with more expertise.
Mental models expand beyond a single domain into several other fields; an architect may look at the design of a twisting skyscraper and have one thought while a physicist may look at that same skyscraper and have another thought. Things get even more interesting when you add a biologist into the picture and they notice that the peak of the tower resembles that of a bird’s beak. There are a bevy of problems that had to be solved in creating the skyscraper–someone with the ability to tap into all three of these mental models would be able to come up with unique solutions. The person doesn’t have to be an expert in all of the domains either.
An example of mental models put into practise in an engineering setting are Japan’s bullet trains. For a while, they couldn’t solve the problem of the explosion of noise that would erupt when the trains went in and out of tunnels. Not until a birdwatcher and engineer called Eiji Nakatsu arrived on the scene with brilliant insight.
He reduced noise by redesigning the rig that connect the train to the wires above to mimic the wing of an owl and redesigned the nose of the train so that it mimicked the nose of a kingfisher. The result was a faster, quieter train.
Let’s look at a programmatic setting. You can combine psychology and systems knowledge to create addictive apps that solve the common problem of, “how do we get users to stay on this app?” à la Facebook. Psychologists who are well aware of incentives and the feedback loops that engineers can reproduce with their systems knowledge use their own mental models and see Facebook and similar platforms as a source of addiction. Ethics aside, you can argue due to tapping into mental models, Facebook’s programmers have largely solved the retention problem.
There’s no doubt that the application of mental models in real life situations can produce noticeable results. The thing is, knowing how to apply a mental model to a given situation takes a lot of experience. Often, those who solve problems don’t need to say that they used X mental model to solve said problem. Their thought process is intuitive. It takes steps to reach this level of intuition. And the first step is to familiarize yourself with mental models that can help you in your day to day problems. There are tons of books out there that cover a slew of mental models. Sprinkled in this list are books that are more “programmer” oriented. I’ve highlighted the books that cater more to the average programmer.
- Thinking in Systems: A Primer by Donella Meadow
- The Fifth Discipline by Peter M. Senge
- An Introduction to General Systems Thinking by Gerald Weinberg
- Sources of Power: How people make decisions by Gary Klein
- Thinking and Deciding by Jonathan Baron
- Super Thinking by Grabriel Weinberg
- The Model Thinker: What You Need to Know to Make Data Work for You by Scott E. Page
- The Great Mental Models by Shane Parrish
- How to Solve It: A New Aspect of Mathematical Method by G. Poya
- The Art and Craft of Problem Solving by Paul Zeitz
- Object-Oriented Design Heuristics by Paul Zeitz
- The Decision Book Mikael Krogerus
- Analysis Patterns by Martin Fowler