What can neuroscience teach us about the brains of software developers? A lot.
Software development is among the fastest growing jobs in America — projected to grow 17% from 2014–2024 (much faster than the average job growth rate, a projected 7% change from 2014–2024).
In order to prepare the workforce to fill the demand, people are beginning to wonder how we categorize programming skills. Is there a certain type of person who is more likely to succeed in a programming role?
There is not a lot of specific scientific research on the topic. This is a problem, because in an effort to get more school support for computer science curriculum, government is trying to classify computer science with existing core skills credits, including a controversial (now retracted) effort in Kentucky to count computer science as a foreign language credit.
What we do know about software development, is that it requires several important core skills:
- Analysis — Developers must analyze requirements and build solutions that meet those requirements.
- Creativity — Software developers must be able to design software components and systems that work together to meet requirements.
- Communication — Software developers must write software that is easy to read, document that software, and communicate functionality to teammates and potentially to users.
- People skills — Software developers frequently work in groups, collaborating on systems with several other developers, communicating with managers or customers, working with visual designers, etc…
- Learning — Technology changes at an incredible rate. Software developers must be expert learners, able to adopt unfamiliar frameworks and quickly become productive with them.
- Detail oriented — Developers must consider both the happy path, or ideal user interaction, as well as what happens when connections fail, when unexpected inputs occur, etc…
- Big-picture oriented — Developers must be able to hold in their heads the over-all structure of the application: How various pieces fit together and interact.
- Math & abstraction — Software developers must be comfortable with abstractions & computational models. Functions will represent everything, including math formulas, network communications, drawing to the screen, and handling user inputs.
- Logic — Developers must be able to read and write potentially complex logic to handle switching and flow control.
Considering that communication and people skills are important skills for software developers, and considering the fact that “language” is part of the phrase “programming language”, it should come as no surprise that when an fMRI study of computer science student brains while they were reading source code, the brains’ language centers were activated.
In particular, areas of the brain associated with language processing, working memory, and attention. Even while reading code involving math, iteration, and conditional branches, areas of the brain typically associated with math and logic were not activated.
Maybe Kentucky wasn’t so far off after all. So, can we assume that those are the only, or even the primary areas of the brain needed for software development? Not quite.
The study only looked at reading source code. It didn’t attempt to measure the areas of the brain that are activated while developers write code. It also only looked at computer science students, and not at successful, professional software developers. That’s important.
Expert vs Novice Brains
Expert brains and novice brains are usually quite different. For example, when a novice piano player is beginning to learn a new piece of music, that novice player is thinking much more actively about how to play it — actively engaged in the simple task of playing the correct notes.
When an expert piano player attempts to play a piece they have committed to muscle memory, the song almost plays itself. It’s a bit like learning to ride a bike vs an experienced biker going out for a quick spin. The novice bicycle rider is worried about falling over, trying to balance. An experienced bicycle rider knows that if the wheels are moving and they stay pretty well centered over the bike, they probably won’t topple over. They basically go into auto-pilot mode, and probably don’t think about balance or falling over at all.
As you learn new skills, your brain changes and adapts to the new challenge, and gets to work rewiring itself so that it can meet those challenges while expending less effort.
In other words, while you’re learning, your brain is busy automating the new tasks you give it. It doesn’t just let your conscious, executive action frontal cortex handle everything manually, with no specialized circuits. Instead, it recruits other parts of the brain that are good at delivering automated answers to the most common queries.
A study of motor planning in expert golfers found expert brain activity was radically different from novice golfers:
The posterior cingulate, the amygdala-forebrain complex, and the basal ganglia were active only in novices, whereas experts had activation primarily in the superior parietal lobule, the dorsal lateral premotor area, and the occipital area.
Differences between expert and novice brains exist for more cognitive-focused tasks as well. A famous study of London taxi driver brains determined that learning “the knowledge” of London streets caused structural changes to brains. The study tracked trainees through the process of training for and passing the taxi driver test. Those who passed the test had an increase in the back part of the hippocampus.
“The human brain remains plastic even in adult life, allowing it to adapt when we learn new tasks.”
In much the same way athletes can condition their bodies to perform better, programmers can condition their brains to code better.
The Musical Brain & Software Development
You may recall that CS students reading source code activated areas of the brain associated with working memory. It turns out that musician’s brains have enhanced working memory capacity.
My wife is a tech agent, and I am her tech advisor. We’ve noticed over several years’ of working with software developers that many of them are also musicians. The Facebook campus in the South Bay has a dedicated music room full of instruments. When I moved to San Francisco, it was to work with a music tech startup. At virtually every software company I’ve worked with since, I’ve joked with coworkers about starting an office band.
Roughly 30% of the US population has played a musical instrument in the past year, but among my Twitter followers (almost all of whom are software developers or aspiring coders), nearly half are musicians.
Is it possible that the musician’s brain is already wired in a way that happens to be beneficial to software developers? It turns out, scientists have conducted fMRI studies on the brains of musicians, and discovered that playing a musical instrument gives your brain a cognitive workout unmatched by most other activities that have been studied.
Playing a musical instrument lights up lots of areas of the brain, and builds stronger connections between different areas of the brain, including between the left hemisphere (logic, analysis, language, etc…) and right hemisphere (creativity, imagination, intuition, visualization, etc…), both of which are required to work together in order to develop software effectively.
Remembering the diverse list of cognitive skills required for software developers, we begin to see that playing a musical instrument may be a great way to exercise your brain in ways that benefit your software development work.
Are programmer brains different? Evidence from related studies support the idea that programmers may have enhanced working memory capacity, heightened language processing skills, stronger analytical skills, and possibly enhanced hippocampus capacity. We need more specific research in this area to be sure that the results hold for broader programming activities.
The good news is that there is also good evidence that neuroplasticity, practice, and conditioning are responsible for the enhanced cognitive abilities of software developers — not necessarily a genetic predisposition (though that may also play a role).
In other words, if you want to be a body builder, you need to work out your muscles. If you want to be a software developer, you need to work out your brain.
Programmers need to condition their brains the way athletes condition their bodies.
Put in the work, and your brain will strengthen and rewire itself to support your efforts.
Need help knowing what to practice?
He spends most of his time in the San Francisco Bay Area with the most beautiful woman in the world.