Chapter 14. Mental Models for Learning How to Code and Improve as a Developer
I've talked quite a bit about what it takes to become a great developer. To achieve a level of mastery, I've discussed a number of criteria and in this chapter, I want to add a new pre-requisite to the list.
Let me begin by asking you a question. If I showed you some code, would you be able to tell me in a few seconds if it's good or not? The world of software development is incredibly complex. However, I've discovered over the years that the best developers have the uncanny ability to instantly judge the quality of someone's code.
I spoke to you in Chapter 2, Are Developers Born or Made? – Debunking the Myth of Prodigies about the notion that prodigies and savants are a myth. But if this is the case, how can expert developers analyze programs so quickly? To answer this question, we need to go back to Fake Ancient Greece.
Mental models for the Kouros
I said Fake Ancient Greece because my favorite illustration of mental models was discovered alongside one of the greatest forgeries in modern art history.
In Malcolm Gladwell's book Blink, he tells the story of the Greek Kouros. In 1985, the Getty Museum purchased a Greek statue called the Kouros for over $9 million dollars. Initially, the museum was hesitant to purchase the statue because there was a significant fear that sculpture was a fake. Kouros pieces were so incredibly rare, the chances that a legitimate and well cared for piece had been discovered were slim to none.
However, the museum was willing to take the risk and embarked on a fact-finding mission. They put the statue through every scientific test available at the time. And the Kouros passed with flying colors. After going through the full examination, the museum purchased the Kouros for $9 million dollars.
Art historians from all over the world were flown in for the unveiling of the Kouros. But something went terribly wrong. The moment that these specialists saw the statue they knew the Kouros was a fake. Interestingly enough they couldn't give any actual reason.
They simply knew that something was not quite right. Their suspicions turned out to be correct and the Kouros ended up being proved to be a hoax. But how were these individuals able to do what countless scientific studies could not? It all comes down to mental models.
What are mental models?
In preparation for this chapter, I was discussing the topic of mental models with a friend and was surprised when she looked at me, confused. After informing me that she'd never heard of mental models, I decided to add this section to explain what mental models are. And after that we'll get into how we can build them to learn development.
A mental model is a mental representation of a specific topic or skill. You can't create a mental model overnight or with cram sessions. Mental models are developed through years of repetition and countless hours of honing a craft.
My Dad is a major league hitting coach for the Houston Astros. Throughout my life I've been able to watch him instruct hitters on how they can improve their swings.
And I'll never stop being amazed by the fact that he can watch a new hitter's swing and within a split second pick out multiple ways that the player can improve. I can tell you that he did not develop this skill in a short period of time. He has spent more time watching hitters and film than anyone I know. And over the years he has developed a mental model of what the perfect swing looks like.
Mental models for developers
OK, so we've talked about art historians and baseball coaches, but how can we create mental models as developers? You may or may not like the answer, but it doesn't really matter because it's the truth. Mental models are made through repetition.
However, repetition by itself isn't enough. For example, if you built an identical program every day for 10 years you would get really, really good at building that one application. However, you wouldn't improve as a developer. I've talked before how medical research shows that doctors who have spent years practicing on the same types of patient are less proficient than doctors fresh out of residency. In the same way, as developers we improve when we're stretching ourselves each day.
You can stretch yourself by doing things such as:
- Learning a new programming language or framework
- Teaching others how to learn programming
- Creating an open source code library and allowing other developers to use it
Einstein said it best when he said:
"The only source of knowledge is experience."
Summary
If you dedicate enough time each day improving yourself as a developer, you will be able to truthfully answer yes to the question I posed at the start of this chapter. You will be able to have the ability to look at a piece of code and instantly know if it's good or bad. And you'll know that it's not some type of coding super power; instead, it's a skill that you earned through your constant pursuit of improving as a developer.